diff -pruN 22.1.3-1/android/Android.mk 22.2.0~rc1-1/android/Android.mk
--- 22.1.3-1/android/Android.mk	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/android/Android.mk	2022-08-03 18:11:03.000000000 +0000
@@ -98,6 +98,8 @@ LOCAL_SHARED_LIBRARIES += \
 MESON_GEN_PKGCONFIGS += android.hardware.graphics.mapper:4.0
 endif
 
+__MY_SHARED_LIBRARIES := $(LOCAL_SHARED_LIBRARIES)
+
 ifeq ($(TARGET_IS_64_BIT),true)
 LOCAL_MULTILIB := 64
 else
@@ -112,28 +114,42 @@ endif
 
 #-------------------------------------------------------------------------------
 
+# $1: name
+# $2: symlink suffix
+# $3: subdir
+# $4: source prebuilt
+# $5: export headers
 define mesa3d-lib
+include $(CLEAR_VARS)
 LOCAL_MODULE_CLASS := SHARED_LIBRARIES
 LOCAL_MODULE := $1
 LOCAL_VENDOR_MODULE := true
 LOCAL_MODULE_RELATIVE_PATH := $3
-ifdef TARGET_2ND_ARCH
-LOCAL_SRC_FILES_$(TARGET_ARCH) := $(call relative_top_path,$(LOCAL_PATH))$($4)
-LOCAL_SRC_FILES_$(TARGET_2ND_ARCH) := $(call relative_top_path,$(LOCAL_PATH))$(2ND_$4)
-LOCAL_MULTILIB := both
-else
-LOCAL_SRC_FILES := $(call relative_top_path,$(LOCAL_PATH))$($4)
-endif
+LOCAL_PREBUILT_MODULE_FILE := $($4)
+LOCAL_MULTILIB := first
 LOCAL_CHECK_ELF_FILES := false
 LOCAL_MODULE_SUFFIX := .so
 LOCAL_MODULE_SYMLINKS := $1$2
+LOCAL_SHARED_LIBRARIES := $(__MY_SHARED_LIBRARIES)
+LOCAL_EXPORT_C_INCLUDE_DIRS := $5
 include $(BUILD_PREBUILT)
-include $(CLEAR_VARS)
-endef
 
-__MY_SHARED_LIBRARIES := $(LOCAL_SHARED_LIBRARIES)
+ifdef TARGET_2ND_ARCH
 include $(CLEAR_VARS)
+LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+LOCAL_MODULE := $1
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := $3
+LOCAL_PREBUILT_MODULE_FILE := $(2ND_$4)
+LOCAL_MULTILIB := 32
+LOCAL_CHECK_ELF_FILES := false
+LOCAL_MODULE_SUFFIX := .so
+LOCAL_MODULE_SYMLINKS := $1$2
 LOCAL_SHARED_LIBRARIES := $(__MY_SHARED_LIBRARIES)
+LOCAL_EXPORT_C_INCLUDE_DIRS := $5
+include $(BUILD_PREBUILT)
+endif
+endef
 
 # Module 'libgallium_dri', produces '/vendor/lib{64}/dri/libgallium_dri.so'
 # This module also trigger DRI symlinks creation process
@@ -153,10 +169,8 @@ $(foreach driver,$(BOARD_MESA3D_VULKAN_D
     $(eval $(call mesa3d-lib,vulkan.$(MESA_VK_LIB_SUFFIX_$(driver)),.so.0,hw,MESA3D_VULKAN_$(driver)_BIN)))
 
 ifneq ($(filter true, $(BOARD_MESA3D_BUILD_LIBGBM)),)
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(MESA3D_TOP)/src/gbm/main
-
 # Modules 'libgbm', produces '/vendor/lib{64}/libgbm.so'
-$(eval $(call mesa3d-lib,libgbm,.so.1,,MESA3D_LIBGBM_BIN))
+$(eval $(call mesa3d-lib,libgbm,.so.1,,MESA3D_LIBGBM_BIN,$(MESA3D_TOP)/src/gbm/main))
 endif
 
 #-------------------------------------------------------------------------------
diff -pruN 22.1.3-1/android/mesa3d_cross.mk 22.2.0~rc1-1/android/mesa3d_cross.mk
--- 22.1.3-1/android/mesa3d_cross.mk	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/android/mesa3d_cross.mk	2022-08-03 18:11:03.000000000 +0000
@@ -21,26 +21,23 @@
 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 # DEALINGS IN THE SOFTWARE.
 
-# Turn "dir1/dir2/dir3/dir4" into "../../../../"
-define relative_top_path
-$(eval __s:=) \
-$(foreach tmp,$(subst /,$(space),$1),$(eval __s:=$(__s)../)) \
-$(__s)
-endef
-
 MY_PATH := $(call my-dir)
 
 AOSP_ABSOLUTE_PATH := $(realpath .)
+define relative-to-absolute
+$(if $(patsubst /%,,$1),$(AOSP_ABSOLUTE_PATH)/$1,$1)
+endef
 
-m_dummy_$(LOCAL_MULTILIB) := $(TARGET_OUT_INTERMEDIATES)/MESON_DUMMY_$(LOCAL_MULTILIB)/dummy.c
+LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+LOCAL_MODULE := meson.dummy.$(LOCAL_MULTILIB)
 
-$(m_dummy_$(LOCAL_MULTILIB)):
+m_dummy := $(local-generated-sources-dir)/dummy.c
+$(m_dummy):
 	mkdir -p $(dir $@)
 	touch $@
 
-LOCAL_SRC_FILES := $(call relative_top_path,$(MY_PATH))$(m_dummy_$(LOCAL_MULTILIB))
+LOCAL_GENERATED_SOURCES := $(m_dummy)
 LOCAL_VENDOR_MODULE := true
-LOCAL_MODULE := meson.dummy.$(LOCAL_MULTILIB)
 
 # Prepare intermediate variables by AOSP make/core internals
 include $(BUILD_SHARED_LIBRARY)
@@ -83,7 +80,7 @@ MESA3D_GLES_BINS := \
 
 MESON_GEN_NINJA := \
 	cd $(MESON_OUT_DIR) && PATH=/usr/bin:/usr/local/bin:$$PATH meson ./build     \
-	--cross-file $(AOSP_ABSOLUTE_PATH)/$(MESON_GEN_DIR)/aosp_cross               \
+	--cross-file $(call relative-to-absolute,$(MESON_GEN_DIR))/aosp_cross        \
 	--buildtype=release                                                          \
 	-Ddri-search-path=/vendor/$(MESA3D_LIB_DIR)/dri                              \
 	-Dplatforms=android                                                          \
@@ -172,7 +169,7 @@ endef
 
 define m-lld-flags-cleaned
   $(subst prebuilts/,$(AOSP_ABSOLUTE_PATH)/prebuilts/, \
-  $(subst out/,$(AOSP_ABSOLUTE_PATH)/out/,             \
+  $(subst $(OUT_DIR)/,$(call relative-to-absolute,$(OUT_DIR))/, \
   $(subst -Wl$(comma)--fatal-warnings,,                \
   $(subst -Wl$(comma)--no-undefined-version,,          \
   $(subst -Wl$(comma)--gc-sections,,                   \
@@ -203,17 +200,32 @@ define m-c-flags
 endef
 
 define filter-c-flags
-  $(subst -std=gnu++17,, \
-  $(subst -fno-rtti,, \
-  $(patsubst  -W%,, \
-    $1)))
+  $(filter-out -std=gnu++17 -std=gnu99 -fno-rtti, \
+    $(patsubst  -W%,, $1))
+endef
+
+define nospace-includes
+  $(subst $(space)-isystem$(space),$(space)-isystem, \
+  $(subst $(space)-I$(space),$(space)-I, \
+  $(strip $(c-includes))))
 endef
 
-define m-c-abs-includes
-  $(subst  -isystem , -isystem $(AOSP_ABSOLUTE_PATH)/, \
-  $(subst  -I, -I$(AOSP_ABSOLUTE_PATH)/, \
-  $(subst  -I , -I, \
-    $(c-includes))))
+# Ensure include paths are always absolute
+# When OUT_DIR_COMMON_BASE env variable is set the AOSP/KATI will use absolute paths
+# for headers in intermediate output directories, but relative for all others.
+define abs-include
+$(strip \
+  $(if $(patsubst -I%,,$1),\
+    $(if $(patsubst -isystem/%,,$1),\
+      $(subst -isystem,-isystem$(AOSP_ABSOLUTE_PATH)/,$1),\
+      $1\
+    ),\
+    $(if $(patsubst -I/%,,$1),\
+      $(subst -I,-I$(AOSP_ABSOLUTE_PATH)/,$1),\
+      $1\
+    )\
+  )
+)
 endef
 
 $(MESON_GEN_FILES_TARGET): PREPROCESS_MESON_CONFIGS:=$(PREPROCESS_MESON_CONFIGS)
@@ -221,8 +233,10 @@ $(MESON_GEN_FILES_TARGET): MESON_GEN_DIR
 $(MESON_GEN_FILES_TARGET): $(sort $(shell find -L $(MESA3D_TOP) -not -path '*/\.*'))
 	mkdir -p $(dir $@)
 	echo -e "[properties]\n"                                                                                                  \
-		"c_args = [$(foreach flag, $(call filter-c-flags,$(m-c-flags) $(m-c-abs-includes)),'$(flag)', )'']\n"             \
-		"cpp_args = [$(foreach flag, $(call filter-c-flags,$(m-cpp-flags) $(m-c-abs-includes)),'$(flag)', )'']\n"         \
+		"c_args = [$(foreach flag,$(call filter-c-flags,$(m-c-flags)),'$(flag)', ) \
+                           $(foreach inc,$(nospace-includes),'$(call abs-include,$(inc))', )'']\n" \
+		"cpp_args = [$(foreach flag,$(call filter-c-flags,$(m-cpp-flags)),'$(flag)', ) \
+                             $(foreach inc,$(nospace-includes),'$(call abs-include,$(inc))', )'']\n" \
 		"c_link_args = [$(foreach flag, $(m-lld-flags-cleaned),'$(flag)',)'']\n"                                          \
 		"cpp_link_args = [$(foreach flag, $(m-lld-flags-cleaned),'$(flag)',)'']\n"                                        \
 		"needs_exe_wrapper = true\n"                                                                                      \
@@ -232,7 +246,7 @@ $(MESON_GEN_FILES_TARGET): $(sort $(shel
 		"cpp = [$(foreach arg,$(PRIVATE_CXX),'$(subst prebuilts/,$(AOSP_ABSOLUTE_PATH)/prebuilts/,$(arg))',)'']\n"        \
 		"c_ld = 'lld'\n"                                                                                                  \
 		"cpp_ld = 'lld'\n\n"                                                                                              \
-		"pkgconfig = ['env', 'PKG_CONFIG_LIBDIR=' + '$(AOSP_ABSOLUTE_PATH)/$(MESON_GEN_DIR)', '/usr/bin/pkg-config']\n\n" \
+		"pkgconfig = ['env', 'PKG_CONFIG_LIBDIR=' + '$(call relative-to-absolute,$(MESON_GEN_DIR))', '/usr/bin/pkg-config']\n\n" \
 		"llvm-config = '/dev/null'\n"                                                                                     \
 		"[host_machine]\n"                                                                                                \
 		"system = 'linux'\n"                                                                                              \
@@ -271,7 +285,7 @@ $(MESON_OUT_DIR)/install/.install.timest
 $(MESON_OUT_DIR)/install/.install.timestamp: $(MESON_OUT_DIR)/.build.timestamp
 	rm -rf $(dir $@)
 	mkdir -p $(dir $@)
-	DESTDIR=$(AOSP_ABSOLUTE_PATH)/$(dir $@) $(MESON_BUILD) install
+	DESTDIR=$(call relative-to-absolute,$(dir $@)) $(MESON_BUILD) install
 	$(MESON_COPY_LIBGALLIUM)
 	touch $@
 
diff -pruN 22.1.3-1/bin/gen_vs_module_defs.py 22.2.0~rc1-1/bin/gen_vs_module_defs.py
--- 22.1.3-1/bin/gen_vs_module_defs.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/bin/gen_vs_module_defs.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,98 @@
+#!/usr/bin/env python3
+# Copyright © 2021-2021 Yonggang Luo
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+gen_help = """Generates visual studio module definition file."""
+
+import argparse
+
+"""
+For input template definition file
+For gcc/x64,gcc/arm64,visual studio
+`wglMakeCurrent@8                     @357` => `wglMakeCurrent @357`
+`DrvCopyContext@12` => `DrvCopyContext`
+`stw_get_device` => `stw_get_device`
+For gcc/x86,gcc/arm
+`wglMakeCurrent@8                     @357` => `wglMakeCurrent@8 @357 == wglMakeCurrent`
+`DrvCopyContext@12` => `DrvCopyContext@12 == DrvCopyContext`
+`stw_get_device` => `stw_get_device`
+
+"""
+def gen_vs_module_def(in_file: str, out_file: str, compiler_id: str, cpu_family: str) -> None:
+    out_file_lines = ['EXPORTS']
+    with open(in_file, 'r', encoding='utf-8') as f:
+        lines = f.readlines()
+        for line in lines:
+            line = line.strip()
+            tokens = line.split(';')
+            if not tokens:
+                continue
+            def_infos = [x for x in tokens[0].split(' ') if len(x) > 0]
+            if not def_infos:
+                if line:
+                    out_file_lines.append('\t' + line)
+                else:
+                    out_file_lines.append('')
+                continue
+            name_infos = def_infos[0].split('@')
+            if not name_infos:
+                out_file_lines.append('\t;' + line)
+                continue
+            order_info = '' if len(def_infos) <= 1 else def_infos[1]
+            if def_infos[0] != name_infos[0] and \
+                (compiler_id == 'gcc') and (cpu_family not in {'x86_64', 'aarch64'}):
+                if order_info:
+                    out_file_lines.append('\t' + def_infos[0] + ' ' + order_info + ' == ' + name_infos[0])
+                else:
+                    out_file_lines.append('\t' + def_infos[0] + ' == ' + name_infos[0])
+            else:
+                if order_info:
+                    out_file_lines.append('\t' + name_infos[0] + ' ' + order_info)
+                else:
+                    out_file_lines.append('\t' + name_infos[0])
+    with open(out_file, 'wb') as f:
+        out_file_content = '\n'.join(out_file_lines) + '\n'
+        f.write(out_file_content.encode('utf-8'))
+'''
+python ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/libgl-gdi/opengl32.def.in --out_file src/gallium/targets/libgl-gdi/opengl32.def --compiler_id gcc --cpu_family x86_64
+python ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/libgl-gdi/opengl32.def.in --out_file src/gallium/targets/libgl-gdi/opengl32.mingw.def --compiler_id gcc --cpu_family x86
+
+python ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/osmesa/osmesa.def.in --out_file src/gallium/targets/osmesa/osmesa.def --compiler_id gcc --cpu_family x86_64
+python ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/osmesa/osmesa.def.in --out_file src/gallium/targets/osmesa/osmesa.mingw.def --compiler_id gcc --cpu_family x86
+
+python ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/wgl/gallium_wgl.def.in --out_file src/gallium/targets/wgl/gallium_wgl.def --compiler_id gcc --cpu_family x86_64
+python ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/wgl/gallium_wgl.def.in --out_file src/gallium/targets/wgl/gallium_wgl.mingw.def --compiler_id gcc --cpu_family x86
+
+python ./bin/gen_vs_module_defs.py --in_file src/egl/main/egl.def.in --out_file src/egl/main/egl.def --compiler_id gcc --cpu_family x86_64
+python ./bin/gen_vs_module_defs.py --in_file src/egl/main/egl.def.in --out_file src/egl/main/egl.mingw.def --compiler_id gcc --cpu_family x86
+
+python ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/lavapipe/vulkan_lvp.def.in --out_file src/gallium/targets/lavapipe/vulkan_lvp.def --compiler_id gcc --cpu_family x86_64
+python ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/lavapipe/vulkan_lvp.def.in --out_file src/gallium/targets/lavapipe/vulkan_lvp.mingw.def --compiler_id gcc --cpu_family x86
+
+'''
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(description=gen_help)
+    parser.add_argument('--in_file', help='input template moudle definition file')
+    parser.add_argument('--out_file', help='output moudle definition file')
+    parser.add_argument('--compiler_id', help='compiler id')
+    parser.add_argument('--cpu_family', help='cpu family')
+    args = parser.parse_args()
+    # print(args)
+    gen_vs_module_def(args.in_file, args.out_file, args.compiler_id, args.cpu_family)
diff -pruN 22.1.3-1/bin/meson.build 22.2.0~rc1-1/bin/meson.build
--- 22.1.3-1/bin/meson.build	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/bin/meson.build	2022-08-03 18:11:03.000000000 +0000
@@ -19,5 +19,6 @@
 # SOFTWARE.
 
 git_sha1_gen_py = files('git_sha1_gen.py')
+gen_vs_module_defs_py = files('gen_vs_module_defs.py')
 symbols_check = find_program('symbols-check.py')
 install_megadrivers_py = find_program('install_megadrivers.py')
diff -pruN 22.1.3-1/bin/refcnt-log-helper.py 22.2.0~rc1-1/bin/refcnt-log-helper.py
--- 22.1.3-1/bin/refcnt-log-helper.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/bin/refcnt-log-helper.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+# Copyright © Microsoft Corporation
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import argparse
+
+# Take a log file produced by GALLIUM_REFCNT_LOG, filter it to the objects that
+# weren't destroyed by the end of the log, and write the results out sorted.
+# Strips stacks by default to prevent OOM. Could probably be rewritten to walk
+# the file twice to preserve stacks without OOM, but this was the easy way.
+def main():
+    parser = argparse.ArgumentParser()
+    parser.add_argument('--input',
+                        action='store',
+                        required=True,
+                        help='path to file containing refcount log')
+    parser.add_argument('--output',
+                        action='store',
+                        required=True,
+                        help='path to trimmed log')
+    parser.add_argument('--filter',
+                        help='object type filter')
+    parser.add_argument('--keep-stacks',
+                        help='keep stacks, otherwise only headers')
+    args = parser.parse_args()
+
+    objects = {}
+
+    with open(args.input) as in_file:
+        stack = []
+        cur_object = ''
+
+        for line in in_file:
+            if line[0] == '<':
+
+                parts = line.split(' ')
+                prev_object = cur_object
+                cur_object = parts[1]
+                if parts[3].strip() == 'Destroy':
+                    if cur_object in objects:
+                        del objects[cur_object]
+                else:
+                    if parts[3].strip() == 'Create':
+                        if (not args.filter) or (args.filter in parts[0]):
+                            objects[cur_object] = []
+                    if prev_object in objects:
+                        objects[prev_object] += stack
+
+                stack = [line]
+            elif args.keep_stacks:
+                stack += line
+
+    with open(args.output, 'wt') as out_file:
+        for stack in objects.values():
+            for stack_line in stack:
+                out_file.write(stack_line)
+
+
+if __name__ == '__main__':
+    main()
diff -pruN 22.1.3-1/CODEOWNERS 22.2.0~rc1-1/CODEOWNERS
--- 22.1.3-1/CODEOWNERS	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/CODEOWNERS	2022-08-03 18:11:03.000000000 +0000
@@ -28,11 +28,11 @@ meson.build @dbaker @eric
 /android/ @roman.stratiienko
 
 # Compatibility headers
-/include/c99* @evelikov
-/include/c11* @eric
+/include/c99* @xexaxo
+/src/c11/ @eric @lygstate
 
 # Documentation
-/docs/ @eric @evelikov
+/docs/ @eric @xexaxo
 
 
 ##########
@@ -52,21 +52,21 @@ meson.build @dbaker @eric
 #############
 
 # EGL
-/src/egl/ @eric @evelikov
-/include/EGL/ @eric @evelikov
+/src/egl/ @eric @xexaxo
+/include/EGL/ @eric @xexaxo
 
 # EGL - Android support
 /src/egl/drivers/dri2/platform_android.c @robh @tfiga
 
 # EGL - Device support
-/src/egl/drivers/dri2/platform_device.c @evelikov
+/src/egl/drivers/dri2/platform_device.c @xexaxo
 
 # EGL - Wayland support
 /src/egl/wayland/ @daniels @eric
 /src/egl/drivers/dri2/platform_wayland.c @daniels @eric
 
 # Gallium targets
-/src/gallium/targets/ @evelikov
+/src/gallium/targets/ @xexaxo
 
 # GLX
 /src/glx/ @ajax
@@ -87,11 +87,11 @@ meson.build @dbaker @eric
 /src/hgl/ @kallisti5
 
 # Loader - DRI/classic
-/src/loader/ @evelikov
+/src/loader/ @xexaxo
 
 # Loader - Gallium
-/src/gallium/auxiliary/pipe-loader/ @evelikov
-/src/gallium/auxiliary/target-helpers/ @evelikov
+/src/gallium/auxiliary/pipe-loader/ @xexaxo
+/src/gallium/auxiliary/target-helpers/ @xexaxo
 
 # Vulkan WSI - Display
 /src/vulkan/wsi/wsi_common_display.* @keithp
diff -pruN 22.1.3-1/debian/changelog 22.2.0~rc1-1/debian/changelog
--- 22.1.3-1/debian/changelog	2022-08-04 15:38:29.000000000 +0000
+++ 22.2.0~rc1-1/debian/changelog	2022-08-04 15:38:31.000000000 +0000
@@ -1,3 +1,17 @@
+mesa (22.2.0~rc1-1) unstable; urgency=medium
+
+  * New upstream release candidate.
+  * revert-enabling-tlsdesc-support.diff: Dropped, obsolete.
+
+ -- Timo Aaltonen <tjaalton@debian.org>  Thu, 04 Aug 2022 10:33:09 +0300
+
+mesa (22.1.5-1) unstable; urgency=medium
+
+  * New upstream release.
+  * control: Fix mesa-opencl-icd depends. (Closes: #1014840)
+
+ -- Timo Aaltonen <tjaalton@debian.org>  Thu, 04 Aug 2022 09:49:41 +0300
+
 mesa (22.1.3-1) unstable; urgency=medium
 
   * New upstream release.
diff -pruN 22.1.3-1/debian/control 22.2.0~rc1-1/debian/control
--- 22.1.3-1/debian/control	2022-08-04 15:38:29.000000000 +0000
+++ 22.2.0~rc1-1/debian/control	2022-08-04 15:38:31.000000000 +0000
@@ -415,7 +415,7 @@ Section: libs
 Architecture: amd64 arm64 armel armhf i386 mips64el mipsel powerpc ppc64 ppc64el s390x sparc64
 Pre-Depends: ${misc:Pre-Depends}
 Depends:
- libclc-13,
+ libclc-14,
  ocl-icd-libopencl1 | libopencl1,
  ${shlibs:Depends},
  ${misc:Depends},
diff -pruN 22.1.3-1/debian/patches/revert-enabling-tlsdesc-support.diff 22.2.0~rc1-1/debian/patches/revert-enabling-tlsdesc-support.diff
--- 22.1.3-1/debian/patches/revert-enabling-tlsdesc-support.diff	2022-08-04 15:38:29.000000000 +0000
+++ 22.2.0~rc1-1/debian/patches/revert-enabling-tlsdesc-support.diff	1970-01-01 00:00:00.000000000 +0000
@@ -1,54 +0,0 @@
-commit b26302c9beb45eb302810ce3e0595197b659c6aa
-Author: Timo Aaltonen <tjaalton@debian.org>
-Date:   Tue Mar 29 17:49:05 2022 +0300
-
-    Revert "Auto-enable TLSDESC support"
-    
-    This reverts commit 60d95c5d0feef4e4b2820a26c4708aff10f5730d.
-
-diff --git a/meson.build b/meson.build
-index bca6b1f5c41..66cb405247e 100644
---- a/meson.build
-+++ b/meson.build
-@@ -501,41 +501,6 @@ if with_platform_android and get_option('platform-sdk-version') >= 29
-   cpp_args += '-fno-emulated-tls'
- endif
- 
--# -mtls-dialect=gnu2 speeds up non-initial-exec TLS significantly but requires
--# full toolchain (including libc) support.
--have_mtls_dialect = false
--foreach c_arg : get_option('c_args')
--  if c_arg.startswith('-mtls-dialect=')
--    have_mtls_dialect = true
--    break
--  endif
--endforeach
--if not have_mtls_dialect
--  # need .run to check libc support. meson aborts when calling .run when
--  # cross-compiling, but because this is just an optimization we can skip it
--  if meson.is_cross_build() and not meson.has_exe_wrapper()
--    warning('cannot auto-detect -mtls-dialect when cross-compiling, using compiler default')
--  else
--    # -fpic to force dynamic tls, otherwise TLS relaxation defeats check
--    gnu2_test = cc.run('int __thread x; int main() { return x; }',
--                       args: ['-mtls-dialect=gnu2', '-fpic'],
--                       name: '-mtls-dialect=gnu2')
--    if gnu2_test.returncode() == 0 and (
--          # check for lld 13 bug: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5665
--          host_machine.cpu_family() != 'x86_64' or
--          # get_linker_id misses LDFLAGS=-fuse-ld=lld: https://github.com/mesonbuild/meson/issues/6377
--          #cc.get_linker_id() != 'ld.lld' or
--          cc.links('''int __thread x; int y; int main() { __asm__(
--                "leaq x@TLSDESC(%rip), %rax\n"
--                "movq y@GOTPCREL(%rip), %rdx\n"
--                "call *x@TLSCALL(%rax)\n"); }''', name: 'split TLSDESC')
--          )
--      c_args += '-mtls-dialect=gnu2'
--      cpp_args += '-mtls-dialect=gnu2'
--    endif
--  endif
--endif
--
- if with_platform_windows and with_shared_glapi
-   # Windows doesn't support DLL exports/imports being TLS variables. When using shared
-   # glapi, libglapi.dll hosts the TLS, but other DLLs need to use them. Instead of falling
diff -pruN 22.1.3-1/debian/patches/series 22.2.0~rc1-1/debian/patches/series
--- 22.1.3-1/debian/patches/series	2022-08-04 15:38:29.000000000 +0000
+++ 22.2.0~rc1-1/debian/patches/series	2022-08-04 15:38:31.000000000 +0000
@@ -1,4 +1,3 @@
 07_gallium-fix-build-failure-on-powerpcspe.diff
 path_max.diff
 src_glx_dri_common.h.diff
-revert-enabling-tlsdesc-support.diff
diff -pruN 22.1.3-1/docs/ci/bare-metal.rst 22.2.0~rc1-1/docs/ci/bare-metal.rst
--- 22.1.3-1/docs/ci/bare-metal.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/ci/bare-metal.rst	2022-08-03 18:11:03.000000000 +0000
@@ -200,11 +200,13 @@ want a pass-through HTTP cache.  On your
 
 Add the server setup files:
 
-.. literalinclude: fdo-cache:
+.. literalinclude:: fdo-cache
    :name: /etc/nginx/sites-available/fdo-cache
+   :caption: /etc/nginx/sites-available/fdo-cache
 
-.. literalinclude: uri-caching.conf:
-   :name: /etc/nginx/sites-available/snippets/uri-caching.conf
+.. literalinclude:: uri-caching.conf
+   :name: /etc/nginx/snippets/uri-caching.conf
+   :caption: /etc/nginx/snippets/uri-caching.conf
 
 Edit the listener addresses in fdo-cache to suit the ethernet interface that
 your devices are on.
diff -pruN 22.1.3-1/docs/ci/index.rst 22.2.0~rc1-1/docs/ci/index.rst
--- 22.1.3-1/docs/ci/index.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/ci/index.rst	2022-08-03 18:11:03.000000000 +0000
@@ -39,7 +39,7 @@ empty (or set to the default ``.gitlab-c
 If you're having issues with the GitLab CI, your best bet is to ask
 about it on ``#freedesktop`` on OFTC and tag `Daniel Stone
 <https://gitlab.freedesktop.org/daniels>`__ (``daniels`` on IRC) or
-`Eric Anholt <https://gitlab.freedesktop.org/anholt>`__ (``anholt`` on
+`Emma Anholt <https://gitlab.freedesktop.org/anholt>`__ (``anholt`` on
 IRC).
 
 The three GitLab CI systems currently integrated are:
diff -pruN 22.1.3-1/docs/ci/kernel.rst 22.2.0~rc1-1/docs/ci/kernel.rst
--- 22.1.3-1/docs/ci/kernel.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/ci/kernel.rst	2022-08-03 18:11:03.000000000 +0000
@@ -18,7 +18,7 @@ Linux mainline, that is why Mesa has its
 as the base for newer kernels.
 
 So, one should base the kernel uprev from the last tag used in the Mesa CI,
-please refer to `.gitlab-ci.yml` `KERNEL_URL` variable.
+please refer to `.gitlab-ci/container/gitlab-ci.yml` `KERNEL_URL` variable.
 Every tag has a standard naming: `vX.YZ-for-mesa-ci-<commit_short_SHA>`, which
 can be created via the command:
 
@@ -28,7 +28,7 @@ Building Kernel
 ---------------
 
 When Mesa CI generates a new rootfs image, the Linux Kernel is built based on
-the script located at `.gitlab-ci/build-kernel.sh`.
+the script located at `.gitlab-ci/container/build-kernel.sh`.
 
 Updating Kconfigs
 ^^^^^^^^^^^^^^^^^
@@ -56,8 +56,8 @@ Updating image tags
 
 Every kernel uprev should update 3 image tags, located at two files.
 
-:code:`.gitlab-ci.yml` tag
-^^^^^^^^^^^^^^^^^^^^^^^^^^
+:code:`.gitlab-ci/container/gitlab-ci.yml` tag
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 - **KERNEL_URL** for the location of the new kernel
 
 :code:`.gitlab-ci/image-tags.yml` tags
diff -pruN 22.1.3-1/docs/ci/skqp.rst 22.2.0~rc1-1/docs/ci/skqp.rst
--- 22.1.3-1/docs/ci/skqp.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/ci/skqp.rst	2022-08-03 18:11:03.000000000 +0000
@@ -10,7 +10,7 @@ The rendering tests have support for GL,
 rendering scenarios.
 And the unit tests check the GPU behavior without rendering images.
 
-Tests 
+Tests
 -----
 
 Render tests design
@@ -19,7 +19,7 @@ Render tests design
 It is worth noting that `rendertests.txt` can bring some detail about each test
 expectation, so each test can have a max pixel error count, to tell skqp that it
 is OK to have at most that number of errors for that test. See also:
-https://github.com/google/skia/blob/main/tools/skqp/README_ALGORITHM.md
+https://github.com/google/skia/blob/c29454d1c9ebed4758a54a69798869fa2e7a36e0/tools/skqp/README_ALGORITHM.md
 
 .. _test-location:
 
diff -pruN 22.1.3-1/docs/dispatch.rst 22.2.0~rc1-1/docs/dispatch.rst
--- 22.1.3-1/docs/dispatch.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/dispatch.rst	2022-08-03 18:11:03.000000000 +0000
@@ -143,8 +143,7 @@ reference.
 .. code-block:: c
    :caption: TLS ``GET_DISPATCH`` Implementation
 
-   extern __thread struct _glapi_table *_glapi_tls_Dispatch
-       __attribute__((tls_model("initial-exec")));
+   extern __THREAD_INITIAL_EXEC struct _glapi_table *_glapi_tls_Dispatch;
 
    #define GET_DISPATCH() _glapi_tls_Dispatch
 
diff -pruN 22.1.3-1/docs/drivers/anv.rst 22.2.0~rc1-1/docs/drivers/anv.rst
--- 22.1.3-1/docs/drivers/anv.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/drivers/anv.rst	2022-08-03 18:11:03.000000000 +0000
@@ -230,3 +230,45 @@ is a byte offset from the descriptor set
 binding. ``anv_descriptor_set_binding_layout::array_size`` is the
 number of ``anv_*_descriptor`` elements in the descriptor set memory
 from that offset for the binding.
+
+
+Pipeline state emission
+-----------------------
+
+Vulkan initially started by baking as much state as possible in
+pipelines. But extension after extension, more and more state has
+become potentially dynamic.
+
+Anv tries to limit the amount of time an instruction has to be packed
+to reprogram part of the 3D pipeline state. The packing is happening
+in 2 places :
+
+- ``genX_pipeline.c`` where the non dynamic state is emitted in the
+  pipeline batch. This batch is copied into the command buffer batch
+  when calling ``vkCmdBindPipeline()``
+
+- ``genX_cmd_buffer.c`` in the ``cmd_buffer_flush_state`` function
+  which ends up calling into ``gfx8_cmd_buffer.c`` &
+  ``gfx7_cmd_buffer.c``
+
+The rule to know where to emit an instruction programming the 3D
+pipeline is as follow :
+
+- If any field of the instruction can be made dynamic, it should be
+  emitted in ``genX_cmd_buffer.c``, ``gfx8_cmd_buffer.c`` or
+  ``gfx7_cmd_buffer.c``
+
+- Otherwise, the instruction can be emitted in ``genX_pipeline.c``
+
+When a piece of state programming is dynamic, it should have a
+corresponding field in ``anv_dynamic_state`` and the
+``anv_dynamic_state_copy()`` function should be updated to ensure we
+minimize the amount of time an instruction should be emitted. Each
+instruction should have a associated ``ANV_CMD_DIRTY_*`` mask so that
+the dynamic emission code can tell when to re-emit an instruction.
+
+An instruction can also be re-emitted when a pipeline changes by
+checking for ``ANV_CMD_DIRTY_PIPELINE``. It should only do so if it
+requires to know some value that is coming from the
+``anv_graphics_pipeline`` object that is not available from
+``anv_dynamic_state``.
diff -pruN 22.1.3-1/docs/drivers/asahi.rst 22.2.0~rc1-1/docs/drivers/asahi.rst
--- 22.1.3-1/docs/drivers/asahi.rst	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/docs/drivers/asahi.rst	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,39 @@
+Asahi
+=====
+
+The Asahi driver aims to provide an OpenGL implementation for the Apple M1.
+
+Testing on macOS
+-----------------
+
+On macOS, the experimental Asahi driver may built with options:
+
+    -Dosmesa=true -Dglx=xlib -Dgallium-drivers=asahi,swrast
+
+To use, set the ``DYLD_LIBRARY_PATH`` environment variable:
+
+   DYLD_LIBRARY_PATH=/Users/nobody/mesa/build/src/gallium/targets/libgl-xlib/ glmark2 --reuse-context
+
+Only X11 apps are supported. XQuartz must be setup separately.
+
+Wrap (macOS only)
+-----------------
+
+Mesa includes a library that wraps the key IOKit entrypoints used in the macOS
+UABI for AGX. The wrapped routines print information about the kernel calls made
+and dump work submitted to the GPU using agxdecode.
+
+This library allows debugging Mesa, particularly around the undocumented macOS
+user-kernel interface. Logs from Mesa may compared to Metal to check that the
+UABI is being used correcrly.
+
+Furthermore, it allows reverse-engineering the hardware, as glue to get at the
+"interesting" GPU memory.
+
+The library is only built if ``-Dtools=asahi`` is passed. It builds a single
+``wrap.dylib`` file, which should be inserted into a process with the
+``DYLD_INSERT_LIBRARIES`` environment variable.
+
+For example, to trace an app ``./app``, run:
+
+    DYLD_INSERT_LIBRARIES=~/mesa/build/src/asahi/lib/libwrap.dylib ./app
diff -pruN 22.1.3-1/docs/drivers/lima.rst 22.2.0~rc1-1/docs/drivers/lima.rst
--- 22.1.3-1/docs/drivers/lima.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/drivers/lima.rst	2022-08-03 18:11:03.000000000 +0000
@@ -68,10 +68,14 @@ accepts the following comma-separated li
 
   ``bocache``
     print debug info for BO cache
+  ``diskcache``
+    print debug info for shader disk cache
   ``dump``
     dump GPU command stream to ``$PWD/lima.dump``
   ``gp``
     print GP shader compiler result of each stage
+  ``noblit``
+    use generic u_blitter instead of lima-specific
   ``nobocache``
     disable BO cache
   ``nogrowheap``
@@ -87,6 +91,7 @@ accepts the following comma-separated li
   ``singlejob``
     disable multi job optimization
 
+
 .. envvar:: LIMA_CTX_NUM_PLB <int> (None)
 
 set number of PLB per context (used for development purposes)
diff -pruN 22.1.3-1/docs/drivers/panfrost.rst 22.2.0~rc1-1/docs/drivers/panfrost.rst
--- 22.1.3-1/docs/drivers/panfrost.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/drivers/panfrost.rst	2022-08-03 18:11:03.000000000 +0000
@@ -3,8 +3,8 @@ Panfrost
 
 The Panfrost driver stack includes an OpenGL ES implementation for Arm Mali
 GPUs based on the Midgard and Bifrost microarchitectures. It is **conformant**
-on Mali G52 but **non-conformant** on other GPUs. The following hardware is
-currently supported:
+on Mali-G52 and Mali-G57 but **non-conformant** on other GPUs. The following
+hardware is currently supported:
 
 =========  ============ ============ =======
 Product    Architecture OpenGL ES    OpenGL
@@ -20,6 +20,7 @@ Mali G31   Bifrost (v7) 3.1          3.1
 Mali G51   Bifrost (v7) 3.1          3.1
 Mali G52   Bifrost (v7) 3.1          3.1
 Mali G76   Bifrost (v7) 3.1          3.1
+Mali G57   Valhall (v9) 3.1          3.1
 =========  ============ ============ =======
 
 Other Midgard and Bifrost chips (T604, T628, G71) are not yet supported.
@@ -54,3 +55,104 @@ Chat
 Panfrost developers and users hang out on IRC at ``#panfrost`` on OFTC. Note
 that registering and authenticating with `NickServ` is required to prevent
 spam. `Join the chat. <https://webchat.oftc.net/?channels=#panfrost>`_
+
+drm-shim
+--------
+
+Panfrost implements ``drm-shim``, stubbing out the Panfrost kernel interface.
+Use cases for this functionality include:
+
+- Future hardware bring up
+- Running shader-db on non-Mali workstations
+- Reproducing compiler (and some driver) bugs without Mali hardware
+
+Although Mali hardware is usually paired with an Arm CPU, Panfrost is portable C
+code and should work on any Linux machine. In particular, you can test the
+compiler on shader-db on an Intel desktop.
+
+To build Mesa with Panfrost drm-shim, configure meson with
+``-Dgallium-drivers=panfrost`` and ``-Dtools=drm-shim``. See the above
+building section for a full invocation. The drm-shim binary will be built to
+``build/src/panfrost/drm-shim/libpanfrost_noop_drm_shim.so``.
+
+To use, set the ``LD_PRELOAD`` environment variable to the drm-shim binary.  It
+may also be necessary to set ``LIBGL_DRIVERS_PATH`` to the location where Mesa
+was installed.
+
+By default, drm-shim mocks a Mali-G52 system. To select a specific Mali GPU,
+set the ``PAN_GPU_ID`` environment variable to the desired GPU ID:
+
+=========  ============ =======
+Product    Architecture GPU ID
+=========  ============ =======
+Mali-T720  Midgard (v4) 720
+Mali-T860  Midgard (v5) 860
+Mali-G72   Bifrost (v6) 6221
+Mali-G52   Bifrost (v7) 7212
+Mali-G57   Valhall (v9) 9093
+=========  ============ =======
+
+Additional GPU IDs are enumerated in the ``panfrost_model_list`` list in
+``src/panfrost/lib/pan_props.c``.
+
+As an example: assuming Mesa is installed to a local path ``~/lib`` and Mesa's
+build directory is ``~/mesa/build``, a shader can be compiled for Mali-G52 as::
+
+   ~/shader-db$ BIFROST_MESA_DEBUG=shaders LIBGL_DRIVERS_PATH=~/lib/dri/ LD_PRELOAD=~/mesa/build/src/panfrost/drm-shim/libpanfrost_noop_drm_shim.so PAN_GPU_ID=7212 ./run shaders/glmark/1-1.shader_test
+
+The same shader can be compiled for Mali-T720 as::
+
+   ~/shader-db$ MIDGARD_MESA_DEBUG=shaders LIBGL_DRIVERS_PATH=~/lib/dri/ LD_PRELOAD=~/mesa/build/src/panfrost/drm-shim/libpanfrost_noop_drm_shim.so PAN_GPU_ID=720 ./run shaders/glmark/1-1.shader_test
+
+These examples set the compilers' ``shaders`` debug flags to dump the optimized
+NIR, backend IR after instruction selection, backend IR after register
+allocation and scheduling, and a disassembly of the final compiled binary.
+
+As another example, this invocation runs a single dEQP test "on" Mali-G52,
+pretty-printing GPU data structures and disassembling all shaders
+(``PAN_MESA_DEBUG=trace``) as well as dumping raw GPU memory
+(``PAN_MESA_DEBUG=dump``). The ``EGL_PLATFORM=surfaceless`` environment variable
+and various flags to dEQP mimic the surfaceless environment that our
+continuous integration (CI) uses. This eliminates window system dependencies,
+although it requires a specially built CTS::
+
+   ~/VK-GL-CTS/build/external/openglcts/modules$ PAN_MESA_DEBUG=trace,dump LIBGL_DRIVERS_PATH=~/lib/dri/ LD_PRELOAD=~/mesa/build/src/panfrost/drm-shim/libpanfrost_noop_drm_shim.so PAN_GPU_ID=7212 EGL_PLATFORM=surfaceless ./glcts --deqp-surface-type=pbuffer --deqp-gl-config-name=rgba8888d24s8ms0 --deqp-surface-width=256 --deqp-surface-height=256 -n dEQP-GLES31.functional.shaders.builtin_functions.common.abs.float_highp_compute
+
+U-interleaved tiling
+---------------------
+
+Panfrost supports u-interleaved tiling. U-interleaved tiling is
+indicated by the ``DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED`` modifier.
+
+The tiling reorders whole pixels (blocks). It does not compress or modify the
+pixels themselves, so it can be used for any image format. Internally, images
+are divided into tiles. Tiles occur in source order, but pixels (blocks) within
+each tile are reordered according to a space-filling curve.
+
+For regular formats, 16x16 tiles are used. This harmonizes with the default tile
+size for binning and CRCs (transaction elimination). It also means a single line
+(16 pixels) at 4 bytes per pixel equals a single 64-byte cache line.
+
+For formats that are already block compressed (S3TC, RGTC, etc), 4x4 tiles are
+used, where entire blocks are reorder. Most of these formats compress 4x4
+blocks, so this gives an effective 16x16 tiling. This justifies the tile size
+intuitively, though it's not a rule: ASTC may uses larger blocks.
+
+Within a tile, the X and Y bits are interleaved (like Morton order), but with a
+twist: adjacent bit pairs are XORed. The reason to add XORs is not obvious.
+Visually, addresses take the form::
+
+   | y3 | (x3 ^ y3) | y2 | (y2 ^ x2) | y1 | (y1 ^ x1) | y0 | (y0 ^ x0) |
+
+Reference routines to encode/decode u-interleaved images are available in
+``src/panfrost/shared/test/test-tiling.cpp``, which documents the space-filling
+curve. This reference implementation is used to unit test the optimized
+implementation used in production. The optimized implementation is available in
+``src/panfrost/shared/pan_tiling.c``.
+
+Although these routines are part of Panfrost, they are also used by Lima, as Arm
+introduced the format with Utgard. It is the only tiling supported on Utgard. On
+Mali-T760 and newer, Arm Framebuffer Compression (AFBC) is more efficient and
+should be used instead where possible. However, not all formats are
+compressible, so u-interleaved tiling remains an important fallback on Panfrost.
+
diff -pruN 22.1.3-1/docs/drivers/zink.rst 22.2.0~rc1-1/docs/drivers/zink.rst
--- 22.1.3-1/docs/drivers/zink.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/drivers/zink.rst	2022-08-03 18:11:03.000000000 +0000
@@ -35,7 +35,10 @@ Here's a list of those requirements:
 * Device extensions:
 
   * `VK_KHR_maintenance1`_
-  * `VK_EXT_custom_border_color`_
+  * `VK_KHR_create_renderpass2`_
+  * `VK_KHR_imageless_framebuffer`_
+  * `VK_KHR_timeline_semaphore`_
+  * `VK_EXT_custom_border_color`_ with ``customBorderColorWithoutFormat``
   * `VK_EXT_provoking_vertex`_
   * `VK_EXT_line_rasterization`_, with the following ``VkPhysicalDeviceLineRasterizationFeaturesEXT``:
 
@@ -46,6 +49,9 @@ Here's a list of those requirements:
     * ``stippledBresenhamLines``
     * ``stippledSmoothLines``
 
+  * `VK_KHR_swapchain_mutable_format`_
+  * `VK_EXT_border_color_swizzle`_
+
 In addition to this, `VK_KHR_external_memory`_ is required to support the
 DRI code-path.
 
@@ -80,13 +86,18 @@ are required:
 OpenGL 3.2
 ^^^^^^^^^^
 
-For OpenGL 3.2 support, the following additional ``VkPhysicalDeviceFeatures``
-are required to be supported, although some of these might not actually get
-verified:
-
-* ``depthClamp``
-* ``geometryShader``
-* ``shaderTessellationAndGeometryPointSize``
+For OpenGL 3.2 support, the following additional requirements must be
+supported, although some of these might not actually get verified:
+
+* ``VkPhysicalDeviceFeatures``:
+
+  * ``depthClamp``
+  * ``geometryShader``
+  * ``shaderTessellationAndGeometryPointSize``
+
+* Device extensions:
+
+  * `VK_EXT_depth_clip_enable`_
 
 OpenGL 3.3
 ^^^^^^^^^^
@@ -118,7 +129,7 @@ supported:
 
   * `VK_KHR_maintenance2`_
 
-* Formats requiring ``VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT``:
+* Formats requiring ``VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT``:
 
       * ``VK_FORMAT_R32G32B32_SFLOAT``
       * ``VK_FORMAT_R32G32B32_SINT``
@@ -145,13 +156,16 @@ OpenGL 4.2
 For OpenGL 4.2 support, the following additional requirements must be
 supported:
 
+* Device extensions:
+    * `VK_EXT_image_2d_view_of_3d`_
+
 * ``VkPhysicalDeviceLimits``:
 
   * ``shaderStorageImageExtendedFormats``
   * ``shaderStorageImageWriteWithoutFormat``
 
 * For Vulkan 1.2 and above:
-  
+
   * ``VkPhysicalDeviceVulkan11Features``:
 
     * ``shaderDrawParameters``
@@ -242,8 +256,8 @@ changing the descriptor manager may impr
    Automatically detect best mode. This is the default.
 ``lazy``
    Disable caching and attempt to use the least amount of CPU.
-``nofallback``
-   Always use caching to try reducing GPU churn.
+``cached``
+   Use caching to reuse descriptor sets.
 ``notemplates``
    The same as `auto`, but disables the use of `VK_KHR_descriptor_templates`.
 
@@ -264,6 +278,12 @@ variable:
    Print the TGSI form of TGSI shaders to stderr.
 ``validation``
    Dump Validation layer output.
+``sync``
+   Emit full synchronization barriers before every draw and dispatch.
+``compact``
+   Use a maximum of 4 descriptor sets
+``noreorder``
+   Do not reorder or optimize GL command streams
 
 Vulkan Validation Layers
 ^^^^^^^^^^^^^^^^^^^^^^^^
@@ -287,11 +307,15 @@ questions, don't hesitate to visit `#zin
 
 
 .. _VK_KHR_maintenance1: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_maintenance1.html
+.. _VK_KHR_create_renderpass2: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_create_renderpass2.html
+.. _VK_KHR_imageless_framebuffer: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_imageless_framebuffer.html
+.. _VK_KHR_timeline_semaphore: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_timeline_semaphore.html
 .. _VK_KHR_external_memory: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_external_memory.html
 .. _VK_EXT_scalar_block_layout: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_scalar_block_layout.html
 .. _VK_EXT_transform_feedback: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_transform_feedback.html
 .. _VK_EXT_conditional_rendering: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_conditional_rendering.html
 .. _VK_EXT_vertex_attribute_divisor: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_vertex_attribute_divisor.html
+.. _VK_EXT_image_2d_view_of_3d: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_image_2d_view_of_3d.html
 .. _VK_KHR_maintenance2: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_maintenance2.html
 .. _VK_KHR_shader_draw_parameters: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_shader_draw_parameters.html
 .. _VK_KHR_draw_indirect_count: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_draw_indirect_count.html
@@ -299,3 +323,6 @@ questions, don't hesitate to visit `#zin
 .. _VK_EXT_custom_border_color: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_custom_border_color.html
 .. _VK_EXT_provoking_vertex: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_provoking_vertex.html
 .. _VK_EXT_line_rasterization: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_line_rasterization.html
+.. _VK_KHR_swapchain_mutable_format: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_swapchain_mutable_format.html
+.. _VK_EXT_border_color_swizzle: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_border_color_swizzle.html
+.. _VK_EXT_depth_clip_enable: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_depth_clip_enable.html
diff -pruN 22.1.3-1/docs/envvars.rst 22.2.0~rc1-1/docs/envvars.rst
--- 22.1.3-1/docs/envvars.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/envvars.rst	2022-08-03 18:11:03.000000000 +0000
@@ -246,6 +246,12 @@ Intel driver environment variables
    if set to 1, true or yes, then the OpenGL implementation will
    default ``GL_BLACKHOLE_RENDER_INTEL`` to true, thus disabling any
    rendering.
+:envvar:`INTEL_COMPUTE_CLASS`
+   If set to 1, true or yes, then I915_ENGINE_CLASS_COMPUTE will be
+   supported. For OpenGL, iris will attempt to use a compute engine
+   for compute dispatches if one is detected. For Vulkan, anvil will
+   advertise support for a compute queue if a compute engine is
+   detected.
 :envvar:`INTEL_DEBUG`
    a comma-separated list of named flags, which do various things:
 
@@ -326,11 +332,14 @@ Intel driver environment variables
    ``spill_vec4``
       force spilling of all registers in the vec4 backend (useful to
       debug spilling code)
+   ``stall``
+      inserts a stall on the GPU after each draw/dispatch command to
+      wait for it to finish before starting any new work.
    ``submit``
       emit batchbuffer usage statistics
    ``sync``
-      after sending each batch, emit a message and wait for that batch
-      to finish rendering
+      after sending each batch, wait on the CPU for that batch to
+      finish rendering
    ``task``
       dump shader assembly for task shaders
    ``tcs``
@@ -434,6 +443,19 @@ DRI environment variables
    disable MSAA for GLX/EGL MSAA visuals
 
 
+Vulkan mesa device select layer environment variables
+-----------------------------------------------------
+
+:envvar:`MESA_VK_DEVICE_SELECT`
+   when set to "list" prints the list of devices.
+   when set to "vid:did" number from pci device. That pci device is
+   selected as default. The default device is returned as the first
+   device in vkEnumeratePhysicalDevices api.
+:envvar:`MESA_VK_DEVICE_SELECT_FORCE_DEFAULT_DEVICE`
+   when set to 1, the device identified as default will be the only
+   one returned in vkEnumeratePhysicalDevices api.
+
+
 EGL environment variables
 -------------------------
 
@@ -510,6 +532,28 @@ Clover environment variables
    appended after the options set by the OpenCL program in
    ``clLinkProgram``.
 
+
+Nine frontend environment variables
+-----------------------------------
+
+:envvar:`D3D_ALWAYS_SOFTWARE`
+   an integer, which forces Nine to use the CPU instead of GPU acceleration.
+
+:envvar:`NINE_DEBUG`
+   a comma-separated list of named flags that do debugging things.
+   Use `NINE_DEBUG=help` to print a list of available options.
+
+:envvar:`NINE_FF_DUMP`
+   a boolean, which dumps shaders generated by a fixed function (FF).
+
+:envvar:`NINE_SHADER`
+   a comma-separated list of named flags, which do alternate shader handling.
+   Use `NINE_SHADER=help` to print a list of available options.
+
+:envvar:`NINE_QUIRKS`
+   a comma-separated list of named flags that do various things.
+   Use `NINE_DEBUG=help` to print a list of available options.
+
 Softpipe driver environment variables
 -------------------------------------
 
@@ -614,6 +658,8 @@ RADV driver environment variables
       force all allocated buffers to be referenced in submissions
    ``checkir``
       validate the LLVM IR before LLVM compiles the shader
+   ``epilogs``
+      dump fragment shader epilogs
    ``forcecompress``
       Enables DCC,FMASK,CMASK,HTILE in situations where the driver supports it
       but normally does not deem it beneficial.
@@ -652,7 +698,7 @@ RADV driver environment variables
    ``nomemorycache``
       disable memory shaders cache
    ``nongg``
-      disable NGG for GFX10+
+      disable NGG for GFX10 and GFX10.3
    ``nonggc``
       disable NGG culling on GPUs where it's enabled by default (GFX10.3+ only).
    ``nooutoforder``
@@ -706,9 +752,9 @@ RADV driver environment variables
       enable wave32 for compute shaders (GFX10+)
    ``dccmsaa``
       enable DCC for MSAA images
-   ``force_emulate_rt``
-      forces ray-tracing to be emulated in software,
-      even if there is hardware support.
+   ``emulate_rt``
+      forces ray-tracing to be emulated in software on GFX10_3+ and enables
+      rt extensions with older hardware.
    ``gewave32``
       enable wave32 for vertex/tess/geometry shaders (GFX10+)
    ``localbos``
@@ -722,7 +768,7 @@ RADV driver environment variables
    ``nggc``
       enable NGG culling on GPUs where it's not enabled by default (GFX10.1 only).
    ``rt``
-      enable rt extensions whose implementation is still experimental.
+      enable rt pipelines whose implementation is still experimental.
    ``sam``
       enable optimizations to move more driver internal objects to VRAM.
    ``rtwave64``
diff -pruN 22.1.3-1/docs/_extra/specs/enums.txt 22.2.0~rc1-1/docs/_extra/specs/enums.txt
--- 22.1.3-1/docs/_extra/specs/enums.txt	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/_extra/specs/enums.txt	2022-08-03 18:11:03.000000000 +0000
@@ -11,7 +11,6 @@ GL blocks allocated to Mesa:
        0x8BB0-0x8BBF
 
 Unused EGL blocks allocated to Mesa:
-       0x31DF
        0x3290-0x329F
 
 GL_MESA_packed_depth_stencil
@@ -101,7 +100,11 @@ EGL_WL_bind_wayland_display
         EGL_TEXTURE_Y_XUXV_WL                   0x31D9
         EGL_WAYLAND_Y_INVERTED_WL               0x31DB
 
-EGL_MESA_platform_xcb
+EGL_EXT_platform_xcb
 
         EGL_PLATFORM_XCB_EXT                    0x31DC
         EGL_PLATFORM_XCB_SCREEN_EXT             0x31DE
+
+EGL_EXT_present_opaque
+
+        EGL_PRESENT_OPAQUE_EXT                  0x31DF
diff -pruN 22.1.3-1/docs/features.txt 22.2.0~rc1-1/docs/features.txt
--- 22.1.3-1/docs/features.txt	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/features.txt	2022-08-03 18:11:03.000000000 +0000
@@ -41,7 +41,7 @@ GL 3.0, GLSL 1.30 --- all DONE: freedren
   glBindFragDataLocation, glGetFragDataLocation         DONE
   GL_NV_conditional_render (Conditional rendering)      DONE ()
   GL_ARB_map_buffer_range (Map buffer subranges)        DONE (v3d, vc4, lima)
-  GL_ARB_color_buffer_float (Clamping controls)         DONE (v3d, lima)
+  GL_ARB_color_buffer_float (Clamping controls)         DONE (v3d, vc4, lima)
   GL_ARB_texture_float (Float textures, renderbuffers)  DONE (v3d)
   GL_EXT_packed_float                                   DONE (v3d)
   GL_EXT_texture_shared_exponent                        DONE (v3d)
@@ -87,7 +87,7 @@ GL 3.2, GLSL 1.50 --- all DONE: freedren
   Core/compatibility profiles                           DONE
   Geometry shaders                                      DONE (freedreno/a6xx)
   GL_ARB_vertex_array_bgra (BGRA vertex order)          DONE (v3d, panfrost)
-  GL_ARB_draw_elements_base_vertex (Base vertex offset) DONE (v3d, panfrost, lima)
+  GL_ARB_draw_elements_base_vertex (Base vertex offset) DONE (v3d, vc4, panfrost, lima)
   GL_ARB_fragment_coord_conventions (Frag shader coord) DONE (v3d, vc4, panfrost, lima)
   GL_ARB_provoking_vertex (Provoking vertex)            DONE (v3d, vc4, panfrost, lima)
   GL_ARB_seamless_cube_map (Seamless cubemaps)          DONE (panfrost)
@@ -104,7 +104,7 @@ GL 3.3, GLSL 3.30 --- all DONE: freedren
   GL_ARB_occlusion_query2                               DONE (v3d, panfrost)
   GL_ARB_sampler_objects                                DONE (all drivers)
   GL_ARB_shader_bit_encoding                            DONE (v3d, panfrost)
-  GL_ARB_texture_rgb10_a2ui                             DONE (panfrost)
+  GL_ARB_texture_rgb10_a2ui                             DONE (v3d, panfrost)
   GL_ARB_texture_swizzle                                DONE (v3d, vc4, panfrost, lima)
   GL_ARB_timer_query                                    DONE ()
   GL_ARB_instanced_arrays                               DONE (v3d, panfrost)
@@ -113,7 +113,7 @@ GL 3.3, GLSL 3.30 --- all DONE: freedren
 
 GL 4.0, GLSL 4.00 --- all DONE: i965/gen7+, nvc0, r600, radeonsi, llvmpipe, virgl, zink, d3d12
 
-  GL_ARB_draw_buffers_blend                             DONE (freedreno, i965/gen6+, nv50, softpipe, panfrost)
+  GL_ARB_draw_buffers_blend                             DONE (freedreno, i965/gen6+, nv50, softpipe, panfrost, v3d)
   GL_ARB_draw_indirect                                  DONE (freedreno, i965/gen7+, softpipe, v3d)
   GL_ARB_gpu_shader5                                    DONE (i965/gen7+)
   - 'precise' qualifier                                 DONE (softpipe)
@@ -143,7 +143,7 @@ GL 4.0, GLSL 4.00 --- all DONE: i965/gen
 GL 4.1, GLSL 4.10 --- all DONE: i965/gen7+, nvc0, r600, radeonsi, llvmpipe, virgl, zink, d3d12
 
   GL_ARB_ES2_compatibility                              DONE (freedreno, i965, nv50, softpipe, v3d, vc4, panfrost, lima)
-  GL_ARB_get_program_binary                             DONE (freedreno, 0 or 1 binary formats)
+  GL_ARB_get_program_binary                             DONE (freedreno, v3d, 0 or 1 binary formats)
   GL_ARB_separate_shader_objects                        DONE (all drivers)
   GL_ARB_shader_precision                               DONE (i965/gen7+, all drivers that support GLSL 4.10)
   GL_ARB_vertex_attrib_64bit                            DONE (i965/gen7+, softpipe, )
@@ -172,7 +172,7 @@ GL 4.3, GLSL 4.30 -- all DONE: i965/gen8
   GL_ARB_ES3_compatibility                              DONE (all drivers that support GLSL 3.30)
   GL_ARB_clear_buffer_object                            DONE (all drivers)
   GL_ARB_compute_shader                                 DONE (freedreno/a5xx+, i965, softpipe, v3d, panfrost, d3d12)
-  GL_ARB_copy_image                                     DONE (i965, nv50, softpipe, )
+  GL_ARB_copy_image                                     DONE (i965, nv50, softpipe, v3d)
   GL_KHR_debug                                          DONE (all drivers)
   GL_ARB_explicit_uniform_location                      DONE (all drivers that support GLSL)
   GL_ARB_fragment_layer_viewport                        DONE (i965, nv50, softpipe, d3d12)
@@ -181,7 +181,7 @@ GL 4.3, GLSL 4.30 -- all DONE: i965/gen8
   GL_ARB_invalidate_subdata                             DONE (all drivers)
   GL_ARB_multi_draw_indirect                            DONE (freedreno, i965, softpipe, v3d, d3d12)
   GL_ARB_program_interface_query                        DONE (all drivers)
-  GL_ARB_robust_buffer_access_behavior                  DONE (freedreno, i965)
+  GL_ARB_robust_buffer_access_behavior                  DONE (freedreno, i965, d3d12)
   GL_ARB_shader_image_size                              DONE (freedreno/a5xx+, i965, softpipe, v3d, panfrost, d3d12)
   GL_ARB_shader_storage_buffer_object                   DONE (freedreno/a5xx+, i965, softpipe, v3d, panfrost, d3d12)
   GL_ARB_stencil_texturing                              DONE (freedreno, i965/hsw+, nv50, softpipe, v3d, panfrost, d3d12)
@@ -195,7 +195,7 @@ GL 4.3, GLSL 4.30 -- all DONE: i965/gen8
 GL 4.4, GLSL 4.40 -- all DONE: i965/gen8+, nvc0, r600, radeonsi, llvmpipe, zink
 
   GL_MAX_VERTEX_ATTRIB_STRIDE                           DONE (all drivers)
-  GL_ARB_buffer_storage                                 DONE (freedreno, i965, nv50, v3d, vc4)
+  GL_ARB_buffer_storage                                 DONE (freedreno, i965, nv50, v3d, vc4, lima)
   GL_ARB_clear_texture                                  DONE (i965, nv50, softpipe, virgl)
   GL_ARB_enhanced_layouts                               DONE (i965, nv50, softpipe, virgl)
   - compile-time constant expressions                   DONE
@@ -213,14 +213,14 @@ GL 4.4, GLSL 4.40 -- all DONE: i965/gen8
 GL 4.5, GLSL 4.50 -- all DONE: nvc0, r600, radeonsi, llvmpipe, zink
 
   GL_ARB_ES3_1_compatibility                            DONE (i965/hsw+, softpipe, virgl)
-  GL_ARB_clip_control                                   DONE (freedreno, i965, nv50, softpipe, virgl, lima)
+  GL_ARB_clip_control                                   DONE (freedreno, i965, nv50, softpipe, virgl, lima, d3d12)
   GL_ARB_conditional_render_inverted                    DONE (freedreno, i965, nv50, softpipe, virgl, panfrost, d3d12)
   GL_ARB_cull_distance                                  DONE (freedreno/a6xx, i965, nv50, softpipe, virgl)
   GL_ARB_derivative_control                             DONE (i965, nv50, softpipe, virgl)
   GL_ARB_direct_state_access                            DONE (all drivers)
   GL_ARB_get_texture_sub_image                          DONE (all drivers)
   GL_ARB_shader_texture_image_samples                   DONE (i965, nv50, virgl)
-  GL_ARB_texture_barrier                                DONE (freedreno, i965, nv50, virgl)
+  GL_ARB_texture_barrier                                DONE (freedreno, i965, nv50, vc4, virgl, lima)
   GL_KHR_context_flush_control                          DONE (all - but needs GLX/EGL extension to be useful)
   GL_KHR_robustness                                     DONE (freedreno, i965, virgl)
   GL_EXT_shader_integer_mix                             DONE (all drivers that support GLSL)
@@ -230,12 +230,12 @@ GL 4.6, GLSL 4.60 -- all DONE: radeonsi,
   GL_ARB_gl_spirv                                       DONE (i965/gen7+, llvmpipe)
   GL_ARB_indirect_parameters                            DONE (i965/gen7+, nvc0, llvmpipe, virgl, d3d12)
   GL_ARB_pipeline_statistics_query                      DONE (i965, nvc0, r600, llvmpipe, softpipe, )
-  GL_ARB_polygon_offset_clamp                           DONE (freedreno, i965, nv50, nvc0, r600, llvmpipe, virgl)
+  GL_ARB_polygon_offset_clamp                           DONE (freedreno, i965, nv50, nvc0, r600, llvmpipe, v3d, virgl)
   GL_ARB_shader_atomic_counter_ops                      DONE (freedreno/a5xx+, i965/gen7+, nvc0, r600, llvmpipe, softpipe, virgl, v3d)
   GL_ARB_shader_draw_parameters                         DONE (i965, llvmpipe, nvc0, d3d12)
   GL_ARB_shader_group_vote                              DONE (i965, nvc0, llvmpipe)
   GL_ARB_spirv_extensions                               DONE (i965/gen7+, llvmpipe)
-  GL_ARB_texture_filter_anisotropic                     DONE (etnaviv/HALTI0, freedreno, i965, nv50, nvc0, r600, softpipe, llvmpipe, d3d12, virgl)
+  GL_ARB_texture_filter_anisotropic                     DONE (etnaviv/HALTI0, freedreno, i965, nv50, nvc0, r600, softpipe, llvmpipe, d3d12, virgl, v3d)
   GL_ARB_transform_feedback_overflow_query              DONE (i965/gen6+, nvc0, llvmpipe, softpipe, virgl)
   GL_KHR_no_error                                       DONE (all drivers)
 
@@ -283,7 +283,7 @@ GLES3.2, GLSL ES 3.2 -- all DONE: i965/g
   GL_OES_primitive_bounding_box                         DONE (freedreno/a5xx+, i965/gen7+, nvc0, r600, softpipe, v3d)
   GL_OES_sample_shading                                 DONE (freedreno/a6xx, i965, nvc0, r600, panfrost, d3d12)
   GL_OES_sample_variables                               DONE (freedreno/a6xx, i965, nvc0, r600, panfrost/bifrost)
-  GL_OES_shader_image_atomic                            DONE (all drivers that support GL_ARB_shader_image_load_store)
+  GL_OES_shader_image_atomic                            DONE (v3d, all drivers that support GL_ARB_shader_image_load_store)
   GL_OES_shader_io_blocks                               DONE (All drivers that support GLES 3.1)
   GL_OES_shader_multisample_interpolation               DONE (freedreno/a6xx, i965, nvc0, r600)
   GL_OES_tessellation_shader                            DONE (freedreno/a6xx, all drivers that support GL_ARB_tessellation_shader)
@@ -301,7 +301,7 @@ Khronos, ARB, and OES extensions that ar
   GL_ARB_ES3_2_compatibility                            DONE (i965/gen8+, radeonsi, virgl, zink)
   GL_ARB_fragment_shader_interlock                      DONE (i965, zink)
   GL_ARB_gpu_shader_int64                               DONE (i965/gen8+, nvc0, radeonsi, softpipe, llvmpipe, zink, d3d12)
-  GL_ARB_parallel_shader_compile                        DONE (freedreno, iris, radeonsi)
+  GL_ARB_parallel_shader_compile                        DONE (freedreno, iris, radeonsi, etnaviv)
   GL_ARB_post_depth_coverage                            DONE (i965, nvc0, radeonsi, llvmpipe, zink)
   GL_ARB_robustness_isolation                           not started
   GL_ARB_sample_locations                               DONE (nvc0, zink)
@@ -316,23 +316,24 @@ Khronos, ARB, and OES extensions that ar
   GL_ARB_sparse_texture2                                DONE (radeonsi/gfx9+, zink)
   GL_ARB_sparse_texture_clamp                           DONE (radeonsi/gfx9+, zink)
   GL_ARB_texture_filter_minmax                          DONE (nvc0/gm200+, zink)
+  GL_ARM_shader_framebuffer_fetch_depth_stencil         DONE (llvmpipe)
   GL_EXT_color_buffer_half_float                        DONE (freedreno, i965, iris, llvmpipe, nv50, nvc0, radeonsi, zink)
   GL_EXT_depth_bounds_test                              DONE (i965/gen12+, nv50, nvc0, radeonsi, softpipe, zink)
-  GL_EXT_memory_object                                  DONE (radeonsi, i965/gen7+, llvmpipe, zink)
+  GL_EXT_memory_object                                  DONE (radeonsi, i965/gen7+, llvmpipe, zink, d3d12)
   GL_EXT_memory_object_fd                               DONE (radeonsi, i965/gen7+, llvmpipe, zink)
-  GL_EXT_memory_object_win32                            not started
-  GL_EXT_multisampled_render_to_texture                 DONE (freedreno/a6xx, panfrost, zink)
+  GL_EXT_memory_object_win32                            DONE (zink, d3d12)
+  GL_EXT_multisampled_render_to_texture                 DONE (freedreno/a6xx, panfrost, zink, lima)
   GL_EXT_render_snorm                                   DONE (i965, r600, radeonsi, softpipe, zink)
-  GL_EXT_semaphore                                      DONE (radeonsi, i965/gen7+, zink)
+  GL_EXT_semaphore                                      DONE (radeonsi, i965/gen7+, zink, d3d12)
   GL_EXT_semaphore_fd                                   DONE (radeonsi, i965/gen7+, zink)
-  GL_EXT_semaphore_win32                                not started
+  GL_EXT_semaphore_win32                                DONE (zink, d3d12)
   GL_EXT_shader_group_vote                              DONE (all drivers that support GL_ARB_shader_group_vote)
   GL_EXT_sRGB_write_control                             DONE (all drivers that support GLES 3.0+)
   GL_EXT_texture_norm16                                 DONE (freedreno, i965, r600, radeonsi, nvc0i, softpipe, zink)
   GL_EXT_texture_sRGB_R8                                DONE (all drivers that support GLES 3.0+)
   GL_KHR_blend_equation_advanced_coherent               DONE (i965/gen9+, panfrost)
   GL_KHR_texture_compression_astc_hdr                   DONE (core only)
-  GL_KHR_texture_compression_astc_sliced_3d             DONE (i965/gen9+, r600, radeonsi, panfrost, softpipe, zink, lima)
+  GL_KHR_texture_compression_astc_sliced_3d             DONE (i965/gen9+, r600, radeonsi, panfrost, softpipe, v3d, zink, lima)
   GL_OES_depth_texture_cube_map                         DONE (all drivers that support GLSL 1.30+)
   GL_OES_EGL_image                                      DONE (all drivers)
   GL_OES_EGL_image_external                             DONE (all drivers)
@@ -340,13 +341,13 @@ Khronos, ARB, and OES extensions that ar
   GL_OES_required_internalformat                        DONE (all drivers)
   GL_OES_surfaceless_context                            DONE (all drivers)
   GL_OES_texture_compression_astc                       DONE (core only)
-  GL_OES_texture_float                                  DONE (freedreno, i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe, panfrost, zink)
+  GL_OES_texture_float                                  DONE (freedreno, i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe, panfrost, v3d, zink)
   GL_OES_texture_float_linear                           DONE (freedreno, i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe, panfrost, zink)
-  GL_OES_texture_half_float                             DONE (freedreno, i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe, panfrost, zink, lima)
-  GL_OES_texture_half_float_linear                      DONE (freedreno, i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe, panfrost, zink, lima)
+  GL_OES_texture_half_float                             DONE (freedreno, i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe, panfrost, v3d, zink, lima)
+  GL_OES_texture_half_float_linear                      DONE (freedreno, i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe, panfrost, v3d, zink, lima)
   GL_OES_texture_view                                   DONE (freedreno, i965/gen8+, r600, radeonsi, nv50, nvc0, softpipe, llvmpipe, v3d, zink)
   GL_OES_viewport_array                                 DONE (i965, nvc0, r600, radeonsi, softpipe, zink)
-  GLX_ARB_context_flush_control                         not started
+  GLX_ARB_context_flush_control                         DONE (all drivers)
   GLX_ARB_robustness_application_isolation              not started
   GLX_ARB_robustness_share_group_isolation              not started
 
@@ -446,7 +447,7 @@ Vulkan 1.1 -- all DONE: anv, lvp, radv,
 Vulkan 1.2 -- all DONE: anv, vn
 
   VK_KHR_8bit_storage                                   DONE (anv/gen8+, lvp, radv, v3dv, vn)
-  VK_KHR_buffer_device_address                          DONE (anv/gen8+, lvp, radv, tu, vn)
+  VK_KHR_buffer_device_address                          DONE (anv/gen8+, lvp, radv, tu, v3dv, vn)
   VK_KHR_create_renderpass2                             DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_KHR_depth_stencil_resolve                          DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_KHR_draw_indirect_count                            DONE (anv, lvp, radv, tu, vn)
@@ -454,38 +455,38 @@ Vulkan 1.2 -- all DONE: anv, vn
   VK_KHR_image_format_list                              DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_KHR_imageless_framebuffer                          DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_KHR_sampler_mirror_clamp_to_edge                   DONE (anv, lvp, radv, tu, v3dv, vn)
-  VK_KHR_separate_depth_stencil_layouts                 DONE (anv, lvp, radv, vn, tu)
+  VK_KHR_separate_depth_stencil_layouts                 DONE (anv, lvp, radv, vn, v3dv, tu)
   VK_KHR_shader_atomic_int64                            DONE (anv/gen9+, lvp, radv, vn)
   VK_KHR_shader_float16_int8                            DONE (anv/gen8+, lvp, radv, tu, vn)
-  VK_KHR_shader_float_controls                          DONE (anv/gen8+, lvp, radv, tu, vn)
+  VK_KHR_shader_float_controls                          DONE (anv/gen8+, lvp, radv, tu, v3dv, vn)
   VK_KHR_shader_subgroup_extended_types                 DONE (anv/gen8+, lvp, radv, tu, vn)
-  VK_KHR_spirv_1_4                                      DONE (anv, lvp, radv, tu, vn)
-  VK_KHR_timeline_semaphore                             DONE (anv, lvp, radv, tu, vn)
+  VK_KHR_spirv_1_4                                      DONE (anv, lvp, radv, tu, v3dv, vn)
+  VK_KHR_timeline_semaphore                             DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_KHR_uniform_buffer_standard_layout                 DONE (anv, lvp, radv, tu, v3dv, vn)
-  VK_KHR_vulkan_memory_model                            DONE (anv, lvp, radv, tu, vn)
+  VK_KHR_vulkan_memory_model                            DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_EXT_descriptor_indexing                            DONE (anv/gen9+, radv, tu, vn)
   VK_EXT_host_query_reset                               DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_EXT_sampler_filter_minmax                          DONE (anv/gen9+, lvp, radv, tu, vn)
   VK_EXT_scalar_block_layout                            DONE (anv, lvp, radv/gfx7+, tu, vn)
-  VK_EXT_separate_stencil_usage                         DONE (anv, lvp, radv, tu, vn)
+  VK_EXT_separate_stencil_usage                         DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_EXT_shader_viewport_index_layer                    DONE (anv, lvp, radv, tu, vn)
 
 Vulkan 1.3 -- all DONE: anv, radv, lvp
 
   VK_KHR_copy_commands2                                 DONE (anv, lvp, radv, tu, v3dv)
-  VK_KHR_dynamic_rendering                              DONE (anv, lvp, radv)
-  VK_KHR_format_feature_flags2                          DONE (anv, radv, tu)
+  VK_KHR_dynamic_rendering                              DONE (anv, lvp, radv, tu)
+  VK_KHR_format_feature_flags2                          DONE (anv, radv, tu, v3dv)
   VK_KHR_maintenance4                                   DONE (anv, radv, tu)
   VK_KHR_shader_non_semantic_info                       DONE (anv, radv, tu, v3dv)
   VK_KHR_shader_terminate_invocation                    DONE (anv, radv, tu)
-  VK_KHR_synchronization2                               DONE (anv, radv)
+  VK_KHR_synchronization2                               DONE (anv, radv, tu)
   VK_KHR_zero_initialize_workgroup_memory               DONE (anv, radv, tu)
   VK_EXT_4444_formats                                   DONE (anv, lvp, radv, tu, v3dv)
   VK_EXT_extended_dynamic_state                         DONE (anv, lvp, radv, tu)
   VK_EXT_extended_dynamic_state2                        DONE (anv, lvp, radv, tu)
   VK_EXT_inline_uniform_block                           DONE (anv, radv, v3dv)
-  VK_EXT_pipeline_creation_cache_control                DONE (anv, radv, v3dv)
-  VK_EXT_pipeline_creation_feedback                     DONE (anv, radv, v3dv)
+  VK_EXT_pipeline_creation_cache_control                DONE (anv, radv, tu, v3dv)
+  VK_EXT_pipeline_creation_feedback                     DONE (anv, radv, tu, v3dv)
   VK_EXT_private_data                                   DONE (anv, lvp, radv, tu, v3dv)
   VK_EXT_image_robustness                               DONE (anv, radv, tu)
   VK_EXT_shader_demote_to_helper_invocation             DONE (anv, radv, tu)
@@ -509,8 +510,8 @@ Khronos extensions that are not part of
   VK_KHR_get_display_properties2                        DONE (anv, lvp, radv, tu, v3dv)
   VK_KHR_get_surface_capabilities2                      DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_KHR_incremental_present                            DONE (anv, lvp, radv, tu, v3dv, vn)
-  VK_KHR_performance_query                              DONE (anv/gen8+, tu)
-  VK_KHR_pipeline_executable_properties                 DONE (anv, radv, tu)
+  VK_KHR_performance_query                              DONE (anv/gen8+, tu, v3dv)
+  VK_KHR_pipeline_executable_properties                 DONE (anv, radv, tu, v3dv)
   VK_KHR_pipeline_library                               DONE (lvp, radv)
   VK_KHR_push_descriptor                                DONE (anv, lvp, radv, tu)
   VK_KHR_ray_query                                      in progress
@@ -522,16 +523,17 @@ Khronos extensions that are not part of
   VK_KHR_surface                                        DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_KHR_surface_protected_capabilities                 DONE (anv, lvp, radv, v3dv, vn)
   VK_KHR_swapchain                                      DONE (anv, lvp, radv, tu, v3dv, vn)
-  VK_KHR_swapchain_mutable_format                       DONE (anv, lvp, radv, v3dv, vn)
+  VK_KHR_swapchain_mutable_format                       DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_KHR_wayland_surface                                DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_KHR_workgroup_memory_explicit_layout               DONE (anv, radv)
   VK_KHR_win32_keyed_mutex                              not started
   VK_KHR_win32_surface                                  DONE (lvp)
   VK_KHR_xcb_surface                                    DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_KHR_xlib_surface                                   DONE (anv, lvp, radv, tu, v3dv, vn)
+  VK_EXT_border_color_swizzle                           DONE (anv, lvp, tu, radv/gfx10+)
   VK_EXT_buffer_device_address                          DONE (radv)
   VK_EXT_calibrated_timestamps                          DONE (anv, lvp, radv)
-  VK_EXT_color_write_enable                             DONE (anv, lvp, radv, v3dv)
+  VK_EXT_color_write_enable                             DONE (anv, lvp, radv, tu, v3dv)
   VK_EXT_conditional_rendering                          DONE (anv, lvp, radv, tu)
   VK_EXT_conservative_rasterization                     DONE (anv/gen9+, radv)
   VK_EXT_custom_border_color                            DONE (anv, lvp, radv, tu, v3dv)
@@ -548,41 +550,44 @@ Khronos extensions that are not part of
   VK_EXT_global_priority                                DONE (anv, radv)
   VK_EXT_global_priority_query                          DONE (radv)
   VK_EXT_graphics_pipeline_library                      DONE (lvp)
-  VK_EXT_image_2d_view_of_3d                            DONE (anv, lvp)
+  VK_EXT_image_2d_view_of_3d                            DONE (anv, tu, lvp)
   VK_EXT_image_drm_format_modifier                      DONE (anv, radv/gfx9+, tu, v3dv, vn)
-  VK_EXT_image_view_min_lod                             DONE (radv)
+  VK_EXT_image_view_min_lod                             DONE (radv, tu)
   VK_EXT_index_type_uint8                               DONE (anv, lvp, radv/gfx8+, v3dv, tu)
   VK_EXT_line_rasterization                             DONE (anv, lvp, radv, tu, v3dv)
   VK_EXT_memory_budget                                  DONE (anv, radv, tu)
   VK_EXT_memory_priority                                DONE (radv)
   VK_EXT_multi_draw                                     DONE (anv, lvp, radv)
+  VK_EXT_multisampled_render_to_single_sampled          DONE (lvp)
+  VK_EXT_non_seamless_cube_map                          DONE (anv, lvp, radv)
   VK_EXT_pci_bus_info                                   DONE (anv, radv)
   VK_EXT_physical_device_drm                            DONE (anv, radv, tu, v3dv)
   VK_EXT_post_depth_coverage                            DONE (anv/gfx10+, lvp, radv/gfx10+)
   VK_EXT_primitive_topology_list_restart                DONE (anv, lvp, radv, tu)
-  VK_EXT_primitives_generated_query                     DONE (lvp, tu)
+  VK_EXT_primitives_generated_query                     DONE (lvp, radv, tu)
   VK_EXT_provoking_vertex                               DONE (anv, lvp, radv, tu, v3dv)
   VK_EXT_queue_family_foreign                           DONE (anv, radv, vn)
-  VK_EXT_robustness2                                    DONE (anv, radv, tu)
+  VK_EXT_robustness2                                    DONE (anv, lvp, radv, tu)
   VK_EXT_sample_locations                               DONE (anv, radv/gfx9-, tu/a650)
   VK_EXT_shader_atomic_float                            DONE (anv, radv)
   VK_EXT_shader_atomic_float2                           DONE (anv/gen9+, radv)
   VK_EXT_shader_image_atomic_int64                      DONE (radv)
   VK_EXT_shader_stencil_export                          DONE (anv/gen9+, lvp, radv, tu)
-  VK_EXT_shader_subgroup_ballot                         DONE (anv, radv)
-  VK_EXT_shader_subgroup_vote                           DONE (anv, radv)
+  VK_EXT_shader_subgroup_ballot                         DONE (anv, lvp, radv)
+  VK_EXT_shader_subgroup_vote                           DONE (anv, lvp, radv)
+  VK_EXT_shader_module_identifier                       DONE (anv, radv, tu)
   VK_EXT_transform_feedback                             DONE (anv, lvp, radv, tu, vn)
   VK_EXT_vertex_attribute_divisor                       DONE (anv, radv, lvp, tu, v3dv)
   VK_EXT_vertex_input_dynamic_state                     DONE (lvp, radv)
   VK_EXT_ycbcr_image_arrays                             DONE (anv, radv)
   VK_ANDROID_external_memory_android_hardware_buffer    DONE (anv, radv, vn)
-  VK_ANDROID_native_buffer                              DONE (anv, radv, vn)
+  VK_ANDROID_native_buffer                              DONE (anv, radv, tu, v3dv, vn)
   VK_GOOGLE_decorate_string                             DONE (anv, lvp, radv)
   VK_GOOGLE_hlsl_functionality1                         DONE (anv, lvp, radv)
   VK_GOOGLE_user_type                                   DONE (anv, radv)
   VK_IMG_filter_cubic                                   DONE (tu/a650)
   VK_NV_compute_shader_derivatives                      DONE (anv, radv)
-  VK_EXT_acquire_drm_display                            DONE (radv, anv)
+  VK_EXT_acquire_drm_display                            DONE (anv, radv, tu)
   VK_VALVE_mutable_descriptor_type                      DONE (anv, radv, tu)
   VK_AMD_buffer_marker                                  DONE (radv, tu)
   VK_AMD_device_coherent_memory                         DONE (radv)
@@ -597,7 +602,7 @@ Khronos extensions that are not part of
   VK_AMD_shader_core_properties                         DONE (radv)
   VK_AMD_shader_core_properties2                        DONE (radv)
   VK_AMD_shader_explicit_vertex_parameter               DONE (radv)
-  VK_AMD_shader_fragment_mask                           DONE (radv)
+  VK_AMD_shader_fragment_mask                           DONE (radv/gfx10.3-)
   VK_AMD_shader_image_load_store_lod                    DONE (radv)
   VK_AMD_shader_trinary_minmax                          DONE (radv)
   VK_AMD_texture_gather_bias_lod                        DONE (radv)
diff -pruN 22.1.3-1/docs/gallium/distro.rst 22.2.0~rc1-1/docs/gallium/distro.rst
--- 22.1.3-1/docs/gallium/distro.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/gallium/distro.rst	2022-08-03 18:11:03.000000000 +0000
@@ -1,7 +1,7 @@
 Distribution
 ============
 
-Along with the interface definitions, the following drivers, gallium frontends,
+Along with the interface definitions, the following drivers, Gallium frontends,
 and auxiliary modules are shipped in the standard Gallium distribution.
 
 Drivers
@@ -101,10 +101,15 @@ GLX
 MesaGL
 ^^^^^^
 
-The gallium frontend implementing a GL state machine. Not usable as
-a standalone frontend; Mesa should be built with another gallium frontend,
+The Gallium frontend implementing a GL state machine. Not usable as
+a standalone frontend; Mesa should be built with another Gallium frontend,
 such as :ref:`DRI` or EGL.
 
+Nine
+^^^^
+
+The Gallium frontend implements the Direct3D 9 API.
+
 VDPAU
 ^^^^^
 
diff -pruN 22.1.3-1/docs/gallium/screen.rst 22.2.0~rc1-1/docs/gallium/screen.rst
--- 22.1.3-1/docs/gallium/screen.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/gallium/screen.rst	2022-08-03 18:11:03.000000000 +0000
@@ -72,6 +72,8 @@ The integer capabilities:
   pixel-center fragment convention is supported.
 * ``PIPE_CAP_FS_COORD_PIXEL_CENTER_INTEGER``: Whether the integer
   pixel-center fragment convention is supported.
+* ``PIPE_CAP_POINT_COORD_ORIGIN_UPPER_LEFT``: Whether point coordinates use the
+  upper-left origin convention. Otherwise the lower-left convention is used.
 * ``PIPE_CAP_DEPTH_CLIP_DISABLE``: Whether the driver is capable of disabling
   depth clipping (through pipe_rasterizer_state).
 * ``PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE``: Whether the driver is capable of
@@ -195,8 +197,9 @@ The integer capabilities:
   state should be swizzled manually according to the swizzle in the sampler
   view it is intended to be used with, or herein undefined results may occur
   for permutational swizzles.
-* ``PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE``: The maximum accessible size with
-  a buffer sampler view, in texels.
+* ``PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT``: The maximum accessible number of
+  elements within a sampler buffer view and image buffer view. This is unsigned
+  integer with the maximum of 4G - 1.
 * ``PIPE_CAP_MAX_VIEWPORTS``: The maximum number of viewports (and scissors
   since they are linked) a driver can support. Returning 0 is equivalent
   to returning 1 because every driver has to support at least a single
@@ -248,13 +251,18 @@ The integer capabilities:
 * ``PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS``: Whether the driver supports
   taking the number of indirect draws from a separate parameter
   buffer, see pipe_draw_indirect_info::indirect_draw_count.
+* ``PIPE_CAP_MULTI_DRAW_INDIRECT_PARTIAL_STRIDE``: Whether the driver supports
+  indirect draws with an arbitrary stride.
 * ``PIPE_CAP_FS_FINE_DERIVATIVE``: Whether the fragment shader supports
   the FINE versions of DDX/DDY.
 * ``PIPE_CAP_VENDOR_ID``: The vendor ID of the underlying hardware. If it's
   not available one should return 0xFFFFFFFF.
 * ``PIPE_CAP_DEVICE_ID``: The device ID (PCI ID) of the underlying hardware.
   0xFFFFFFFF if not available.
-* ``PIPE_CAP_ACCELERATED``: Whether the renderer is hardware accelerated.
+* ``PIPE_CAP_ACCELERATED``: Whether the renderer is hardware accelerated. 0 means
+  not accelerated (ie. CPU rendering), 1 means accelerated (ie. GPU rendering),
+  -1 means unknown (ie. an API translation driver which doesn't known what kind of
+  hardware it's running above).
 * ``PIPE_CAP_VIDEO_MEMORY``: The amount of video memory in megabytes.
 * ``PIPE_CAP_UMA``: If the device has a unified memory architecture or on-card
   memory and GART.
@@ -410,17 +418,17 @@ The integer capabilities:
   ARB_transform_feedback3.
 * ``PIPE_CAP_SHADER_CAN_READ_OUTPUTS``: Whether every TGSI shader stage can read
   from the output file.
-* ``PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY``: Tell the GLSL compiler to use
-  the minimum amount of optimizations just to be able to do all the linking
-  and lowering.
 * ``PIPE_CAP_FBFETCH``: The number of render targets whose value in the
   current framebuffer can be read in the shader.  0 means framebuffer fetch
   is not supported.  1 means that only the first render target can be read,
   and a larger value would mean that multiple render targets are supported.
 * ``PIPE_CAP_FBFETCH_COHERENT``: Whether framebuffer fetches from the fragment
   shader can be guaranteed to be coherent with framebuffer writes.
-* ``PIPE_CAP_TGSI_MUL_ZERO_WINS``: Whether TGSI shaders support the
-  ``TGSI_PROPERTY_MUL_ZERO_WINS`` shader property.
+* ``PIPE_CAP_FBFETCH_ZS``: Whether fragment shader can fetch current values of
+  Z/S attachments. These fetches are always coherent with framebuffer writes.
+* ``PIPE_CAP_LEGACY_MATH_RULES``: Whether NIR shaders support the
+  ``shader_info.use_legacy_math_rules`` flag (see documentation there), and
+  TGSI shaders support the corresponding ``TGSI_PROPERTY_LEGACY_MATH_RULES``.
 * ``PIPE_CAP_DOUBLES``: Whether double precision floating-point operations
   are supported.
 * ``PIPE_CAP_INT64``: Whether 64-bit integer operations are supported.
@@ -517,8 +525,8 @@ The integer capabilities:
   ```set_sample_locations```.
 * ``PIPE_CAP_MAX_GS_INVOCATIONS``: Maximum supported value of
   TGSI_PROPERTY_GS_INVOCATIONS.
-* ``PIPE_CAP_MAX_SHADER_BUFFER_SIZE``: Maximum supported size for binding
-  with set_shader_buffers.
+* ``PIPE_CAP_MAX_SHADER_BUFFER_SIZE_UINT``: Maximum supported size for binding
+  with set_shader_buffers. This is unsigned integer with the maximum of 4GB - 1.
 * ``PIPE_CAP_MAX_COMBINED_SHADER_BUFFERS``: Maximum total number of shader
   buffers. A value of 0 means the sum of all per-shader stage maximums (see
   ``PIPE_SHADER_CAP_MAX_SHADER_BUFFERS``).
@@ -550,10 +558,6 @@ The integer capabilities:
 * ``PIPE_CAP_COMPUTE_GRID_INFO_LAST_BLOCK``: Whether pipe_grid_info::last_block
   is implemented by the driver. See struct pipe_grid_info for more details.
 * ``PIPE_CAP_COMPUTE_SHADER_DERIVATIVE``: True if the driver supports derivatives (and texture lookups with implicit derivatives) in compute shaders.
-* ``PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS``:  Whether the TGSI pass to shrink IO
-  arrays should be skipped and enforce keeping the declared array sizes instead.
-  A driver might rely on the input mapping that was defined with the original
-  GLSL code.
 * ``PIPE_CAP_IMAGE_LOAD_FORMATTED``: True if a format for image loads does not need to be specified in the shader IR
 * ``PIPE_CAP_IMAGE_STORE_FORMATTED``: True if a format for image stores does not need to be specified in the shader IR
 * ``PIPE_CAP_THROTTLE``: Whether or not gallium frontends should throttle pipe_context
@@ -570,12 +574,11 @@ The integer capabilities:
 * ``PIPE_CAP_ATOMIC_FLOAT_MINMAX``: Atomic float point minimum,
   maximum, exchange and compare-and-swap support to buffer and shared variables.
 * ``PIPE_CAP_TGSI_DIV``: Whether opcode DIV is supported
+* ``PIPE_CAP_DITHERING``: Whether dithering is supported
 * ``PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD``: Whether texture lookups with
   explicit LOD is supported in the fragment shader.
 * ``PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES``: True if the driver supports
   derivatives in fragment shaders.
-* ``PIPE_CAP_VERTEX_SHADER_SATURATE``: True if the driver supports saturate
-  modifiers in the vertex shader.
 * ``PIPE_CAP_TEXTURE_SHADOW_LOD``: True if the driver supports shadow sampler
   types with texture functions having interaction with LOD of texture lookup.
 * ``PIPE_CAP_SHADER_SAMPLES_IDENTICAL``: True if the driver supports a shader query to tell whether all samples of a multisampled surface are definitely identical.
@@ -639,6 +642,9 @@ The integer capabilities:
 * ``PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS``: TRUE if there are no restrictions on the allocation of mipmaps in sparse textures and FALSE otherwise. See SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB description in ARB_sparse_texture extension spec.
 * ``PIPE_CAP_QUERY_SPARSE_TEXTURE_RESIDENCY``: TRUE if shader sparse texture sample instruction could also return the residency information.
 * ``PIPE_CAP_CLAMP_SPARSE_TEXTURE_LOD``: TRUE if shader sparse texture sample instruction support clamp the minimal lod to prevent read from un-committed pages.
+* ``PIPE_CAP_ALLOW_DRAW_OUT_OF_ORDER``: TRUE if the driver allows the "draw out of order" optimization to be enabled. See _mesa_update_allow_draw_out_of_order for more details.
+* ``PIPE_CAP_MAX_CONSTANT_BUFFER_SIZE_UINT``: Maximum bound constant buffer size in bytes. This is unsigned integer with the maximum of 4GB - 1. This applies to all constant buffers used by UBOs, unlike `PIPE_SHADER_CAP_MAX_CONST_BUFFER0_SIZE`, which is specifically for GLSL uniforms.
+* ``PIPE_CAP_HARDWARE_GL_SELECT``: Enable hardware accelerated GL_SELECT for this driver.
 
 .. _pipe_capf:
 
@@ -685,7 +691,7 @@ support different features.
 * ``PIPE_SHADER_CAP_MAX_INPUTS``: The maximum number of input registers.
 * ``PIPE_SHADER_CAP_MAX_OUTPUTS``: The maximum number of output registers.
   This is valid for all shaders except the fragment shader.
-* ``PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE``: The maximum size per constant buffer in bytes.
+* ``PIPE_SHADER_CAP_MAX_CONST_BUFFER0_SIZE``: The maximum size of constant buffer 0 in bytes.
 * ``PIPE_SHADER_CAP_MAX_CONST_BUFFERS``: Maximum number of constant buffers that can be bound
   to any shader stage using ``set_constant_buffer``. If 0 or 1, the pipe will
   only permit binding one constant buffer per shader.
@@ -699,7 +705,7 @@ DCL CONST[3][0]          # declare first
 MOV OUT[0], CONST[0][3]  # copy vector 3 of constbuf 0
 
 * ``PIPE_SHADER_CAP_MAX_TEMPS``: The maximum number of temporary registers.
-* ``PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED``: Whether the continue opcode is supported.
+* ``PIPE_SHADER_CAP_CONT_SUPPORTED``: Whether continue is supported.
 * ``PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR``: Whether indirect addressing
   of the input file is supported.
 * ``PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR``: Whether indirect addressing
@@ -732,19 +738,13 @@ MOV OUT[0], CONST[0][3]  # copy vector 3
   program.  It should be one of the ``pipe_shader_ir`` enum values.
 * ``PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS``: The maximum number of texture
   sampler views. Must not be lower than PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS.
-* ``PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED``: Whether double precision rounding
+* ``PIPE_SHADER_CAP_DROUND_SUPPORTED``: Whether double precision rounding
   is supported. If it is, DTRUNC/DCEIL/DFLR/DROUND opcodes may be used.
-* ``PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED``: Whether DFRACEXP and
+* ``PIPE_SHADER_CAP_DFRACEXP_DLDEXP_SUPPORTED``: Whether DFRACEXP and
   DLDEXP are supported.
-* ``PIPE_SHADER_CAP_TGSI_LDEXP_SUPPORTED``: Whether LDEXP is supported.
-* ``PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED``: Whether FMA and DFMA (doubles only)
-  are supported.
+* ``PIPE_SHADER_CAP_LDEXP_SUPPORTED``: Whether LDEXP is supported.
 * ``PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE``: Whether the driver doesn't
   ignore tgsi_declaration_range::Last for shader inputs and outputs.
-* ``PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT``: This is the maximum number
-  of iterations that loops are allowed to have to be unrolled. It is only
-  a hint to gallium frontends. Whether any loops will be unrolled is not
-  guaranteed.
 * ``PIPE_SHADER_CAP_MAX_SHADER_BUFFERS``: Maximum number of memory buffers
   (also used to implement atomic counters). Having this be non-0 also
   implies support for the ``LOAD``, ``STORE``, and ``ATOM*`` TGSI
@@ -752,13 +752,6 @@ MOV OUT[0], CONST[0][3]  # copy vector 3
 * ``PIPE_SHADER_CAP_SUPPORTED_IRS``: Supported representations of the
   program.  It should be a mask of ``pipe_shader_ir`` bits.
 * ``PIPE_SHADER_CAP_MAX_SHADER_IMAGES``: Maximum number of image units.
-* ``PIPE_SHADER_CAP_LOWER_IF_THRESHOLD``: IF and ELSE branches with a lower
-  cost than this value should be lowered by gallium frontends for better
-  performance. This is a tunable for the GLSL compiler and the behavior is
-  specific to the compiler.
-* ``PIPE_SHADER_CAP_TGSI_SKIP_MERGE_REGISTERS``: Whether the merge registers
-  TGSI pass is skipped. This might reduce code size and register pressure if
-  the underlying driver has a real backend compiler.
 * ``PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS``: If atomic counters are separate,
   how many HW counters are available for this stage. (0 uses SSBO atomics).
 * ``PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS``: If atomic counters are
diff -pruN 22.1.3-1/docs/gallium/tgsi.rst 22.2.0~rc1-1/docs/gallium/tgsi.rst
--- 22.1.3-1/docs/gallium/tgsi.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/gallium/tgsi.rst	2022-08-03 18:11:03.000000000 +0000
@@ -3783,8 +3783,8 @@ Threads per block in each dimension, if
 is known all three should be at least 1. If it is unknown they should all be set
 to 0 or not set.
 
-MUL_ZERO_WINS
-"""""""""""""
+LEGACY_MATH_RULES
+"""""""""""""""""
 
 The MUL TGSI operation (FP32 multiplication) will return 0 if either
 of the operands are equal to 0. That means that 0 * Inf = 0. This
diff -pruN 22.1.3-1/docs/gallium-nine.rst 22.2.0~rc1-1/docs/gallium-nine.rst
--- 22.1.3-1/docs/gallium-nine.rst	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/docs/gallium-nine.rst	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,48 @@
+Gallium Nine
+============
+
+The Gallium frontend, which implements Direct3D 9.
+
+Nine implements the full IDirect3DDevice9 COM interface and a custom COM interface called ID3DAdapter9, which is used to implement the final IDirect3D9Ex COM interface.
+ID3DAdapter9 is completely agnostic regarding the window system code, meaning this can be provided by wine, Xlib, Wayland, etc.
+
+Gallium Nine is commonly used in conjunction with `Wine <https://www.winehq.org/>`_.
+`Gallium Nine Standalone <https://github.com/iXit/wine-nine-standalone>`_ is the standalone version of the Wine parts of Gallium Nine which makes it possible to use it with any stock Wine version. It's simple to install through `Winetricks <https://github.com/Winetricks/winetricks>`_ with ``winetricks galliumnine``.
+Aside from Wine, Gallium Nine works well with `Box86 <https://ptitseb.github.io/box86/>`_.
+Can be used via `Zink <https://www.supergoodcode.com/to-the-nines/>`_ even on the `Vulkan API <https://en.wikipedia.org/wiki/Vulkan>`_.
+
+In the majority of cases this implementation has better performance than Wine doing the translation from D3D9 to OpenGL itself.
+
+It's also possible to use D3D9 directly from the Linux environment. For tests, demos, and more details, you can see `this repository <https://github.com/iXit/nine-tests>`_.
+
+Build
+-----
+
+Beware: Most Direct3D games are 32-bit, and thus need a 32-bit version of Mesa.
+
+.. code-block:: console
+
+   $ meson configure \
+         -D gallium-nine=true \
+         -D dri3=true \
+         ...
+
+Paths
+-----
+
+You need to point wine-nine-standalone to the location of ``d3dadapter9.so``.
+If you use distribution packaged Mesa, it should work out of the box.
+
+There are three options (sorted from permanent to temporary):
+ - compile Wine Nine Standalone with ``D3D9NINE_MODULEPATH`` pointing to your local library
+ - set ModulePath of Software\Wine\Direct3DNine in the wine registers
+ - ``$ D3D_MODULE_PATH="$MESA_INSTALLDIR/lib/d3d/d3dadapter9.so" wine ...``
+
+Run
+---
+
+Before running your application in Wine, verify that everything works as expected by running:
+
+.. code-block:: console
+
+   $ wine ninewinecfg
diff -pruN 22.1.3-1/docs/gpu-perf-tracing.rst 22.2.0~rc1-1/docs/gpu-perf-tracing.rst
--- 22.1.3-1/docs/gpu-perf-tracing.rst	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/docs/gpu-perf-tracing.rst	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,10 @@
+GPU Performance Tracing
+=======================
+
+TODO: Add general tips for performance measurement.
+
+.. toctree::
+   :maxdepth: 1
+
+   u_trace
+   perfetto
diff -pruN 22.1.3-1/docs/index.rst 22.2.0~rc1-1/docs/index.rst
--- 22.1.3-1/docs/index.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/index.rst	2022-08-03 18:11:03.000000000 +0000
@@ -72,9 +72,10 @@ Linux, FreeBSD, and other operating syst
    osmesa
    debugging
    perf
-   perfetto
+   gpu-perf-tracing
    extensions
    application-issues
+   gallium-nine
    viewperf
    xlibdriver
 
@@ -84,6 +85,7 @@ Linux, FreeBSD, and other operating syst
    :hidden:
 
    drivers/anv
+   drivers/asahi
    drivers/d3d12
    drivers/freedreno
    drivers/lima
diff -pruN 22.1.3-1/docs/install.rst 22.2.0~rc1-1/docs/install.rst
--- 22.1.3-1/docs/install.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/install.rst	2022-08-03 18:11:03.000000000 +0000
@@ -29,8 +29,8 @@ you're willing to maintain support for o
 
 -  GCC 4.2.0 or later (some parts of Mesa may require later versions)
 -  Clang - exact minimum requirement is currently unknown.
--  Microsoft Visual Studio 2015 or later is required, for building on
-   Windows.
+-  Microsoft Visual Studio 2019 Version 16.11 or later and
+   Windows SDK of at least 20348 is required, for building on Windows.
 
 Third party/extra tools.
 ^^^^^^^^^^^^^^^^^^^^^^^^
diff -pruN 22.1.3-1/docs/isl/ccs.rst 22.2.0~rc1-1/docs/isl/ccs.rst
--- 22.1.3-1/docs/isl/ccs.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/isl/ccs.rst	2022-08-03 18:11:03.000000000 +0000
@@ -52,7 +52,7 @@ concerned, is that fast-clears use only
 compression uses 2 bits.
 
 What is a cache-line pair?  Both the X and Y tiling formats are arranged as an
-8x8 grid of cache lines.  (See the [chapter on tiling](#tiling) for more
+8x8 grid of cache lines.  (See the :doc:`chapter on tiling <tiling>` for more
 details.)  In either case, a cache-line pair is a pair of cache lines whose
 starting addresses differ by 512 bytes or 8 cache lines.  This results in the
 two cache lines being vertically adjacent when the main surface is X-tiled and
diff -pruN 22.1.3-1/docs/isl/hiz.rst 22.2.0~rc1-1/docs/isl/hiz.rst
--- 22.1.3-1/docs/isl/hiz.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/isl/hiz.rst	2022-08-03 18:11:03.000000000 +0000
@@ -23,7 +23,7 @@ with HiZ.
 As stated in the PRM, this means we need a separate HiZ or stencil buffer for
 each LOD.  However, it's not quite as simple as that.  If you ignore layered
 rendering, things are pretty straightforward: you need one HiZ surface for each
-main surface slice With layered, rendering, however, we have to be a bit more
+main surface slice. With layered rendering, however, we have to be a bit more
 clever because we need a "real" array surface at each LOD.  ISL solves this
 with a special miptree layout for layered rendering
 :cpp:enumerator:`isl_dim_layout::ISL_DIM_LAYOUT_GFX6_STENCIL_HIZ` which lays
diff -pruN 22.1.3-1/docs/isl/tiling.rst 22.2.0~rc1-1/docs/isl/tiling.rst
--- 22.1.3-1/docs/isl/tiling.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/isl/tiling.rst	2022-08-03 18:11:03.000000000 +0000
@@ -320,7 +320,7 @@ are relatively expensive in hardware whi
 pattern is practically free. For a format that has more than one byte per
 element, you simply chop bits off the bottom of the pattern, hard-code them to
 0, and adjust bit indices as needed.  For a 128-bit format, for instance, the
-Y-tiled pattern becomes u_2 u_1 u_0 v_4 v_3 v_2 v_1 v_0.  The Sky Lake PRM
-Vol. 5 in the section "2D Surfaces" contains an expanded version of the above
-table (which we will not repeat here) that also includes the bit patterns for
-the Ys and Yf tiling formats.
+Y-tiled pattern becomes :math:`u_2 u_1 u_0 v_4 v_3 v_2 v_1 v_0`.  The Sky Lake
+PRM Vol. 5 in the section "2D Surfaces" contains an expanded version of the
+above table (which we will not repeat here) that also includes the bit patterns
+for the Ys and Yf tiling formats.
diff -pruN 22.1.3-1/docs/license.rst 22.2.0~rc1-1/docs/license.rst
--- 22.1.3-1/docs/license.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/license.rst	2022-08-03 18:11:03.000000000 +0000
@@ -80,7 +80,7 @@ Mesa Component Licenses
 +-----------------+------------------------+-----------------------------+
 | GLX client code | src/glx/               | SGI Free Software License B |
 +-----------------+------------------------+-----------------------------+
-| C11 thread      | include/c11/threads*.h | Boost (permissive)          |
+| C11 thread      | src/c11/impl/threads*  | Boost (permissive)          |
 | emulation       |                        |                             |
 +-----------------+------------------------+-----------------------------+
 
diff -pruN 22.1.3-1/docs/macos.rst 22.2.0~rc1-1/docs/macos.rst
--- 22.1.3-1/docs/macos.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/macos.rst	2022-08-03 18:11:03.000000000 +0000
@@ -1,6 +1,10 @@
 Notes for macOS
 ================
 
+.. image:: https://github.com/mesa3d/mesa/actions/workflows/ci.yml/badge.svg
+    :target: https://github.com/mesa3d/mesa/actions/workflows/ci.yml
+    :alt: macOS CI
+
 Mesa builds on macOS without modifications. However, there are some details to
 be aware of.
 
diff -pruN 22.1.3-1/docs/release-calendar.csv 22.2.0~rc1-1/docs/release-calendar.csv
--- 22.1.3-1/docs/release-calendar.csv	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/release-calendar.csv	2022-08-03 18:11:03.000000000 +0000
@@ -1,6 +1,8 @@
-22.0,2022-04-06,22.0.2,Dylan Baker
-,2022-04-20,22.0.3,Dylan Baker,This is the last planned release of the 22.0.x series.
-22.1,2022-04-13,22.1.0-rc1,Dylan Baker
-,2022-04-20,22.1.0-rc2,Dylan Baker
-,2022-04-27,22.1.0-rc3,Dylan Baker
-,2022-05-04,22.1.0-rc4,Dylan Baker,Or 22.1.0 final.
+22.1,2022-07-13,22.1.4,Dylan Baker,
+,2022-07-27,22.1.5,Dylan Baker,
+,2022-08-10,22.1.6,Dylan Baker,
+,2022-08-24,22.1.7,Dylan Baker,This is the last planned release of the 22.1.x series.
+22.2,2022-07-27,22.2.0-rc1,Dylan Baker
+,2022-08-03,22.2.0-rc2,Dylan Baker,
+,2022-08-10,22.2.0-rc3,Dylan Baker,
+,2022-08-17,22.2.0-rc4,Dylan Baker,Or 22.2.0 final.
diff -pruN 22.1.3-1/docs/relnotes/21.3.9.rst 22.2.0~rc1-1/docs/relnotes/21.3.9.rst
--- 22.1.3-1/docs/relnotes/21.3.9.rst	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/docs/relnotes/21.3.9.rst	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,119 @@
+Mesa 21.3.9 Release Notes / 2022-06-08
+======================================
+
+Mesa 21.3.9 is a bug fix release which fixes bugs found since the 21.3.8 release.
+
+Mesa 21.3.9 implements the OpenGL 4.6 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 4.6. OpenGL
+4.6 is **only** available if requested at context creation.
+Compatibility contexts may report a lower version depending on each driver.
+
+Mesa 21.3.9 implements the Vulkan 1.2 API, but the version reported by
+the apiVersion property of the VkPhysicalDeviceProperties struct
+depends on the particular driver being used.
+
+SHA256 checksum
+---------------
+
+::
+
+    91fe6f20339884e37a7c47bfba42fb1cd397512c9ed5ad423de369f047cd8b5c  mesa-21.3.9.tar.xz
+
+
+New features
+------------
+
+- None
+
+
+Bug fixes
+---------
+
+- [regression][bisected] MSVC: Build failure in libmesa_util when targeting x86 32-bit
+- A crash in radeonsi driver
+
+
+Changes
+-------
+
+Alyssa Rosenzweig (2):
+
+- panfrost: Emulate GL_CLAMP on Bifrost
+- pan/bi: Handle non-2D arrays
+
+Dave Airlie (2):
+
+- crocus: don't map scanout buffers as write-back
+- intel/perf: use a function to do common allocations
+
+Emma Anholt (2):
+
+- vulkan: Make sure we've loaded our connectors when querying plane props.
+- intel/perf: Move some static blocks of C code out of the python script.
+
+Eric Engestrom (3):
+
+- .pick_status.json: Update to 05d687723530ed3c5c9f7d0addb3b047138613a3
+- .pick_status.json: Update to fc381fa1e341bc9cf71f53a915dc47926a3f621f
+- Revert "glx: Fix build errors with --enable-mangling (v2)"
+
+Erik Faye-Lund (1):
+
+- Revert "ci: downgrade sphinx to v3.x"
+
+Georg Lehmann (1):
+
+- radv: Don't hash ycbcr sampler base object.
+
+Ian Romanick (1):
+
+- intel/fs: Force destination types on DP4A instructions
+
+Icecream95 (2):
+
+- panfrost: Don't initialise the trampolines array
+- panfrost: Optimise recalculation of max sampler view
+
+Jason Ekstrand (1):
+
+- anv: Allow MSAA resolve with different numbers of planes
+
+Jonathan Gray (1):
+
+- util: fix msvc build
+
+Lionel Landwerlin (4):
+
+- anv: fix variable shadowing
+- anv: zero-out anv_batch_bo
+- anv: emit timestamp & availability using the same part of CS
+- anv: flush tile cache with query copy command
+
+Matt Turner (8):
+
+- intel/perf: Don't print leading space from desc_units()
+- intel/perf: Deduplicate perf counters
+- intel/perf: Use a function to initialize perf counters
+- intel/perf: Use slimmer intel_perf_query_counter_data struct
+- intel/perf: Store indices to strings rather than pointers
+- intel/perf: Mark intel_perf_counter_* enums as PACKED
+- intel/perf: Fix mistake in description string
+- intel/perf: Destination array calculation into function
+
+Mike Blumenkrantz (9):
+
+- llvmpipe: fix occlusion queries with early depth test
+- anv: fix xfb usage with rasterizer discard
+- anv: fix CmdSetColorWriteEnableEXT for maximum rts
+- anv: fix some dynamic rasterization discard cases in pipeline construction
+- lavapipe: always clone shader nir for shader states
+- gallivm: fix oob image detection for cube/1dArray/2dArray/cubeArray
+- zink: flag sample locations for re-set on batch flush
+- zink: force-add usage when adding last-ref tracking
+- zink: only update usage on buffer rebind if rebinds occurred
+
+Pierre-Eric Pelloux-Prayer (1):
+
+- radeonsi: don't clear framebuffer.state before dcc decomp
diff -pruN 22.1.3-1/docs/relnotes/22.0.2.rst 22.2.0~rc1-1/docs/relnotes/22.0.2.rst
--- 22.1.3-1/docs/relnotes/22.0.2.rst	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/docs/relnotes/22.0.2.rst	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,293 @@
+Mesa 22.0.2 Release Notes / 2022-04-21
+======================================
+
+Mesa 22.0.2 is a bug fix release which fixes bugs found since the 22.0.1 release.
+
+Mesa 22.0.2 implements the OpenGL 4.6 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 4.6. OpenGL
+4.6 is **only** available if requested at context creation.
+Compatibility contexts may report a lower version depending on each driver.
+
+Mesa 22.0.2 implements the Vulkan 1.2 API, but the version reported by
+the apiVersion property of the VkPhysicalDeviceProperties struct
+depends on the particular driver being used.
+
+SHA256 checksum
+---------------
+
+::
+
+   df4fa560dcce6680133067cd15b0505fc424ca703244ce9ab247c74d2fab6885  mesa-22.0.2.tar.xz
+
+
+New features
+------------
+
+- None
+
+
+Bug fixes
+---------
+
+- Vulkan::Calling vkWaitForFences Timeout
+- Intel (CHT) - Uplink text rendering bugged out in Mesa 22.0
+- gen9atom gpu hang on dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1
+- bad memory managment on panfrost RK3399 -  cannot alocate more ram - fury unleashed
+- [Intel, Iris] Broken rendering in Ryujinx on Tigerlake
+- intel: integer_mad_hi / integer_mad_sat / integer_mul_hi produce invalid results
+- Textures colors distortion in "Black Geyser: Couriers of Darkness" with radeonsi
+- ShaderStorageBlocksWriteAccess not set for spir-v shaders?
+- radeonsi dEQP-GLES3.functional.buffer.map.write.explicit_flush.* flake crashes
+- radv: nir validation error with invalid array access
+- Intel Iris Xe Geometry Flickering/Assets Disappearing
+- Rendering artifacts when playing Outer Wilds [Reproducible with latest ANV driver built from main]
+- Vulkan wsi leaks vk_sync object on every wsi_AcquireNextImageKHR call
+- [bisected] panfrost(RK3399/T860): Emulationstation: broken, black or missing menus with v22.0.0
+- Plasma/KDE settings menus disappear on daily build
+- Square Artifacts Dragons Dogma
+- r300: Anmesia the dark descent corruption
+- Error compiling with LLVM-git/15
+
+
+Changes
+-------
+
+Alexey Bozhenko (1):
+
+- spirv: fix OpBranchConditional when both branches are the same
+
+Alyssa Rosenzweig (1):
+
+- panfrost: Process scissor state earlier
+
+Benjamin Cheng (1):
+
+- vulkan/queue: Destroy wait temps if they are skipped
+
+Boris Brezillon (1):
+
+- lavapipe: Don't use VK_OUTARRAY_MAKE()/vk_outarray_append()
+
+Caio Oliveira (2):
+
+- intel/fs: Initialize the sample mask in flags register when using demote
+- intel/fs: Fix IsHelperInvocation for the case no discard/demote are used
+
+Cristian Ciocaltea (1):
+
+- ci: Avoid altering EXTRA_CARGO_ARGS environment variable
+
+Daniel Schürmann (1):
+
+- aco/optimizer: fix call to can_use_opsel() in apply_insert()
+
+Danylo Piliaiev (3):
+
+- turnip: Fix the lack of WFM before indirect draws
+- turnip: enable has_ccu_flush_bug workaround for a660
+- turnip: Correctly store separate stencil in gmem store
+
+Dave Airlie (6):
+
+- radv: use flush vgt streamout like PAL does.
+- gallivm/sample: detect if rho is inf or nan and flush to zero.
+- llvmpipe: fix nr_sampler_view in key creation.
+- draw: handle tess eval shader when getting num outputs
+- u_blitter/stencil: take dstbox x/y into accounts for dst fb width
+- util/stencil: fix stencil fallback blit shader texture types.
+
+Dylan Baker (20):
+
+- docs: add sah256 sum for mesa 22.0.1
+- .pick_status.json: Update to 5a459b8f6b0b59814865bc5869a868269f8f7ebf
+- pick/core: have update_commits return the commit list
+- bin/auto-pick: Add a script that automates applying commits
+- .pick_status.json: Mark 3ef093f697ad9027ba514c7a4a6a10b7bd95bd47 as denominated
+- core: don't pass the ui back into commit.apply
+- .pick_status.json: Update to 33c800bf913771ddadb5bd632df46582f4d1c9f3
+- .pick_status.json: Update to 837f781c9a4f909ac1ee0b3b8331af87301b5fc3
+- .pick_status.json: Update to 7478b00c7cc7f7ec8cbe224ce600362f7fdb9411
+- .pick_status.json: Update to c7eaf0306876df53d3608ae3bf67afc272dcdf20
+- .pick_status.json: Mark 94706601fa2f52605d6e488f30fad9a0e2440612 as denominated
+- .pick_status.json: Mark 174d086e8c818db4522731e845bd259e2baa8830 as denominated
+- .pick_status.json: Mark 8b71118aa066ab125b7440912ed1e14da79c9451 as backported
+- .pick_status.json: Mark 4e30da7874e6586c7ac94cd34560c782d0f9678d as backported
+- .pick_status.json: Mark 7da211e24fe14d8b107461bdfcb3b8d67212f88a as backported
+- .pick_status.json: Mark 8294d454245d4318befac7c8915e55db3d47cefd as backported
+- .pick_status.json: Update to e509598470c000498c3e1328e012142d9047e292
+- .pick_status.json: Mark 2b688942c1b1f5ca4f3e4d33231579149aeb8fdb as denominated
+- .pick_status.json: Mark dd783d7144932d79ef761810d46e45c3df7148cf as denominated
+- .pick_status.json: Update to 9f44a264623461c98368185b023d99446676e039
+
+Emma Anholt (13):
+
+- r600: Update the PS state before checking for cb_misc update.
+- r600: Fix ordering of SSBO loads versus texturing.
+- r600: Add a workaround and explanation for shadowcubearray TG4.
+- vulkan: Make sure we've loaded our connectors when querying plane props.
+- st/glsl-to-tgsi: Fix handling of csel(bool, vec, vec).
+- r600: Disable SB in the presence of indirection on temp arrays.
+- r600: Disable SB when INTERP_SAMPLE is used.
+- r600: Implement memoryBarrier() in the non-SFN path.
+- nir_to_tgsi: Fix emitting the sample number for non-array MSAA image access.
+- nir_to_tgsi: Fix the address reg mapping for images and SSBOs to match G-T-T.
+- turnip: Stop allocating unused pvtmem space in the pipeline CS.
+- nir: Add lowering for fround_even on r300.
+- nouveau/nir: Fix the inverted sense of usesSampleMaskIn.
+
+Erik Faye-Lund (3):
+
+- vbo/dlist: do not try to pad an empty draw
+- d3d12: fix return-code without dxcompiler.dll
+- vulkan: explicitly cast object-type enum
+
+Francisco Jerez (1):
+
+- intel/perf: Fix OA report accumulation on Gfx12+.
+
+Georg Lehmann (7):
+
+- nir/fold_16bit_sampler_conversions: Don't fold dest upcasts.
+- radv: Add a vkCmdBuildAccelerationStructuresIndirectKHR stub.
+- radv: Add more RT pipeline stubs.
+- radv: Don't hash ycbcr sampler base object.
+- nir/fold_16bit_sampler_conversions: Fix dest type mismatches.
+- nir/fold_16bit_sampler_conversions: Fix src type mismatches.
+- radv: Enable global bo list if 1.2 features are used.
+
+Ian Romanick (3):
+
+- intel/compiler: Fix sample_d messages on DG2
+- intel/fs: Force destination types on DP4A instructions
+- nir: intel/compiler: Lower TXD on array surfaces on DG2+
+
+Icecream95 (1):
+
+- panfrost: Stop overallocating compressed textures
+
+Jason Ekstrand (7):
+
+- v3dv/queue: Rework multisync_free
+- nir: Dont set coord_components on txs
+- lavapipe: Use VK_OUTARRAY for GetPhysicalDeviceQueueFamilyProperties[2]
+- anv: Disallow blending on swizzled formats
+- nir/lower_int64: Fix [iu]mul_high handling
+- iris: Don't leak scratch BOs
+- nir/opcodes: fisfinite32 should return bool32
+
+Jordan Justen (1):
+
+- intel/dev: Add device info for RPL-P
+
+Kai Wasserbäch (2):
+
+- fix(FTBFS): clover: work around removal of PointerType::getElementType()
+- fix(clover): FTBFS: Added missing include for ConstantInt for LLVM 15
+
+Kenneth Graunke (2):
+
+- intel/compiler: Call inst->resize_sources before setting the sources
+- iris: Add pre-draw flushing for stream output targets
+
+Lionel Landwerlin (9):
+
+- anv: fix variable shadowing
+- anv: zero-out anv_batch_bo
+- anv: implement EXT_tooling_info
+- iris: don't synchronize BO for batch decoding
+- anv: disable preemption on 3DPRIMITIVE on gfx12
+- anv: fix dynamic sample locations on Gen7/7.5
+- blorp: disable depth bounds
+- intel: fix URB programming for GT1s
+- anv: allow getting the address of the beginning of the batch
+
+Marcin Ślusarz (3):
+
+- anv: fix push constant lowering for task/mesh
+- anv: invalidate all metadata in anv_nir_lower_ubo_loads
+- intel/compiler: invalidate all metadata in brw_nir_lower_intersection_shader
+
+Michael Olbrich (1):
+
+- crocus: export GEM handle with RDWR access rights
+
+Mike Blumenkrantz (29):
+
+- draw: fix gs vertex stream counting
+- radv: fix CmdSetColorWriteEnableEXT(attachmentCount==MAX_RTS)
+- draw: fix nonzero stream primitives generated queries
+- lavapipe: enforce monotonic timeline incrementing
+- zink: force push descriptors cache update if hashing detects changes
+- llvmpipe: handle sampling from 2d views of 3d images
+- zink: unset resource layout+access when doing storage setup
+- zink: adds refs to user index buffers when tc is not active
+- zink: handle 0 ubos and 0 ssbos in pipeline layout
+- zink: create pipeline layout if only bindless descriptor set is used
+- zink: fix xfb analysis variable finding for arrays
+- zink: track internal conditional render state
+- zink: flag sample locations for re-set on batch flush
+- lavapipe: fix typo in set_event execution
+- mesa/st: add special casing for pointsize constant updating during validate
+- intel/isl: fix 2d view of 3d textures
+- zink: fix max geometry input component advertising
+- nir/lower_tex: avoid adding invalid LOD to RECT textures
+- zink: use the calculated last struct member idx for ssbo size in ntv
+- zink: avoid creating ssbo variable types with multiple runtime arrays
+- nir/lower_tex: fix rect queries with lower_rect set
+- mesa/st: set normalized coords for RECT samplers if rects are unsupported
+- zink: reject resource creation if format features don't match attachment
+- zink: unconditionally set line width on rasterizer state change
+- zink: support restart with PIPE_PRIM_LINES_ADJACENCY if ext is available
+- zink: handle device-local unsynchronized maps
+- util/draw: fix map size of indirect buffer in util_draw_indirect_read
+- util/draw: handle draw_count=0 when reading indirect parameters
+- util/draw: fix indirect draw count readback
+
+Pavel Ondračka (1):
+
+- r300: respect output_semantic_index when writing colors
+
+Pierre-Eric Pelloux-Prayer (6):
+
+- glsl/nir/linker: update shader_storage_blocks_write_access for SPIR-V
+- gallium/u_threaded: late alloc cpu_storage
+- gallium/tc: warn if an app is incompatible with cpu_storage
+- gallium/tc: zero alloc transfers
+- glsl/nir/linker: fix shader_storage_blocks_write_access
+- drirc: enable radeonsi_zerovram for Black Geyser
+
+Qiang Yu (1):
+
+- nir/linker: disable varying from uniform lowering by default
+
+Rohan Garg (1):
+
+- iris: set a default EDSC flag
+
+Samuel Pitoiset (8):
+
+- radv,drirc: move RADV workarounds to 00-radv-defaults.conf
+- radv: disable DCC for Fable Anniversary, Dragons Dogma, GTA IV and more
+- radv: enable radv_disable_aniso_single_level for DXVK/vkd3d
+- radv: fix cleaning the image view for CmdCopyImageToBuffer()
+- radv: save/restore the stencil write mask during internal driver operations
+- radv: suspend/resume queries during internal driver operations
+- radv: save/restore the stencil reference during internal driver operations
+- radv: fix initializing pipeline_key::topology for GFX9 and older
+
+Sviatoslav Peleshko (1):
+
+- mesa: flush bitmap caches when changing scissors or window rects state
+
+Timothy Arceri (1):
+
+- glsl: fix needs_lowering() call in varying packing pass
+
+Timur Kristóf (4):
+
+- aco: Fix VOP2 instruction format in visit_tex.
+- nir: Handle out of bounds access in nir_vectorize_tess_levels.
+- radv: Fix gs_vgpr_comp_cnt for NGG VS without passthrough mode.
+- radv: Use correct buffer offset for conditional rendering.
diff -pruN 22.1.3-1/docs/relnotes/22.0.3.rst 22.2.0~rc1-1/docs/relnotes/22.0.3.rst
--- 22.1.3-1/docs/relnotes/22.0.3.rst	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/docs/relnotes/22.0.3.rst	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,201 @@
+Mesa 22.0.3 Release Notes / 2022-05-04
+======================================
+
+Mesa 22.0.3 is a bug fix release which fixes bugs found since the 22.0.2 release.
+
+Mesa 22.0.3 implements the OpenGL 4.6 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 4.6. OpenGL
+4.6 is **only** available if requested at context creation.
+Compatibility contexts may report a lower version depending on each driver.
+
+Mesa 22.0.3 implements the Vulkan 1.2 API, but the version reported by
+the apiVersion property of the VkPhysicalDeviceProperties struct
+depends on the particular driver being used.
+
+SHA256 checksum
+---------------
+
+::
+
+   9f2b30f5276a9abaf71aafc6979685e2636189de1a87aea2c9e69744a6d0ebb9  mesa-22.0.3.tar.xz
+
+
+New features
+------------
+
+- None
+
+
+Bug fixes
+---------
+
+- freedreno: fragile location packing can break cull/clip distance
+- turnip: dEQP-VK.spirv_assembly.instruction.compute.float_controls.fp16.generated_args.* failures
+- piglit ext_image_dma_buf_import.ext_image_dma_buf_import*  regression
+- piglit ext_image_dma_buf_import.ext_image_dma_buf_import*  regression
+- Grid Autosport via proton/vulkan: glitches on the grass on amdgpu, fine on amdgpu-pro
+- [Bisected] r600: Big performance regression on some games
+- Huge amount of anon_inode:sync_file file descriptor created
+- anv regressions from commit 57445adc891 "anv: Re-enable CCS_E on TGL+"
+- NIR validation failed after nir_opt_if
+- intel: integer_mad_hi / integer_mad_sat / integer_mul_hi produce invalid results
+- Aperture Desk Job rendering artifacts Intel TGL
+- intel: integer_sub_sat produces stack corruption / OpISubBorrow compilation issue
+- r300/rv530: "Black rendering" of Baldur's Gate Dark Alliance in Xbox emulator CXBX-R under wine with Gallium Nine and RADEON_DEBUG=use_tgsi
+- radv/aco: xfb bug
+- Occasional flicker corruption in Rage 2, e.g. after loading, with ACO on RX 5700 XT
+- RADV: Quake 2 RTX v1.6.0 Corrupted Graphics
+- '../src/amd/common/ac_surface.c:1575: void ac_copy_dcc_equation(const struct radeon_info \*, ADDR2_COMPUTE_DCCINFO_OUTPUT \*, struct gfx9_meta_equation \*): assertion "dcc->equation.gfx9.num_bits <= ARRAY_SIZE(equation->u.gfx9.bit)" failed'
+
+
+Changes
+-------
+
+Chia-I Wu (1):
+
+- util: Keep quiet NaNs quiet when converting to half float.
+
+Dave Airlie (2):
+
+- llvmpipe: add user memory resources to the debug global list.
+- vulkan/wsi: keep allocate queue families in image, just don't fill them
+
+Dylan Baker (21):
+
+- docs: Add sha256sums for 22.0.2
+- .pick_status.json: Update to 5e84335fb578f03938468bb8ac0029f68349d330
+- .pick_status.json: Update to a6a4bf0f1eae36cb68d5c67653ac013fe0fbde8a
+- .pick_status.json: Update to ef9d97ec1f9d9834db3066b5a7ec67ce6d4ecd86
+- .pick_status.json: Update to f17d3a125126dd7e0f1c2072545976cec1eeb1c8
+- .pick_status.json: Update to 1dc697942af7254798f83583f5788e1abf136d27
+- .pick_status.json: Mark d5870c45ae82c091e72f1258920aa54974e19a36 as denominated
+- .pick_status.json: Mark f348103fce4484b891a58bf3147b71e3a3558135 as denominated
+- .pick_status.json: Mark a4f502de3228ec37dfcaa38225077ec3709d74ea as denominated
+- .pick_status.json: Mark 1d250b7b959d2a206280e4f83db05780a83e0927 as denominated
+- .pick_status.json: Mark 4eca6e3e5d2b9426d6357e9af1514a0c942638f0 as denominated
+- .pick_status.json: Mark 3dcb80da9d6d34e567680ef7fecd24aab4537e8a as denominated
+- .pick_status.json: Mark dd078d13cb6b445ad02087a3e80433ef053b7490 as denominated
+- .pick_status.json: Mark bbdf22ce136a7f02a8bd6c7e646d12a7e10db18d as denominated
+- .pick_status.json: Mark 8806f444a5c005d20cd4ec4ed42e508ffd9cb1da as denominated
+- .pick_status.json: Mark 373c8001d6615d70d112c7526ea4f4953257b6b9 as denominated
+- .pick_status.json: Mark a056cbc691843861da417b5bcea9f871fdceeb19 as denominated
+- .pick_status.json: Mark fc5edf9b68159288baa22c055e471de958812312 as denominated
+- .pick_status.json: Mark e509598470c000498c3e1328e012142d9047e292 as denominated
+- .pick_status.json: Update to 53a94fbdd57acbbe2bc745901cbfeca968e25273
+- .pick_status.json: Update to 2505afc430c6b151e7e4243503953ba0b0a2c842
+
+Erik Faye-Lund (3):
+
+- meson: remove unused defines
+- gallium/xlib: fix stale comment
+- mesa: add missing error-path
+
+Filip Gawin (1):
+
+- r300: Print warning when stubbing derivatives
+
+Gert Wollny (1):
+
+- r600: Allow eight bit, three channel formats for vertex buffers
+
+Icecream95 (1):
+
+- panfrost: Fix pack_32_2x16 implementation
+
+Iván Briano (1):
+
+- vulkan/wsi/wayland: Fix double free on error condition
+
+Jason Ekstrand (4):
+
+- util/set: Respect found in search_or_add_pre_hashed
+- nir: Lower all bit sizes of usub_borrow
+- vulkan: Set signals[i].stageMask = ALL_COMMANDS for QueueSubmit2 wrapping
+- spirv: Handle Op*MulExtended for non-32-bit types
+
+Jordan Justen (3):
+
+- vulkan/wsi/x11: Use atomic_int with sent_image_count
+- iris: Fix assertion meant to only target the clear-color stride
+- iris: Fix assertion meant to only target the clear-color stride
+
+Juan A. Suarez Romero (1):
+
+- mesa: unref syncobj after wait_sync
+
+Konstantin Seurer (2):
+
+- radv: Fix barriers with cp dma
+- radv: Fix lowering ignore_ray_intersection
+
+Lionel Landwerlin (6):
+
+- nir/divergence: handle load_global_block_intel
+- intel: fixup number of threads per EU on XeHP
+- anv: fix acceleration structure descriptor template writes
+- anv: skip acceleration structure in binding table emission
+- anv: fix clflush usage on utrace copy batch
+- anv: fix invalid utrace memcpy l3 config on gfx < 11
+
+Marek Olšák (3):
+
+- nir: fix an uninitialized variable valgrind warning in nir_group_loads
+- ac/surface: fix an addrlib race condition on gfx9
+- winsys/amdgpu: fix a mutex deadlock when we fail to create pipe_screen
+
+Mike Blumenkrantz (10):
+
+- wgl: support GL 4.6
+- zink: fix tcs control barriers for use without vk memory model
+- zink: fix semantics mask for compute control barriers
+- zink: add synchronization for buffer clears
+- mesa/st: clamp GL_RENDERBUFFER to GL_TEXTURE_2D for sparse queries
+- glsl/nir: set new_style_shadow for sparse tex ops as necessary
+- zink: fix group memory barrier emission
+- vulkan: bump layer api versions to current vk header version
+- llvmpipe: disable compute statistics queries if queries are disabled
+- llvmpipe: disable statistic queries during draw if queries are disabled
+
+Nanley Chery (2):
+
+- Revert "anv: Disable CCS_E for some 8/16bpp copies on TGL+"
+- iris: Return a 64B stride for clear color plane
+
+Paulo Zanoni (1):
+
+- iris: fix race condition during busy tracking
+
+Pavel Ondračka (1):
+
+- r300: set PIPE_BIND_CONSTANT_BUFFER for const_uploader
+
+Pierre-Eric Pelloux-Prayer (1):
+
+- ac/surface: adjust gfx9.pitch[*] based on surf->blk_w
+
+Samuel Pitoiset (6):
+
+- radv: only apply enable_mrt_output_nan_fixup for 32-bit float MRTs
+- aco: fix load_barycentric_at_{sample,offset} on GFX6-7
+- nir: fix marking XFB varyings as always active IO
+- nir: mark XFB varyings as unmoveable to prevent them to be remapped
+- radv: fix handling divisor == 0 with dynamic vertex input state
+- radv: enable radv_disable_sinking_load_input_fs for Grid Autosport
+
+Sviatoslav Peleshko (1):
+
+- anv: workaround apps that assume full subgroups without specifying it
+
+Tapani Pälli (1):
+
+- isl: disable mcs (and mcs+ccs) for color msaa on DG2
+
+Timothy Arceri (1):
+
+- nir: fix sorting before assigning varying driver locations
+
+Yevhenii Kolesnikov (1):
+
+- nir: Remove single-source phis before opt_if_loop_last_continue
diff -pruN 22.1.3-1/docs/relnotes/22.0.4.rst 22.2.0~rc1-1/docs/relnotes/22.0.4.rst
--- 22.1.3-1/docs/relnotes/22.0.4.rst	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/docs/relnotes/22.0.4.rst	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,152 @@
+Mesa 22.0.4 Release Notes / 2022-05-19
+======================================
+
+Mesa 22.0.4 is a bug fix release which fixes bugs found since the 22.0.3 release.
+
+Mesa 22.0.4 implements the OpenGL 4.6 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 4.6. OpenGL
+4.6 is **only** available if requested at context creation.
+Compatibility contexts may report a lower version depending on each driver.
+
+Mesa 22.0.4 implements the Vulkan 1.2 API, but the version reported by
+the apiVersion property of the VkPhysicalDeviceProperties struct
+depends on the particular driver being used.
+
+SHA256 checksum
+---------------
+
+::
+
+   c7971f58fa826e474617cda53250c6600fce60994b9fac5b641522e21f471ed4  mesa-22.0.4.tar.xz
+
+
+New features
+------------
+
+- None
+
+
+Bug fixes
+---------
+
+- turnip: gfxbench mh3.1 offscreen crash with ANGLE
+- [radv] DCC causes artifacts in Senran Kagura Shinovi Versus
+- Radeon RX 5700XT crash when using prusa-slicer
+- clover: Assertion \`NumContainedTys && "Attempting to get element type of opaque pointer"' failed
+
+
+Changes
+-------
+
+Alyssa Rosenzweig (1):
+
+- nir: Don't set writes_memory for reading XFB
+
+Chia-I Wu (1):
+
+- anv: advertise rectangularLines only for Gen10+
+
+Danylo Piliaiev (3):
+
+- tu: Fix indices of drm_msm_gem_submit_cmd when filling them
+- tu: Do not flush ccu in clear/blits during renderpass
+- pps: Open writable renderer node in DrmDevice::create
+
+Dylan Baker (17):
+
+- docs: Add sh256sum for mesa 20.0.3
+- .pick_status.json: Update to 7f91e8fad94dd34f83c6a124dbbe5d210be7715f
+- .pick_status.json: Update to 14b1ed1ce105d42652f70e2fd13c90fc4f2e7ffc
+- .pick_status.json: Mark 69e6417e19793043e4bb3cd500cfcf377bce4c03 as denominated
+- .pick_status.json: Mark c025cb9ee9d79ebfb66a577556e04deecfe012ed as denominated
+- .pick_status.json: Mark 6317f88b044501354a052064478d5b43dfe41809 as denominated
+- .pick_status.json: Mark 5ff3fa5912778adb8117fa26bfe4786b583e741b as denominated
+- .pick_status.json: Mark 9a412c10b7a96adf71c9a2ca44a0abca75de1c49 as denominated
+- .pick_status.json: Mark 0e49ef5c9f2ec34567613226ad498edca28bce88 as denominated
+- .pick_status.json: Mark ae369e9f6d4f2c826f1f2a748c32a14f9d5f1f54 as denominated
+- .pick_status.json: Update to 14b1ed1ce105d42652f70e2fd13c90fc4f2e7ffc
+- .pick_status.json: Mark 8c1d9c7b744b2e5b40fd42cfd51256b16deea6a8 as denominated
+- .pick_status.json: Mark f1d1371e512e32d03f7f54d873020e589ee67d47 as denominated
+- .pick_status.json: Update to 57293dee2b11ba7e52052edc4d0437f08db19144
+- .pick_status.json: Update to 5c90eb1c53f46e86717c6bf4d5253dd23c4dac1f
+- .pick_status.json: Mark 5a3aee78cbb70918b413cdd40dffcae7c9e97d8c as denominated
+- ci: Some panfrost tests are unexpectedly passing.
+
+Georg Lehmann (1):
+
+- nir/opt_algebraic: Fix mask in shift by constant combining.
+
+Icecream95 (6):
+
+- nir/lower_tex: Copy more fields in lower_tex_to_txd and friends
+- pan/mdg: Keep min_bound at 16 when alignment requires it
+- pan/mdg: Use MAX2 to set min_alignment
+- pan/mdg: Fix mask usage when filling before a spill
+- pan/mdg: Return the instruction from mir_insert_instruction_*_scheduled
+- pan/mdg: Fix multiple spilt writes in the same bundle
+
+Jason Ekstrand (4):
+
+- vulkan/wsi: Set the right stage flags for semaphore waits
+- gallium/u_threaded_context: Use PIPE_MAX_SHADER_SAMPLER_VIEWS for sampler_buffers
+- nir/cf: Return a cursor from nir_cf_extract as well
+- nir: Preserve metadata if remove_dead_derefs makes no progress
+
+Lionel Landwerlin (4):
+
+- nir/cf: return cursor after insertion of cf_list
+- nir/lower_shader_calls: don't use nop instructions as cursors
+- nir/lower_shader_calls: don't insert code after break/continue
+- nir/lower_shader_calls: put inserted instructions into a dummy block
+
+Marcin Ślusarz (2):
+
+- anv: update task/mesh distribution with the recommended values
+- anv: disable streamout before emitting mesh shading state
+
+Marek Olšák (2):
+
+- ac/llvm: set the correct cache policy for sparse buffer loads
+- radeonsi: fix a crash when failing to create a context
+
+Mike Blumenkrantz (14):
+
+- util/blitter: fix sampler restore with 0 saved samplers
+- st/draw_feedback: set constant buffer stride
+- llvmpipe: always set ssbo data pointers for draw
+- gallivm: fix oob txf swizzling
+- zink: fix up sparse texture sampling for shadow samplers
+- zink: clamp out min_lod operands for explicit lod ops
+- zink: fix sparse binding for arrayed textures
+- zink: fix sparse texture depth calcs for arrayed textures
+- zink: remove refs from shader images
+- zink: reuse local res pointer in set_shader_images
+- zink: simplify dumb update flagging in set_shader_images
+- zink: read shader image r/w usage from incoming data struct
+- zink: copy incoming shader image struct after doing updates
+- zink: stop leaking shader image surfaces
+
+Pavel Ondračka (1):
+
+- r300: guard for unsigned underflow when unrolling loops
+
+Pierre-Eric Pelloux-Prayer (2):
+
+- radeonsi: don't use wave32 for GE on gfx10 if culling is used
+- amd: fix ac_build_mbcnt_add in wave32 mode
+
+Rhys Perry (1):
+
+- aco/ra: fix vgpr_limit
+
+Samuel Pitoiset (3):
+
+- radv: re-emit dynamic line stipple state if the primitive topology changed
+- radv: disable instance packing to fix pipeline query stats
+- radv: disable DCC for Senra Kagura Shinovi Versus
+
+Thomas Debesse (1):
+
+- gallium/clover: pass -no-opaque-pointers to Clang
diff -pruN 22.1.3-1/docs/relnotes/22.0.5.rst 22.2.0~rc1-1/docs/relnotes/22.0.5.rst
--- 22.1.3-1/docs/relnotes/22.0.5.rst	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/docs/relnotes/22.0.5.rst	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,139 @@
+Mesa 22.0.5 Release Notes / 2022-06-01
+======================================
+
+Mesa 22.0.5 is a bug fix release which fixes bugs found since the 22.0.4 release.
+
+Mesa 22.0.5 implements the OpenGL 4.6 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 4.6. OpenGL
+4.6 is **only** available if requested at context creation.
+Compatibility contexts may report a lower version depending on each driver.
+
+Mesa 22.0.5 implements the Vulkan 1.2 API, but the version reported by
+the apiVersion property of the VkPhysicalDeviceProperties struct
+depends on the particular driver being used.
+
+SHA256 checksum
+---------------
+
+::
+
+   5ee2dc06eff19e19b2867f12eb0db0905c9691c07974f6253f2f1443df4c7a35  mesa-22.0.5.tar.xz
+
+
+New features
+------------
+
+- None
+
+
+Bug fixes
+---------
+
+- nir_lower_phis_to_regs_block: Assertion \`src->src.is_ssa' failed.
+- Build failure on sparc
+- Signal 6 (Aborted) when opening GTK3 applications
+- radv: Conditional rendering on compute queue
+- anv: line failure
+- panfrost midgard - major issues with MelonDS emulator - not able to trace properly too
+- Nheko misrendering on RK3399 (Mali T860)
+
+
+Changes
+-------
+
+Daniel Schürmann (1):
+
+- aco: fix spilling of phis without temp operands
+
+Dave Airlie (2):
+
+- meson: add build-id to pipe libraries
+- lavapipe: fix depth bias offset flag enables.
+
+Dylan Baker (6):
+
+- docs: add sha256sum to 22.0.4 notes
+- .pick_status.json: Update to 95d4e5435bf63239105a50370ebbbbdeb7fed2f8
+- .pick_status.json: Update to ee2278de654853f1d6107e6ef6fc8537a668866e
+- .pick_status.json: Update to 9773ed1dc74b98019640d909cdc2b5d6cffae85a
+- .pick_status.json: Update to 5067a26f4432ae5e9690e70ef2498ea24798593e
+- .pick_status.json: Update to 1c63a0beafefccec599ddbe355ec5a8b61df6438
+
+Erik Faye-Lund (4):
+
+- editorconfig: remove scons-ism
+- editorconfig: remove html-rule
+- editorconfig: remove m4-rule
+- editorconfig: remove pl-rule
+
+Filip Gawin (1):
+
+- r300: keep negation if w is an inline constant
+
+Hans-Kristian Arntzen (1):
+
+- radv: Fix RTPSO hashing of pGroups.
+
+Icecream95 (5):
+
+- panfrost: Copy blend constant into variant even when reusing it
+- nir: Add store_combined_output_pan BASE back
+- pan/bi: Read base for combined stores
+- pan/mdg: Read base for combined stores
+- panfrost: Only write depth / stencil once if MRT is used
+
+Jason Ekstrand (6):
+
+- intel/fs: Copy color_outputs_valid into wm_prog_data
+- anv: Drop alpha_to_coverage from the NULL FS optimization
+- anv: Handle the null FS optimization after compiling shaders
+- anv: Don't disable the fragment shader if XFB is enabled
+- nir: Handle register sources in lower_phis_to_regs_block
+- glsl/nir: Stop leaking varyings_info
+
+Matt Turner (1):
+
+- mesa: Drop dead #include "sparc/sparc.h"
+
+Michael Skorokhodov (1):
+
+- anv: Update line range
+
+Mike Blumenkrantz (13):
+
+- spirv: fix barrier scope assert
+- zink: only reject non-blittable resource creation if it has no other binds
+- zink: add extra validation for resource creation
+- zink: remove input attachment usage when pruning surface usage
+- zink: add extended usage and retry if resource creation fails
+- zink: fix surface/bufferview cache comparisons
+- zink: force render target usage for sampler-only resources
+- zink: fix non-dynamic vertex stride update flagging
+- turnip: fix assert for max xfb outputs
+- zink: require draw params ext/cap in ntv if drawid is used
+- zink: emit spirv cap for subgroup vote ops
+- zink: drop wideLines requirement
+- zink: drop largePoints requirement
+
+Pierre-Eric Pelloux-Prayer (2):
+
+- glx: set max values for pbuffer width / height
+- radeonsi: don't use sel->nir in si_check_blend_dst_sampler_noop
+
+Qiang Yu (1):
+
+- radeonsi: lower nir_intrinsic_sparse_residency_code_and
+
+Rhys Perry (1):
+
+- aco: fix p_constaddr with a non-zero offset
+
+Samuel Pitoiset (1):
+
+- radv: fix writing buffer markers with non-zero memory offset
+
+Timur Kristóf (1):
+
+- radv: Implement conditional rendering for async compute queue.
diff -pruN 22.1.3-1/docs/relnotes/22.1.3.rst 22.2.0~rc1-1/docs/relnotes/22.1.3.rst
--- 22.1.3-1/docs/relnotes/22.1.3.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/relnotes/22.1.3.rst	2022-08-03 18:11:03.000000000 +0000
@@ -19,7 +19,7 @@ SHA256 checksum
 
 ::
 
-    TBD.
+   b98f32ba7aa2a1ff5725fb36eb999c693079f0ca16f70aa2f103e2b6c3f093e3  mesa-22.1.3.tar.xz
 
 
 New features
diff -pruN 22.1.3-1/docs/relnotes/new_features.txt 22.2.0~rc1-1/docs/relnotes/new_features.txt
--- 22.1.3-1/docs/relnotes/new_features.txt	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/docs/relnotes/new_features.txt	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,16 @@
+WGL_ARB_create_context_robustness
+d3d12 ARB_robust_buffer_access_behavior
+VK_EXT_robustness2 for lavapipe
+VK_EXT_image_2d_view_of_3d on RADV
+zink and d3d12 GL_EXT_memory_object_win32 and GL_EXT_semaphore_win32 support
+vertexAttributeInstanceRateZeroDivisor support for lavapipe
+panfrost Valhall support (conformant OpenGL ES 3.1 on Mali-G57)
+VK_EXT_primitives_generated_query on RADV
+VK_EXT_non_seamless_cube_map on RADV, ANV, lavapipe
+VK_EXT_border_color_swizzle on lavapipe, ANV, turnip, RADV
+VK_EXT_shader_module_identifier on RADV
+variablePointers on lavapipe
+VK_EXT_multisampled_render_to_single_sampled on lavapipe
+VK_EXT_shader_subgroup_vote/ballot on lavapipe
+EGL_KHR_context_flush_control for all drivers
+GLX_ARB_context_flush_control for all drivers
diff -pruN 22.1.3-1/docs/relnotes.rst 22.2.0~rc1-1/docs/relnotes.rst
--- 22.1.3-1/docs/relnotes.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/relnotes.rst	2022-08-03 18:11:03.000000000 +0000
@@ -3,6 +3,15 @@ Release Notes
 
 The release notes summarize what's new or changed in each Mesa release.
 
+-  :doc:`22.1.3 release notes <relnotes/22.1.3>`
+-  :doc:`22.1.2 release notes <relnotes/22.1.2>`
+-  :doc:`21.3.9 release notes <relnotes/21.3.9>`
+-  :doc:`22.0.5 release notes <relnotes/22.0.5>`
+-  :doc:`22.1.1 release notes <relnotes/22.1.1>`
+-  :doc:`22.0.4 release notes <relnotes/22.0.4>`
+-  :doc:`22.1.0 release notes <relnotes/22.1.0>`
+-  :doc:`22.0.3 release notes <relnotes/22.0.3>`
+-  :doc:`22.0.2 release notes <relnotes/22.0.2>`
 -  :doc:`22.0.1 release notes <relnotes/22.0.1>`
 -  :doc:`21.3.8 release notes <relnotes/21.3.8>`
 -  :doc:`22.0.0 release notes <relnotes/22.0.0>`
@@ -359,6 +368,15 @@ release notes, or in the `old docs`_.
    :maxdepth: 1
    :hidden:
 
+   relnotes/22.1.3
+   relnotes/22.1.2
+   relnotes/21.3.9
+   relnotes/22.0.5
+   relnotes/22.1.1
+   relnotes/22.0.4
+   relnotes/22.1.0
+   relnotes/22.0.3
+   relnotes/22.0.2
    relnotes/22.0.1
    relnotes/21.3.8
    relnotes/22.0.0
diff -pruN 22.1.3-1/docs/systems.rst 22.2.0~rc1-1/docs/systems.rst
--- 22.1.3-1/docs/systems.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/systems.rst	2022-08-03 18:11:03.000000000 +0000
@@ -15,7 +15,7 @@ Hardware drivers include:
    Website <https://01.org/linuxgraphics>`__
 -  AMD Radeon series. See
    `RadeonFeature <https://www.x.org/wiki/RadeonFeature>`__
--  NVIDIA GPUs (Riva TNT and later). See `Nouveau
+-  NVIDIA GPUs (GeForce 5 / FX and later). See `Nouveau
    Wiki <https://nouveau.freedesktop.org>`__
 -  Qualcomm Adreno A2xx-A6xx. See :doc:`Freedreno
    <drivers/freedreno>`
@@ -39,7 +39,7 @@ Layered driver include:
 
 Software drivers include:
 
--  :doc:`LLVMpipe <drivers/llvmpipe>` - uses LLVM for x86 JIT code generation
+-  :doc:`LLVMpipe <drivers/llvmpipe>` - uses LLVM for JIT code generation
    and is multi-threaded
 -  Softpipe - a reference Gallium driver
 
@@ -62,11 +62,14 @@ the Git repo. The list includes:
 -  3DLABS Gamma
 -  ATI Mach 64
 -  ATI Rage 128
+-  ATI Radeon 7000 - 9250
 -  DEC OpenVMS
 -  Intel i810
+-  Intel i830 - i865
 -  Linux fbdev
 -  Matrox
 -  MS-DOS
+-  NVIDIA Riva TNT - GeForce 4
 -  S3 Savage
 -  Silicon Integrated Systems
 -  swrast
diff -pruN 22.1.3-1/docs/u_trace.rst 22.2.0~rc1-1/docs/u_trace.rst
--- 22.1.3-1/docs/u_trace.rst	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/docs/u_trace.rst	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,62 @@
+u_trace GPU Performance Tracing
+===============================
+
+Mesa has its own GPU performance tracing framework which drivers may
+choose to implement. ``gpu.renderstages.*`` producer for
+:doc:`Perfetto Tracing <perfetto>` is based on u_trace.
+
+It doesn't require external dependencies and much simpler to use. Though
+it provides information only about GPU timings and is harder to analyze
+for complex rendering.
+
+u_trace is useful when one needs to quickly identify performance bottleneck,
+or to build a tool to analyze the raw performance data.
+
+Drivers which support u_trace:
+   - Intel drivers: Anv, Iris
+   - Adreno drivers: Freedreno, Turnip
+
+Usage
+-----
+
+u_trace is controlled by environment variables:
+
+:envvar:`GPU_TRACE`
+   if set to ``1`` enables tracing and outputs the data into ``stdout``
+
+:envvar:`GPU_TRACEFILE`
+   specifies a file where to write the output instead of ``stdout``
+
+:envvar:`GPU_TRACE_FORMAT`
+   controls a format of the output
+
+   ``txt``
+      human readable text format
+   ``json``
+      json format, suitable for parsing. Application should appropriately
+      finish its rendering in order for trace's json to be valid.
+      For Vulkan api it is expected to destroy the device, for GL it is
+      expected to destroy the context.
+
+:envvar:`GPU_TRACE_INSTRUMENT`
+   Meaningful only for Perfetto tracing. If set to ``1`` enables
+   instrumentation of GPU commands before the tracing is enabled.
+
+:envvar:`*_GPU_TRACEPOINT`
+   tracepoints can be enabled or disabled using driver specific environment
+   variable. Most tracepoints are enabled by default. For instance
+   ``TU_GPU_TRACEPOINT=-blit,+render_pass`` will disable the
+   ``blit`` tracepoints and enable the ``render_pass`` tracepoints.
+
+.. list-table::
+   :header-rows: 1
+
+   * - Driver
+     - Environment Variable
+     - Tracepoint Definitions
+   * - Freedreno
+     - :envvar:`FD_GPU_TRACEPOINT`
+     - ``src/gallium/drivers/freedreno/freedreno_tracepoints.py``
+   * - Turnip
+     - :envvar:`TU_GPU_TRACEPOINT`
+     - ``src/freedreno/vulkan/tu_tracepoints.py``
diff -pruN 22.1.3-1/docs/vulkan/graphics-state.rst 22.2.0~rc1-1/docs/vulkan/graphics-state.rst
--- 22.1.3-1/docs/vulkan/graphics-state.rst	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/docs/vulkan/graphics-state.rst	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,265 @@
+Graphics state
+==============
+
+The Mesa Vulkan runtime provides helpers for managing the numerous pieces
+of graphics state associated with a ``VkPipeline`` or set dynamically on a
+command buffer.  No such helpers are provided for compute or ray-tracing
+because they have little or no state besides the shaders themselves.
+
+
+Pipeline state
+--------------
+
+All (possibly dynamic) Vulkan graphics pipeline state is encapsulated into
+a single :cpp:struct:`vk_graphics_pipeline_state` structure which contains
+pointers to sub-structures for each of the different state categories.
+Unlike :cpp:type:`VkGraphicsPipelineCreateInfo`, the pointers in
+:cpp:struct:`vk_graphics_pipeline_state` are guaranteed to be either be
+NULL or point to valid and properly populated memory.
+
+When creating a pipeline, the
+:cpp:func:`vk_graphics_pipeline_state_fill()` function can be used to
+gather all of the state from the core structures as well as various `pNext`
+chains into a single state structure.  Whenever an extension struct is
+missing, a reasonable default value is provided whenever possible.
+
+
+:cpp:func:`vk_graphics_pipeline_state_fill()` automatically handles both
+the render pass and dynamic rendering.  For drivers which use
+:cpp:struct:`vk_render_pass`, the :cpp:struct:`vk_render_pass_state`
+structure will be populated as if for dynamic rendering, regardless of
+which path is used.  Drivers which use their own render pass structure
+should parse the render pass, if available, and pass a
+:cpp:struct:`vk_subpass_info` into
+:cpp:func:`vk_graphics_pipeline_state_fill()` with the relevant information
+from the specified subpass.  If a render pass is available,
+:cpp:struct:`vk_render_pass_state` will be populated with the
+:cpp:type:`VkRenderPass` handle and subpass index as well as the
+information from the :cpp:struct:`vk_render_pass_state`.  If dynamic
+rendering is used or the driver does not provide a
+:cpp:struct:`vk_subpass_info` structure, :cpp:struct:`vk_render_pass_state`
+structure will be populated for dynamic rendering, including color, depth,
+and stencil attachment formats.
+
+.. doxygenstruct:: vk_subpass_info
+   :members:
+
+The usual flow for creating a full graphics pipeline (not library) looks
+like this:
+
+.. code-block:: c
+
+   struct vk_graphics_pipeline_state state = { };
+   struct vk_graphics_pipeline_all_state all;
+   vk_graphics_pipeline_state_fill(&device->vk, &state, pCreateInfo,
+                                   NULL, &all, NULL, 0, NULL);
+
+   /* Emit stuff using the state in `state` */
+
+The :cpp:struct:`vk_graphics_pipeline_all_state` structure exists to allow
+the state to sit on the stack instead of requiring a heap allocation.  This
+is useful if you intend to use the state right away and don't need to store
+it.  For pipeline libraries, it's likely more useful to use the dynamically
+allocated version and store the dynamically allocated memory in the
+library pipeline.
+
+.. code-block:: c
+
+   /* Assuming we have a vk_graphics_pipeline_state in pipeline */
+   memset(&pipeline->state, 0, sizeof(pipeline->state));
+
+   for (uint32_t i = 0; i < lib_info->libraryCount; i++) {
+      VK_FROM_HANDLE(drv_graphics_pipeline_library, lib, lib_info->pLibraries[i]);
+      vk_graphics_pipeline_state_merge(&pipeline->state, &lib->state);
+   }
+
+   /* This assumes you have a void **state_mem in pipeline */
+   result = vk_graphics_pipeline_state_fill(&device->vk, &pipeline->state,
+                                            pCreateInfo, NULL, NULL, pAllocator,
+                                            VK_SYSTEM_ALLOCATION_SCOPE_OBJECT,
+                                            &pipeline->state_mem);
+   if (result != VK_SUCCESS)
+      return result;
+
+State from dependent libraries can be merged together using
+:cpp:func:`vk_graphics_pipeline_state_merge`.
+:cpp:func:`vk_graphics_pipeline_state_fill` will then only attempt to
+populate missing fields.  You can also merge dependent pipeline libraries
+together but store the final state on the stack for immediate consumption:
+
+.. code-block:: c
+
+   struct vk_graphics_pipeline_state state = { };
+
+   for (uint32_t i = 0; i < lib_info->libraryCount; i++) {
+      VK_FROM_HANDLE(drv_graphics_pipeline_library, lib, lib_info->pLibraries[i]);
+      vk_graphics_pipeline_state_merge(&state, &lib->state);
+   }
+
+   struct vk_graphics_pipeline_all_state all;
+   vk_graphics_pipeline_state_fill(&device->vk, &state, pCreateInfo,
+                                   NULL, &all, NULL, 0, NULL);
+
+.. doxygenfunction:: vk_graphics_pipeline_state_fill
+
+.. doxygenfunction:: vk_graphics_pipeline_state_merge
+
+
+Dynamic state
+-------------
+
+All dynamic states in Vulkan, regardless of which API version or extension
+introduced them, are represented by the
+:cpp:enum:`mesa_vk_dynamic_graphics_state` enum.  This corresponds to the
+:cpp:type:`VkDynamicState` enum in the Vulkan API only it's compact (has no
+holes due to extension namespacing) and a bit better organized.  Each
+enumerant is named with the name of the state group to which the dynamic
+state belongs as well as the name of the dynamic state itself.  The fact
+that it's compact allows us to use to index bitsets.
+
+.. doxygenfunction:: vk_get_dynamic_graphics_states
+
+We also provide a :cpp:struct:`vk_dynamic_graphics_state` structure which
+contains all the dynamic graphics states, regardless of which API version
+or extension introduced them.  This structure can be populated from a
+:cpp:struct:`vk_graphics_pipeline_state` via
+:cpp:func:`vk_dynamic_graphics_state_init`.
+
+.. doxygenfunction:: vk_dynamic_graphics_state_init
+.. doxygenfunction:: vk_dynamic_graphics_state_copy
+
+There is also a :cpp:struct:`vk_dynamic_graphics_state` embedded in
+:cpp:struct:`vk_command_buffer`.  Should you choose to use them, we provide
+common implementations for all ``vkCmdSet*()`` functions.  Two additional
+functions are provided for the driver to call in ``CmdBindPipeline()`` and
+``CmdBindVertexBuffers2()``:
+
+.. doxygenfunction:: vk_cmd_set_dynamic_graphics_state
+.. doxygenfunction:: vk_cmd_set_vertex_binding_strides
+
+To use the dynamic state framework, you will need the following in your
+pipeline structure:
+
+.. code-block:: c
+
+   struct drv_graphics_pipeline {
+      ....
+      struct vk_vertex_input_state vi_state;
+      struct vk_sample_locations_state sl_state;
+      struct vk_dynamic_graphics_state dynamic;
+      ...
+   };
+
+Then, in your pipeline create function,
+
+.. code-block:: c
+
+   memset(&pipeline->dynamic, 0, sizeof(pipeline->dynamic));
+   pipeline->dynamic->vi = &pipeline->vi_state;
+   pipeline->dynamic->ms.sample_locations = &pipeline->sl_state;
+   vk_dynamic_graphics_state_init(&pipeline->dynamic, &state);
+
+In your implementation of ``vkCmdBindPipeline()``,
+
+.. code-block:: c
+
+   vk_cmd_set_dynamic_graphics_state(&cmd->vk, &pipeline->dynamic_state);
+
+And, finally, at ``vkCmdDraw*()`` time, the code to emit dynamic state into
+your hardware command buffer will look something like this:
+
+.. code-block:: c
+
+   static void
+   emit_dynamic_state(struct drv_cmd_buffer *cmd)
+   {
+      struct vk_dynamic_graphics_state *dyn = &cmd->vk.dynamic_graphics_state;
+
+      if (!vk_dynamic_graphics_state_any_dirty(dyn))
+         return;
+
+      if (BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_VP_VIEWPORTS) |
+          BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_VP_VIEWPORT_COUNT)) {
+         /* Re-emit viewports */
+      }
+
+      if (BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_VP_SCISSORS) |
+          BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_VP_SCISSOR_COUNT)) {
+         /* Re-emit scissors */
+      }
+
+      /* etc... */
+
+      vk_dynamic_graphics_state_clear_dirty(dyn);
+   }
+
+Any states used by the currently bound pipeline and attachments are always
+valid in ``vk_command_buffer::dynamic_graphics_state`` so you can always
+use a state even if it isn't dirty on this particular draw.
+
+.. doxygenfunction:: vk_dynamic_graphics_state_dirty_all
+.. doxygenfunction:: vk_dynamic_graphics_state_clear_dirty
+.. doxygenfunction:: vk_dynamic_graphics_state_any_dirty
+
+
+Depth stencil state optimization
+--------------------------------
+
+.. doxygenfunction:: vk_optimize_depth_stencil_state
+
+
+Reference
+---------
+
+.. doxygenstruct:: vk_graphics_pipeline_state
+   :members:
+
+.. doxygenstruct:: vk_vertex_binding_state
+   :members:
+
+.. doxygenstruct:: vk_vertex_attribute_state
+   :members:
+
+.. doxygenstruct:: vk_vertex_input_state
+   :members:
+
+.. doxygenstruct:: vk_input_assembly_state
+   :members:
+
+.. doxygenstruct:: vk_tessellation_state
+   :members:
+
+.. doxygenstruct:: vk_viewport_state
+   :members:
+
+.. doxygenstruct:: vk_discard_rectangles_state
+   :members:
+
+.. doxygenstruct:: vk_rasterization_state
+   :members:
+
+.. doxygenstruct:: vk_fragment_shading_rate_state
+   :members:
+
+.. doxygenstruct:: vk_sample_locations_state
+   :members:
+
+.. doxygenstruct:: vk_multisample_state
+   :members:
+
+.. doxygenstruct:: vk_stencil_test_face_state
+   :members:
+
+.. doxygenstruct:: vk_depth_stencil_state
+   :members:
+
+.. doxygenstruct:: vk_color_blend_state
+   :members:
+
+.. doxygenstruct:: vk_render_pass_state
+   :members:
+
+.. doxygenenum:: mesa_vk_dynamic_graphics_state
+
+.. doxygenstruct:: vk_dynamic_graphics_state
+   :members:
diff -pruN 22.1.3-1/docs/vulkan/index.rst 22.2.0~rc1-1/docs/vulkan/index.rst
--- 22.1.3-1/docs/vulkan/index.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/docs/vulkan/index.rst	2022-08-03 18:11:03.000000000 +0000
@@ -11,4 +11,5 @@ hardware-agnostic bits in common code.
 
    base-objs
    dispatch
+   graphics-state
    renderpass
diff -pruN 22.1.3-1/.editorconfig 22.2.0~rc1-1/.editorconfig
--- 22.1.3-1/.editorconfig	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.editorconfig	2022-08-03 18:11:03.000000000 +0000
@@ -34,3 +34,8 @@ trim_trailing_whitespace = false
 [{meson.build,meson_options.txt}]
 indent_style = space
 indent_size = 2
+
+
+[*.ps1]
+indent_style = space
+indent_size = 2
diff -pruN 22.1.3-1/.github/workflows/ci.yml 22.2.0~rc1-1/.github/workflows/ci.yml
--- 22.1.3-1/.github/workflows/ci.yml	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.github/workflows/ci.yml	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,39 @@
+name: CI
+on: push
+
+permissions:
+  contents: read
+
+jobs:
+  CI:
+    runs-on: macos-latest
+    steps:
+    - name: Checkout
+      uses: actions/checkout@v3
+    - name: Install Dependencies
+      run: |
+        cat > Brewfile <<EOL
+        brew "bison"
+        brew "expat"
+        brew "gettext"
+        brew "libx11"
+        brew "libxcb"
+        brew "libxdamage"
+        brew "libxext"
+        brew "meson"
+        brew "pkg-config"
+        brew "python@3.10"
+        EOL
+
+        brew update
+        brew bundle --verbose
+    - name: Install Mako
+      run: pip3 install --user mako
+    - name: Configure
+      run: meson . build -Dbuild-tests=true -Dosmesa=true
+    - name: Build
+      run: meson compile -C build
+    - name: Test
+      run: meson test -C build --print-errorlogs
+    - name: Install
+      run: meson install -C build
diff -pruN 22.1.3-1/.gitignore 22.2.0~rc1-1/.gitignore
--- 22.1.3-1/.gitignore	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitignore	2022-08-03 18:11:03.000000000 +0000
@@ -1,4 +1,4 @@
 *.pyc
 *.pyo
 *.out
-build
+/build
diff -pruN 22.1.3-1/.gitlab/issue_templates/Bug Report - AMD Radeon Vulkan.md 22.2.0~rc1-1/.gitlab/issue_templates/Bug Report - AMD Radeon Vulkan.md
--- 22.1.3-1/.gitlab/issue_templates/Bug Report - AMD Radeon Vulkan.md	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab/issue_templates/Bug Report - AMD Radeon Vulkan.md	2022-08-03 18:11:03.000000000 +0000
@@ -2,7 +2,8 @@
 - Check if a new version of Mesa is available which might have fixed the problem.
 - If you can, check if the latest development version (git main) works better.
 - Check if your bug has already been reported here.
-- For any logs, backtraces, etc - use [code blocks](https://docs.gitlab.com/ee/user/markdown.html#code-spans-and-blocks)
+- For any logs, backtraces, etc - use [code blocks](https://docs.gitlab.com/ee/user/markdown.html#code-spans-and-blocks), GitLab removes line breaks without this.
+   - Do not paste long logs directly into the description. Use https://gitlab.freedesktop.org/-/snippets/new, attachments, or a pastebin with a long expiration instead.
 - As examples of good bug reports you may review one of these - #2598, #2615, #2608
 
 
@@ -10,6 +11,9 @@ Otherwise, fill the requested informatio
 And please remove anything that doesn't apply to keep things readable :)
 
 
+The title should effectively distinguish this bug report from others and be specific to issue you encounter. When writing the title of the bug report, include a short description of the issue, the hardware/driver(s) affected and application(s) affected.
+
+
 ### Description
 
 Describe what you are doing, what you expect and what you're
diff -pruN 22.1.3-1/.gitlab/issue_templates/Bug Report.md 22.2.0~rc1-1/.gitlab/issue_templates/Bug Report.md
--- 22.1.3-1/.gitlab/issue_templates/Bug Report.md	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab/issue_templates/Bug Report.md	2022-08-03 18:11:03.000000000 +0000
@@ -2,7 +2,8 @@
 - Check if a new version of Mesa is available which might have fixed the problem.
 - If you can, check if the latest development version (git main) works better.
 - Check if your bug has already been reported here.
-- For any logs, backtraces, etc - use [code blocks](https://docs.gitlab.com/ee/user/markdown.html#code-spans-and-blocks)
+- For any logs, backtraces, etc - use [code blocks](https://docs.gitlab.com/ee/user/markdown.html#code-spans-and-blocks), GitLab removes line breaks without this.
+   - Do not paste long logs directly into the description. Use https://gitlab.freedesktop.org/-/snippets/new, attachments, or a pastebin with a long expiration instead.
 - As examples of good bug reports you may review one of these - #2598, #2615, #2608
 
 
@@ -10,6 +11,9 @@ Otherwise, please fill the requested inf
 And please remove anything that doesn't apply to keep things readable :)
 
 
+The title should effectively distinguish this bug report from others and be specific to issue you encounter. When writing the title of the bug report, include a short description of the issue, the hardware/driver(s) affected and application(s) affected.
+
+
 ### System information
 
 Please post `inxi -GSC -xx` output ([fenced with triple backticks](https://docs.gitlab.com/ee/user/markdown.html#code-spans-and-blocks)) OR fill information below manually
diff -pruN 22.1.3-1/.gitlab-ci/b2c/b2c.yml.jinja2.jinja2 22.2.0~rc1-1/.gitlab-ci/b2c/b2c.yml.jinja2.jinja2
--- 22.1.3-1/.gitlab-ci/b2c/b2c.yml.jinja2.jinja2	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/b2c/b2c.yml.jinja2.jinja2	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,67 @@
+version: 1
+
+# Rules to match for a machine to qualify
+target:
+{% if tags %}
+{% set b2ctags = tags.split(',') %}
+  tags:
+{% for tag in b2ctags %}
+    - '{{ tag | trim }}'
+{% endfor %}
+{% endif %}
+
+timeouts:
+  first_console_activity:  # This limits the time it can take to receive the first console log
+    minutes: {{ timeout_first_minutes }}
+    retries: {{ timeout_first_retries }}
+  console_activity:        # Reset every time we receive a message from the logs
+    minutes: {{ timeout_minutes }}
+    retries: {{ timeout_retries }}
+  boot_cycle:
+    minutes: {{ timeout_boot_minutes }}
+    retries: {{ timeout_boot_retries }}
+  overall:                 # Maximum time the job can take, not overrideable by the "continue" deployment
+    minutes: {{ timeout_overall_minutes }}
+    retries: 0
+    # no retries possible here
+
+console_patterns:
+    session_end:
+        regex: >-
+          {{ session_end_regex }}
+    session_reboot:
+        regex: >-
+          {{ session_reboot_regex }}
+    job_success:
+        regex: >-
+          {{ job_success_regex }}
+    job_warn:
+        regex: >-
+          {{ job_warn_regex }}
+
+# Environment to deploy
+deployment:
+  # Initial boot
+  start:
+    kernel:
+      url: '{{ kernel_url }}'
+      cmdline: >
+        SALAD.machine_id={{ '{{' }} machine_id }}
+        console={{ '{{' }} local_tty_device }},115200 earlyprintk=vga,keep
+        loglevel={{ log_level }} no_hash_pointers
+        b2c.service="--privileged --tls-verify=false --pid=host docker://{{ '{{' }} fdo_proxy_registry }}/mupuf/valve-infra/telegraf-container:latest" b2c.hostname=dut-{{ '{{' }} machine.full_name }}
+        b2c.container="-ti --tls-verify=false docker://{{ '{{' }} fdo_proxy_registry }}/mupuf/valve-infra/machine_registration:latest check"
+        b2c.ntp_peer=10.42.0.1 b2c.pipefail b2c.cache_device=auto b2c.poweroff_delay={{ poweroff_delay }}
+        b2c.minio="gateway,{{ '{{' }} minio_url }},{{ '{{' }} job_bucket_access_key }},{{ '{{' }} job_bucket_secret_key }}"
+        b2c.volume="{{ '{{' }} job_bucket }}-results,mirror=gateway/{{ '{{' }} job_bucket }},pull_on=pipeline_start,push_on=changes,overwrite{% for excl in job_volume_exclusions %},exclude={{ excl }}{% endfor %},expiration=pipeline_end,preserve"
+{% for volume in volumes %}
+        b2c.volume={{ volume }}
+{% endfor %}
+        b2c.container="-v {{ '{{' }} job_bucket }}-results:{{ working_dir }} -w {{ working_dir }} {% for mount_volume in mount_volumes %} -v {{ mount_volume }}{% endfor %} --tls-verify=false docker://{{ local_container }} {{ container_cmd }}"
+        {% if cmdline_extras is defined %}
+        {{ cmdline_extras }}
+        {% endif %}
+
+    initramfs:
+      url: '{{ initramfs_url }}'
+
diff -pruN 22.1.3-1/.gitlab-ci/b2c/generate_b2c.py 22.2.0~rc1-1/.gitlab-ci/b2c/generate_b2c.py
--- 22.1.3-1/.gitlab-ci/b2c/generate_b2c.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/b2c/generate_b2c.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,101 @@
+#!/usr/bin/env python3
+
+# Copyright © 2022 Valve Corporation
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+from jinja2 import Environment, FileSystemLoader
+from argparse import ArgumentParser
+from os import environ, path
+
+
+parser = ArgumentParser()
+parser.add_argument('--ci-job-id')
+parser.add_argument('--container-cmd')
+parser.add_argument('--initramfs-url')
+parser.add_argument('--job-success-regex')
+parser.add_argument('--job-warn-regex')
+parser.add_argument('--kernel-url')
+parser.add_argument('--log-level', type=int)
+parser.add_argument('--poweroff-delay', type=int)
+parser.add_argument('--session-end-regex')
+parser.add_argument('--session-reboot-regex')
+parser.add_argument('--tags', nargs='?', default='')
+parser.add_argument('--template', default='b2c.yml.jinja2.jinja2')
+parser.add_argument('--timeout-boot-minutes', type=int)
+parser.add_argument('--timeout-boot-retries', type=int)
+parser.add_argument('--timeout-first-minutes', type=int)
+parser.add_argument('--timeout-first-retries', type=int)
+parser.add_argument('--timeout-minutes', type=int)
+parser.add_argument('--timeout-overall-minutes', type=int)
+parser.add_argument('--timeout-retries', type=int)
+parser.add_argument('--job-volume-exclusions', nargs='?', default='')
+parser.add_argument('--volume', action='append')
+parser.add_argument('--mount-volume', action='append')
+parser.add_argument('--local-container', default=environ.get('B2C_LOCAL_CONTAINER', 'alpine:latest'))
+parser.add_argument('--working-dir')
+args = parser.parse_args()
+
+env = Environment(loader=FileSystemLoader(path.dirname(args.template)),
+                  trim_blocks=True, lstrip_blocks=True)
+
+template = env.get_template(path.basename(args.template))
+
+values = {}
+values['ci_job_id'] = args.ci_job_id
+values['container_cmd'] = args.container_cmd
+values['initramfs_url'] = args.initramfs_url
+values['job_success_regex'] = args.job_success_regex
+values['job_warn_regex'] = args.job_warn_regex
+values['kernel_url'] = args.kernel_url
+values['log_level'] = args.log_level
+values['poweroff_delay'] = args.poweroff_delay
+values['session_end_regex'] = args.session_end_regex
+values['session_reboot_regex'] = args.session_reboot_regex
+values['tags'] = args.tags
+values['template'] = args.template
+values['timeout_boot_minutes'] = args.timeout_boot_minutes
+values['timeout_boot_retries'] = args.timeout_boot_retries
+values['timeout_first_minutes'] = args.timeout_first_minutes
+values['timeout_first_retries'] = args.timeout_first_retries
+values['timeout_minutes'] = args.timeout_minutes
+values['timeout_overall_minutes'] = args.timeout_overall_minutes
+values['timeout_retries'] = args.timeout_retries
+if len(args.job_volume_exclusions) > 0:
+    exclusions = args.job_volume_exclusions.split(",")
+    values['job_volume_exclusions'] = [excl for excl in exclusions if len(excl) > 0]
+if args.volume is not None:
+    values['volumes'] = args.volume
+if args.mount_volume is not None:
+    values['mount_volumes'] = args.mount_volume
+values['working_dir'] = args.working_dir
+
+assert(len(args.local_container) > 0)
+values['local_container'] = args.local_container.replace(
+    # Use the gateway's pull-through registry cache to reduce load on fd.o.
+    'registry.freedesktop.org', '{{ fdo_proxy_registry }}'
+)
+
+if 'B2C_KERNEL_CMDLINE_EXTRAS' in environ:
+    values['cmdline_extras'] = environ['B2C_KERNEL_CMDLINE_EXTRAS']
+
+f = open(path.splitext(path.basename(args.template))[0], "w")
+f.write(template.render(values))
+f.close()
diff -pruN 22.1.3-1/.gitlab-ci/bare-metal/cros_servo_run.py 22.2.0~rc1-1/.gitlab-ci/bare-metal/cros_servo_run.py
--- 22.1.3-1/.gitlab-ci/bare-metal/cros_servo_run.py	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/bare-metal/cros_servo_run.py	2022-08-03 18:11:03.000000000 +0000
@@ -31,52 +31,18 @@ import threading
 
 
 class CrosServoRun:
-    def __init__(self, cpu, ec):
-        # Merged FIFO for the two serial buffers, fed by threads.
-        self.serial_queue = queue.Queue()
-        self.sentinel = object()
-        self.threads_done = 0
-
-        self.ec_ser = SerialBuffer(
-            ec, "results/serial-ec.txt", "R SERIAL-EC> ")
+    def __init__(self, cpu, ec, test_timeout):
         self.cpu_ser = SerialBuffer(
             cpu, "results/serial.txt", "R SERIAL-CPU> ")
-
-        self.iter_feed_ec = threading.Thread(
-            target=self.iter_feed_queue, daemon=True, args=(self.ec_ser.lines(),))
-        self.iter_feed_ec.start()
-
-        self.iter_feed_cpu = threading.Thread(
-            target=self.iter_feed_queue, daemon=True, args=(self.cpu_ser.lines(),))
-        self.iter_feed_cpu.start()
+        # Merge the EC serial into the cpu_ser's line stream so that we can
+        # effectively poll on both at the same time and not have to worry about
+        self.ec_ser = SerialBuffer(
+            ec, "results/serial-ec.txt", "R SERIAL-EC> ", line_queue=self.cpu_ser.line_queue)
+        self.test_timeout = test_timeout
 
     def close(self):
         self.ec_ser.close()
         self.cpu_ser.close()
-        self.iter_feed_ec.join()
-        self.iter_feed_cpu.join()
-
-    # Feed lines from our serial queues into the merged queue, marking when our
-    # input is done.
-    def iter_feed_queue(self, it):
-        for i in it:
-            self.serial_queue.put(i)
-        self.serial_queue.put(self.sentinel)
-
-    # Return the next line from the queue, counting how many threads have
-    # terminated and joining when done
-    def get_serial_queue_line(self):
-        line = self.serial_queue.get()
-        if line == self.sentinel:
-            self.threads_done = self.threads_done + 1
-            if self.threads_done == 2:
-                self.iter_feed_cpu.join()
-                self.iter_feed_ec.join()
-        return line
-
-    # Returns an iterator for getting the next line.
-    def serial_queue_lines(self):
-        return iter(self.get_serial_queue_line, self.sentinel)
 
     def ec_write(self, s):
         print("W SERIAL-EC> %s" % s)
@@ -96,23 +62,36 @@ class CrosServoRun:
         self.ec_write("\n")
         self.ec_write("reboot\n")
 
+        bootloader_done = False
         # This is emitted right when the bootloader pauses to check for input.
         # Emit a ^N character to request network boot, because we don't have a
         # direct-to-netboot firmware on cheza.
-        for line in self.serial_queue_lines():
+        for line in self.cpu_ser.lines(timeout=120, phase="bootloader"):
             if re.search("load_archive: loading locale_en.bin", line):
                 self.cpu_write("\016")
+                bootloader_done = True
+                break
+
+            # If the board has a netboot firmware and we made it to booting the
+            # kernel, proceed to processing of the test run.
+            if re.search("Booting Linux", line):
+                bootloader_done = True
                 break
 
             # The Cheza boards have issues with failing to bring up power to
             # the system sometimes, possibly dependent on ambient temperature
             # in the farm.
             if re.search("POWER_GOOD not seen in time", line):
-                self.print_error("Detected intermittent poweron failure, restarting run...")
+                self.print_error(
+                    "Detected intermittent poweron failure, restarting run...")
                 return 2
 
+        if not bootloader_done:
+            print("Failed to make it through bootloader, restarting run...")
+            return 2
+
         tftp_failures = 0
-        for line in self.serial_queue_lines():
+        for line in self.cpu_ser.lines(timeout=self.test_timeout, phase="test"):
             if re.search("---. end Kernel panic", line):
                 return 1
 
@@ -123,13 +102,15 @@ class CrosServoRun:
             if re.search("R8152: Bulk read error 0xffffffbf", line):
                 tftp_failures += 1
                 if tftp_failures >= 100:
-                    self.print_error("Detected intermittent tftp failure, restarting run...")
+                    self.print_error(
+                        "Detected intermittent tftp failure, restarting run...")
                     return 2
 
             # There are very infrequent bus errors during power management transitions
             # on cheza, which we don't expect to be the case on future boards.
             if re.search("Kernel panic - not syncing: Asynchronous SError Interrupt", line):
-                self.print_error("Detected cheza power management bus error, restarting run...")
+                self.print_error(
+                    "Detected cheza power management bus error, restarting run...")
                 return 2
 
             # If the network device dies, it's probably not graphics's fault, just try again.
@@ -148,7 +129,8 @@ class CrosServoRun:
             # Given that it seems to trigger randomly near a GPU fault and then
             # break many tests after that, just restart the whole run.
             if re.search("a6xx_hfi_send_msg.*Unexpected message id .* on the response queue", line):
-                self.print_error("Detected cheza power management bus error, restarting run...")
+                self.print_error(
+                    "Detected cheza power management bus error, restarting run...")
                 return 2
 
             if re.search("coreboot.*bootblock starting", line):
@@ -167,8 +149,9 @@ class CrosServoRun:
                 else:
                     return 1
 
-        self.print_error("Reached the end of the CPU serial log without finding a result")
-        return 1
+        self.print_error(
+            "Reached the end of the CPU serial log without finding a result")
+        return 2
 
 
 def main():
@@ -177,9 +160,11 @@ def main():
                         help='CPU Serial device', required=True)
     parser.add_argument(
         '--ec', type=str, help='EC Serial device', required=True)
+    parser.add_argument(
+        '--test-timeout', type=int, help='Test phase timeout (minutes)', required=True)
     args = parser.parse_args()
 
-    servo = CrosServoRun(args.cpu, args.ec)
+    servo = CrosServoRun(args.cpu, args.ec, args.test_timeout * 60)
 
     while True:
         retval = servo.run()
diff -pruN 22.1.3-1/.gitlab-ci/bare-metal/cros-servo.sh 22.2.0~rc1-1/.gitlab-ci/bare-metal/cros-servo.sh
--- 22.1.3-1/.gitlab-ci/bare-metal/cros-servo.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/bare-metal/cros-servo.sh	2022-08-03 18:11:03.000000000 +0000
@@ -90,7 +90,8 @@ echo "$BM_CMDLINE" > /tftp/cmdline
 set +e
 python3 $BM/cros_servo_run.py \
         --cpu $BM_SERIAL \
-        --ec $BM_SERIAL_EC
+        --ec $BM_SERIAL_EC \
+        --test-timeout ${TEST_PHASE_TIMEOUT:-20}
 ret=$?
 set -e
 
diff -pruN 22.1.3-1/.gitlab-ci/bare-metal/fastboot_run.py 22.2.0~rc1-1/.gitlab-ci/bare-metal/fastboot_run.py
--- 22.1.3-1/.gitlab-ci/bare-metal/fastboot_run.py	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/bare-metal/fastboot_run.py	2022-08-03 18:11:03.000000000 +0000
@@ -22,19 +22,21 @@
 # IN THE SOFTWARE.
 
 import argparse
-import os
+import subprocess
 import re
 from serial_buffer import SerialBuffer
 import sys
 import threading
 
+
 class FastbootRun:
-    def __init__(self, args):
+    def __init__(self, args, test_timeout):
         self.powerup = args.powerup
-        # We would like something like a 1 minute timeout, but the piglit traces
-        # jobs stall out for long periods of time.
-        self.ser = SerialBuffer(args.dev, "results/serial-output.txt", "R SERIAL> ", timeout=600)
-        self.fastboot="fastboot boot -s {ser} artifacts/fastboot.img".format(ser=args.fbserial)
+        self.ser = SerialBuffer(
+            args.dev, "results/serial-output.txt", "R SERIAL> ")
+        self.fastboot = "fastboot boot -s {ser} artifacts/fastboot.img".format(
+            ser=args.fbserial)
+        self.test_timeout = test_timeout
 
     def close(self):
         self.ser.close()
@@ -44,34 +46,40 @@ class FastbootRun:
         NO_COLOR = '\033[0m'
         print(RED + message + NO_COLOR)
 
-    def logged_system(self, cmd):
+    def logged_system(self, cmd, timeout=60):
         print("Running '{}'".format(cmd))
-        return os.system(cmd)
+        try:
+            return subprocess.call(cmd, shell=True, timeout=timeout)
+        except subprocess.TimeoutExpired:
+            self.print_error("timeout, restarting run...")
+            return 2
 
     def run(self):
-        if self.logged_system(self.powerup) != 0:
-            return 1
+        if ret := self.logged_system(self.powerup):
+            return ret
 
         fastboot_ready = False
-        for line in self.ser.lines():
+        for line in self.ser.lines(timeout=2 * 60, phase="bootloader"):
             if re.search("fastboot: processing commands", line) or \
-                re.search("Listening for fastboot command on", line):
+                    re.search("Listening for fastboot command on", line):
                 fastboot_ready = True
                 break
 
             if re.search("data abort", line):
-                self.print_error("Detected crash during boot, restarting run...")
+                self.print_error(
+                    "Detected crash during boot, restarting run...")
                 return 2
 
         if not fastboot_ready:
-            self.print_error("Failed to get to fastboot prompt, restarting run...")
+            self.print_error(
+                "Failed to get to fastboot prompt, restarting run...")
             return 2
 
-        if self.logged_system(self.fastboot) != 0:
-            return 1
+        if ret := self.logged_system(self.fastboot):
+            return ret
 
         print_more_lines = -1
-        for line in self.ser.lines():
+        for line in self.ser.lines(timeout=self.test_timeout, phase="test"):
             if print_more_lines == 0:
                 return 2
             if print_more_lines > 0:
@@ -83,7 +91,8 @@ class FastbootRun:
             # The db820c boards intermittently reboot.  Just restart the run
             # when if we see a reboot after we got past fastboot.
             if re.search("PON REASON", line):
-                self.print_error("Detected spontaneous reboot, restarting run...")
+                self.print_error(
+                    "Detected spontaneous reboot, restarting run...")
                 return 2
 
             # db820c sometimes wedges around iommu fault recovery
@@ -117,18 +126,26 @@ class FastbootRun:
                 else:
                     return 1
 
-        self.print_error("Reached the end of the CPU serial log without finding a result, restarting run...")
+        self.print_error(
+            "Reached the end of the CPU serial log without finding a result, restarting run...")
         return 2
 
+
 def main():
     parser = argparse.ArgumentParser()
-    parser.add_argument('--dev', type=str, help='Serial device (otherwise reading from serial-output.txt)')
-    parser.add_argument('--powerup', type=str, help='shell command for rebooting', required=True)
-    parser.add_argument('--powerdown', type=str, help='shell command for powering off', required=True)
-    parser.add_argument('--fbserial', type=str, help='fastboot serial number of the board', required=True)
+    parser.add_argument(
+        '--dev', type=str, help='Serial device (otherwise reading from serial-output.txt)')
+    parser.add_argument('--powerup', type=str,
+                        help='shell command for rebooting', required=True)
+    parser.add_argument('--powerdown', type=str,
+                        help='shell command for powering off', required=True)
+    parser.add_argument('--fbserial', type=str,
+                        help='fastboot serial number of the board', required=True)
+    parser.add_argument('--test-timeout', type=int,
+                        help='Test phase timeout (minutes)', required=True)
     args = parser.parse_args()
 
-    fastboot = FastbootRun(args)
+    fastboot = FastbootRun(args, args.test_timeout * 60)
 
     while True:
         retval = fastboot.run()
@@ -136,11 +153,12 @@ def main():
         if retval != 2:
             break
 
-        fastboot = FastbootRun(args)
+        fastboot = FastbootRun(args, args.test_timeout * 60)
 
     fastboot.logged_system(args.powerdown)
 
     sys.exit(retval)
 
+
 if __name__ == '__main__':
     main()
diff -pruN 22.1.3-1/.gitlab-ci/bare-metal/fastboot.sh 22.2.0~rc1-1/.gitlab-ci/bare-metal/fastboot.sh
--- 22.1.3-1/.gitlab-ci/bare-metal/fastboot.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/bare-metal/fastboot.sh	2022-08-03 18:11:03.000000000 +0000
@@ -133,6 +133,7 @@ fi
 set +e
 $BM/fastboot_run.py \
   --dev="$BM_SERIAL" \
+  --test-timeout ${TEST_PHASE_TIMEOUT:-20} \
   --fbserial="$BM_FASTBOOT_SERIAL" \
   --powerup="$BM_POWERUP" \
   --powerdown="$BM_POWERDOWN"
diff -pruN 22.1.3-1/.gitlab-ci/bare-metal/google-power-relay.py 22.2.0~rc1-1/.gitlab-ci/bare-metal/google-power-relay.py
--- 22.1.3-1/.gitlab-ci/bare-metal/google-power-relay.py	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/bare-metal/google-power-relay.py	2022-08-03 18:11:03.000000000 +0000
@@ -8,8 +8,8 @@ relay = sys.argv[2]
 
 # our relays are "off" means "board is powered".
 mode_swap = {
-     "on" : "off",
-     "off" : "on",
+    "on": "off",
+    "off": "on",
 }
 mode = mode_swap[mode]
 
diff -pruN 22.1.3-1/.gitlab-ci/bare-metal/poe-powered.sh 22.2.0~rc1-1/.gitlab-ci/bare-metal/poe-powered.sh
--- 22.1.3-1/.gitlab-ci/bare-metal/poe-powered.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/bare-metal/poe-powered.sh	2022-08-03 18:11:03.000000000 +0000
@@ -131,7 +131,7 @@ while [ $((ATTEMPTS--)) -gt 0 ]; do
           --dev="$BM_SERIAL" \
           --powerup="$BM_POWERUP" \
           --powerdown="$BM_POWERDOWN" \
-          --timeout="${BM_POE_TIMEOUT:-60}"
+          --test-timeout ${TEST_PHASE_TIMEOUT:-20}
   ret=$?
 
   if [ $ret -eq 2 ]; then
diff -pruN 22.1.3-1/.gitlab-ci/bare-metal/poe_run.py 22.2.0~rc1-1/.gitlab-ci/bare-metal/poe_run.py
--- 22.1.3-1/.gitlab-ci/bare-metal/poe_run.py	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/bare-metal/poe_run.py	2022-08-03 18:11:03.000000000 +0000
@@ -28,11 +28,14 @@ from serial_buffer import SerialBuffer
 import sys
 import threading
 
+
 class PoERun:
-    def __init__(self, args):
+    def __init__(self, args, test_timeout):
         self.powerup = args.powerup
         self.powerdown = args.powerdown
-        self.ser = SerialBuffer(args.dev, "results/serial-output.txt", "", args.timeout)
+        self.ser = SerialBuffer(
+            args.dev, "results/serial-output.txt", "")
+        self.test_timeout = test_timeout
 
     def print_error(self, message):
         RED = '\033[0;31m'
@@ -48,16 +51,17 @@ class PoERun:
             return 1
 
         boot_detected = False
-        for line in self.ser.lines():
+        for line in self.ser.lines(timeout=5 * 60, phase="bootloader"):
             if re.search("Booting Linux", line):
                 boot_detected = True
                 break
 
         if not boot_detected:
-            self.print_error("Something wrong; couldn't detect the boot start up sequence")
+            self.print_error(
+                "Something wrong; couldn't detect the boot start up sequence")
             return 2
 
-        for line in self.ser.lines():
+        for line in self.ser.lines(timeout=self.test_timeout, phase="test"):
             if re.search("---. end Kernel panic", line):
                 return 1
 
@@ -77,24 +81,30 @@ class PoERun:
                 else:
                     return 1
 
-        self.print_error("Reached the end of the CPU serial log without finding a result")
+        self.print_error(
+            "Reached the end of the CPU serial log without finding a result")
         return 2
 
+
 def main():
     parser = argparse.ArgumentParser()
-    parser.add_argument('--dev', type=str, help='Serial device to monitor', required=True)
-    parser.add_argument('--powerup', type=str, help='shell command for rebooting', required=True)
-    parser.add_argument('--powerdown', type=str, help='shell command for powering off', required=True)
-    parser.add_argument('--timeout', type=int, default=60,
-                        help='time in seconds to wait for activity', required=False)
+    parser.add_argument('--dev', type=str,
+                        help='Serial device to monitor', required=True)
+    parser.add_argument('--powerup', type=str,
+                        help='shell command for rebooting', required=True)
+    parser.add_argument('--powerdown', type=str,
+                        help='shell command for powering off', required=True)
+    parser.add_argument(
+        '--test-timeout', type=int, help='Test phase timeout (minutes)', required=True)
     args = parser.parse_args()
 
-    poe = PoERun(args)
+    poe = PoERun(args, args.test_timeout * 60)
     retval = poe.run()
 
     poe.logged_system(args.powerdown)
 
     sys.exit(retval)
 
+
 if __name__ == '__main__':
     main()
diff -pruN 22.1.3-1/.gitlab-ci/bare-metal/serial_buffer.py 22.2.0~rc1-1/.gitlab-ci/bare-metal/serial_buffer.py
--- 22.1.3-1/.gitlab-ci/bare-metal/serial_buffer.py	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/bare-metal/serial_buffer.py	2022-08-03 18:11:03.000000000 +0000
@@ -28,8 +28,9 @@ import serial
 import threading
 import time
 
+
 class SerialBuffer:
-    def __init__(self, dev, filename, prefix, timeout = None):
+    def __init__(self, dev, filename, prefix, timeout=None, line_queue=None):
         self.filename = filename
         self.dev = dev
 
@@ -41,7 +42,13 @@ class SerialBuffer:
             self.serial = None
 
         self.byte_queue = queue.Queue()
-        self.line_queue = queue.Queue()
+        # allow multiple SerialBuffers to share a line queue so you can merge
+        # servo's CPU and EC streams into one thing to watch the boot/test
+        # progress on.
+        if line_queue:
+            self.line_queue = line_queue
+        else:
+            self.line_queue = queue.Queue()
         self.prefix = prefix
         self.timeout = timeout
         self.sentinel = object()
@@ -130,14 +137,30 @@ class SerialBuffer:
                     self.line_queue.put(line)
                     line = bytearray()
 
-    def get_line(self):
-        line = self.line_queue.get()
-        if line == self.sentinel:
-            self.lines_thread.join()
-        return line
+    def lines(self, timeout=None, phase=None):
+        start_time = time.monotonic()
+        while True:
+            read_timeout = None
+            if timeout:
+                read_timeout = timeout - (time.monotonic() - start_time)
+                if read_timeout <= 0:
+                    print("read timeout waiting for serial during {}".format(phase))
+                    self.close()
+                    break
+
+            try:
+                line = self.line_queue.get(timeout=read_timeout)
+            except queue.Empty:
+                print("read timeout waiting for serial during {}".format(phase))
+                self.close()
+                break
+
+            if line == self.sentinel:
+                print("End of serial output")
+                self.lines_thread.join()
+                break
 
-    def lines(self):
-        return iter(self.get_line, self.sentinel)
+            yield line
 
 
 def main():
diff -pruN 22.1.3-1/.gitlab-ci/bare-metal/telnet-buffer.py 22.2.0~rc1-1/.gitlab-ci/bare-metal/telnet-buffer.py
--- 22.1.3-1/.gitlab-ci/bare-metal/telnet-buffer.py	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/bare-metal/telnet-buffer.py	2022-08-03 18:11:03.000000000 +0000
@@ -28,8 +28,8 @@
 import sys
 import telnetlib
 
-host=sys.argv[1]
-port=sys.argv[2]
+host = sys.argv[1]
+port = sys.argv[2]
 
 tn = telnetlib.Telnet(host, port, 1000000)
 
diff -pruN 22.1.3-1/.gitlab-ci/bin/ci_run_n_monitor.py 22.2.0~rc1-1/.gitlab-ci/bin/ci_run_n_monitor.py
--- 22.1.3-1/.gitlab-ci/bin/ci_run_n_monitor.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/bin/ci_run_n_monitor.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,303 @@
+#!/usr/bin/env python3
+# Copyright © 2020 - 2022 Collabora Ltd.
+# Authors:
+#   Tomeu Vizoso <tomeu.vizoso@collabora.com>
+#   David Heidelberg <david.heidelberg@collabora.com>
+#
+# TODO GraphQL for dependencies
+# SPDX-License-Identifier: MIT
+
+"""
+Helper script to restrict running only required CI jobs
+and show the job(s) logs.
+"""
+
+from typing import Optional
+from functools import partial
+from concurrent.futures import ThreadPoolExecutor
+
+import os
+import re
+import time
+import argparse
+import sys
+import gitlab
+
+from colorama import Fore, Style
+
+REFRESH_WAIT_LOG = 10
+REFRESH_WAIT_JOBS = 6
+
+URL_START = "\033]8;;"
+URL_END = "\033]8;;\a"
+
+STATUS_COLORS = {
+    "created": "",
+    "running": Fore.BLUE,
+    "success": Fore.GREEN,
+    "failed": Fore.RED,
+    "canceled": Fore.MAGENTA,
+    "manual": "",
+    "pending": "",
+    "skipped": "",
+}
+
+# TODO: This hardcoded list should be replaced by querying the pipeline's
+# dependency graph to see which jobs the target jobs need
+DEPENDENCIES = [
+    "debian/x86_build-base",
+    "debian/x86_build",
+    "debian/x86_test-base",
+    "debian/x86_test-gl",
+    "debian/arm_build",
+    "debian/arm_test",
+    "kernel+rootfs_amd64",
+    "kernel+rootfs_arm64",
+    "kernel+rootfs_armhf",
+    "debian-testing",
+    "debian-arm64",
+]
+
+COMPLETED_STATUSES = ["success", "failed"]
+
+
+def get_gitlab_project(glab, name: str):
+    """Finds a specified gitlab project for given user"""
+    glab.auth()
+    username = glab.user.username
+    return glab.projects.get(f"{username}/mesa")
+
+
+def wait_for_pipeline(project, sha: str):
+    """await until pipeline appears in Gitlab"""
+    print("⏲ for the pipeline to appear..", end="")
+    while True:
+        pipelines = project.pipelines.list(sha=sha)
+        if pipelines:
+            print("", flush=True)
+            return pipelines[0]
+        print("", end=".", flush=True)
+        time.sleep(1)
+
+
+def print_job_status(job) -> None:
+    """It prints a nice, colored job status with a link to the job."""
+    if job.status == "canceled":
+        return
+
+    print(
+        STATUS_COLORS[job.status]
+        + "🞋 job "
+        + URL_START
+        + f"{job.web_url}\a{job.name}"
+        + URL_END
+        + f" :: {job.status}"
+        + Style.RESET_ALL
+    )
+
+
+def print_job_status_change(job) -> None:
+    """It reports job status changes."""
+    if job.status == "canceled":
+        return
+
+    print(
+        STATUS_COLORS[job.status]
+        + "🗘 job "
+        + URL_START
+        + f"{job.web_url}\a{job.name}"
+        + URL_END
+        + f" has new status: {job.status}"
+        + Style.RESET_ALL
+    )
+
+
+def pretty_wait(sec: int) -> None:
+    """shows progressbar in dots"""
+    for val in range(sec, 0, -1):
+        print(f"⏲  {val} seconds", end="\r")
+        time.sleep(1)
+
+
+def monitor_pipeline(
+    project, pipeline, target_job: Optional[str], dependencies, force_manual: bool
+) -> tuple[Optional[int], Optional[int]]:
+    """Monitors pipeline and delegate canceling jobs"""
+    statuses = {}
+    target_statuses = {}
+
+    if not dependencies:
+        dependencies = []
+    dependencies.extend(DEPENDENCIES)
+
+    if target_job:
+        target_jobs_regex = re.compile(target_job.strip())
+
+    while True:
+        to_cancel = []
+        for job in pipeline.jobs.list(all=True, sort="desc"):
+            # target jobs
+            if target_job and target_jobs_regex.match(job.name):
+                if force_manual and job.status == "manual":
+                    enable_job(project, job, True)
+
+                if (job.id not in target_statuses) or (
+                    job.status not in target_statuses[job.id]
+                ):
+                    print_job_status_change(job)
+                    target_statuses[job.id] = job.status
+                else:
+                    print_job_status(job)
+
+                continue
+
+            # all jobs
+            if (job.id not in statuses) or (job.status not in statuses[job.id]):
+                print_job_status_change(job)
+                statuses[job.id] = job.status
+
+            # dependencies and cancelling the rest
+            if job.name in dependencies:
+                if job.status == "manual":
+                    enable_job(project, job, False)
+
+            elif target_job and job.status not in [
+                "canceled",
+                "success",
+                "failed",
+                "skipped",
+            ]:
+                to_cancel.append(job)
+
+        if target_job:
+            cancel_jobs(project, to_cancel)
+
+        print("---------------------------------", flush=False)
+
+        if len(target_statuses) == 1 and {"running"}.intersection(
+            target_statuses.values()
+        ):
+            return next(iter(target_statuses)), None
+
+        if {"failed", "canceled"}.intersection(target_statuses.values()):
+            return None, 1
+
+        if {"success", "manual"}.issuperset(target_statuses.values()):
+            return None, 0
+
+        pretty_wait(REFRESH_WAIT_JOBS)
+
+
+def enable_job(project, job, target: bool) -> None:
+    """enable manual job"""
+    pjob = project.jobs.get(job.id, lazy=True)
+    pjob.play()
+    if target:
+        jtype = "🞋 "
+    else:
+        jtype = "(dependency)"
+    print(Fore.MAGENTA + f"{jtype} job {job.name} manually enabled" + Style.RESET_ALL)
+
+
+def cancel_job(project, job) -> None:
+    """Cancel GitLab job"""
+    pjob = project.jobs.get(job.id, lazy=True)
+    pjob.cancel()
+    print(f"♲ {job.name}")
+
+
+def cancel_jobs(project, to_cancel) -> None:
+    """Cancel unwanted GitLab jobs"""
+    if not to_cancel:
+        return
+
+    with ThreadPoolExecutor(max_workers=6) as exe:
+        part = partial(cancel_job, project)
+        exe.map(part, to_cancel)
+
+
+def print_log(project, job_id) -> None:
+    """Print job log into output"""
+    printed_lines = 0
+    while True:
+        job = project.jobs.get(job_id)
+
+        # GitLab's REST API doesn't offer pagination for logs, so we have to refetch it all
+        lines = job.trace().decode("unicode_escape").splitlines()
+        for line in lines[printed_lines:]:
+            print(line)
+        printed_lines = len(lines)
+
+        if job.status in COMPLETED_STATUSES:
+            print(Fore.GREEN + f"Job finished: {job.web_url}" + Style.RESET_ALL)
+            return
+        pretty_wait(REFRESH_WAIT_LOG)
+
+
+def parse_args() -> None:
+    """Parse args"""
+    parser = argparse.ArgumentParser(
+        description="Tool to trigger a subset of container jobs "
+        + "and monitor the progress of a test job",
+        epilog="Example: mesa-monitor.py --rev $(git rev-parse HEAD) "
+        + '--target ".*traces" ',
+    )
+    parser.add_argument("--target", metavar="target-job", help="Target job")
+    parser.add_argument("--deps", nargs="+", help="Job dependencies")
+    parser.add_argument(
+        "--rev", metavar="revision", help="repository git revision", required=True
+    )
+    parser.add_argument(
+        "--token",
+        metavar="token",
+        help="force GitLab token, otherwise it's read from ~/.config/gitlab-token",
+    )
+    parser.add_argument(
+        "--force-manual", action="store_true", help="Force jobs marked as manual"
+    )
+    return parser.parse_args()
+
+
+def read_token(token_arg: Optional[str]) -> str:
+    """pick token from args or file"""
+    if token_arg:
+        return token_arg
+    return (
+        open(os.path.expanduser("~/.config/gitlab-token"), encoding="utf-8")
+        .readline()
+        .rstrip()
+    )
+
+
+if __name__ == "__main__":
+    try:
+        t_start = time.perf_counter()
+
+        args = parse_args()
+
+        token = read_token(args.token)
+
+        gl = gitlab.Gitlab(url="https://gitlab.freedesktop.org", private_token=token)
+
+        cur_project = get_gitlab_project(gl, "mesa")
+
+        print(f"Revision: {args.rev}")
+        pipe = wait_for_pipeline(cur_project, args.rev)
+        print(f"Pipeline: {pipe.web_url}")
+        if args.target:
+            print("🞋 job: " + Fore.BLUE + args.target + Style.RESET_ALL)
+        print(f"Extra dependencies: {args.deps}")
+        target_job_id, ret = monitor_pipeline(
+            cur_project, pipe, args.target, args.deps, args.force_manual
+        )
+
+        if target_job_id:
+            print_log(cur_project, target_job_id)
+
+        t_end = time.perf_counter()
+        spend_minutes = (t_end - t_start) / 60
+        print(f"⏲ Duration of script execution: {spend_minutes:0.1f} minutes")
+
+        sys.exit(ret)
+    except KeyboardInterrupt:
+        sys.exit(1)
diff -pruN 22.1.3-1/.gitlab-ci/bin/requirements.txt 22.2.0~rc1-1/.gitlab-ci/bin/requirements.txt
--- 22.1.3-1/.gitlab-ci/bin/requirements.txt	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/bin/requirements.txt	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,2 @@
+colorama==0.4.5
+python-gitlab==3.5.0
diff -pruN 22.1.3-1/.gitlab-ci/build/gitlab-ci.yml 22.2.0~rc1-1/.gitlab-ci/build/gitlab-ci.yml
--- 22.1.3-1/.gitlab-ci/build/gitlab-ci.yml	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/build/gitlab-ci.yml	2022-08-03 18:11:03.000000000 +0000
@@ -1,6 +1,6 @@
 # Shared between windows and Linux
 .build-common:
-  extends: .ci-run-policy
+  extends: .build-rules
   # Cancel job if a newer commit is pushed to the same branch
   interruptible: true
   artifacts:
@@ -37,7 +37,7 @@
   tags:
     - windows
     - docker
-    - "1809"
+    - "2022"
     - mesa
   cache:
     key: ${CI_JOB_NAME}
@@ -54,6 +54,15 @@
   script:
     - .gitlab-ci/meson/build.sh
 
+.meson-build_mingw:
+  extends:
+    - .build-linux
+    - .use-debian/x86_build_mingw
+    - .use-wine
+  stage: build-x86_64
+  script:
+    - .gitlab-ci/meson/build.sh
+
 debian-testing:
   extends:
     - .meson-build
@@ -72,8 +81,10 @@ debian-testing:
     VULKAN_DRIVERS: "swrast,amd,intel"
     BUILDTYPE: "debugoptimized"
     EXTRA_OPTION: >
+      -D spirv-to-dxil=true
       -D valgrind=false
     MINIO_ARTIFACT_NAME: mesa-amd64
+    LLVM_VERSION: "13"
   script:
     - .gitlab-ci/lava/lava-pytest.sh
     - .gitlab-ci/meson/build.sh
@@ -156,6 +167,7 @@ debian-gallium:
     GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12,asahi,crocus"
     VULKAN_DRIVERS: swrast
     EXTRA_OPTION: >
+      -D spirv-to-dxil=true
       -D osmesa=true
       -D tools=drm-shim,etnaviv,freedreno,glsl,intel,intel-ui,nir,nouveau,xvmc,lima,panfrost,asahi
   script:
@@ -184,9 +196,10 @@ debian-release:
       -D gallium-opencl=disabled
       -D llvm=enabled
     GALLIUM_DRIVERS: "i915,iris,nouveau,kmsro,freedreno,r300,svga,swrast,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12,crocus"
-    VULKAN_DRIVERS: "amd,imagination-experimental"
+    VULKAN_DRIVERS: "amd,imagination-experimental,microsoft-experimental"
     BUILDTYPE: "release"
     EXTRA_OPTION: >
+      -D spirv-to-dxil=true
       -D osmesa=true
       -D tools=all
       -D intel-clc=enabled
@@ -202,7 +215,6 @@ fedora-release:
     BUILDTYPE: "release"
     C_ARGS: >
       -Wno-error=array-bounds
-      -Wno-error=maybe-uninitialized
       -Wno-error=stringop-overread
       -Wno-error=uninitialized
     CPP_ARGS: >
@@ -317,7 +329,7 @@ debian-android:
     - debian/arm_build
   variables:
     VULKAN_DRIVERS: freedreno,broadcom
-    GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,swrast,tegra,v3d,vc4"
+    GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,swrast,tegra,v3d,vc4,zink"
     BUILDTYPE: "debugoptimized"
   tags:
     - aarch64
@@ -400,8 +412,9 @@ debian-clang:
     DRI_LOADERS: >
       -D glvnd=true
     GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,radeonsi,tegra,d3d12,crocus,i915,asahi"
-    VULKAN_DRIVERS: intel,amd,freedreno,broadcom,virtio-experimental,swrast,panfrost,imagination-experimental
+    VULKAN_DRIVERS: intel,amd,freedreno,broadcom,virtio-experimental,swrast,panfrost,imagination-experimental,microsoft-experimental
     EXTRA_OPTIONS:
+      -D spirv-to-dxil=true
       -D imagination-srv=true
     CC: clang
     CXX: clang++
@@ -413,7 +426,7 @@ windows-vs2019:
     - .windows-build-rules
   stage: build-misc
   script:
-    - . .\.gitlab-ci\windows\mesa_build.ps1
+    - pwsh -ExecutionPolicy RemoteSigned .\.gitlab-ci\windows\mesa_build.ps1
   artifacts:
     paths:
       - _build/meson-logs/*.txt
@@ -466,7 +479,7 @@ debian-vulkan:
       -D c_args=-fno-sanitize-recover=all
       -D cpp_args=-fno-sanitize-recover=all
     UBSAN_OPTIONS: "print_stacktrace=1"
-    VULKAN_DRIVERS: intel,amd,freedreno,broadcom,virtio-experimental,imagination-experimental
+    VULKAN_DRIVERS: intel,amd,freedreno,broadcom,virtio-experimental,imagination-experimental,microsoft-experimental
     EXTRA_OPTION: >
       -D vulkan-layers=device-select,overlay
       -D build-aco-tests=true
@@ -509,17 +522,39 @@ debian-ppc64el:
     VULKAN_DRIVERS: "amd,swrast"
 
 debian-mingw32-x86_64:
-  extends: .meson-build
+  extends: .meson-build_mingw
   stage: build-misc
   variables:
     UNWIND: "disabled"
     C_ARGS: >
       -Wno-error=format
       -Wno-error=format-extra-args
+      -Wno-error=deprecated-declarations
+      -Wno-error=unused-function
+      -Wno-error=unused-variable
+      -Wno-error=unused-but-set-variable
+      -Wno-error=unused-value
+      -Wno-error=switch
+      -Wno-error=parentheses
+      -Wno-error=missing-prototypes
+      -Wno-error=sign-compare
+      -Wno-error=narrowing
+      -Wno-error=overflow
     CPP_ARGS: $C_ARGS
-    GALLIUM_DRIVERS: "swrast"
+    GALLIUM_DRIVERS: "swrast,d3d12,zink"
+    VULKAN_DRIVERS: "swrast,amd,microsoft-experimental"
+    GALLIUM_ST: >
+      -D gallium-opencl=icd
+      -D opencl-spirv=true
+      -D microsoft-clc=enabled
+      -D static-libclc=all
+      -D llvm=enabled
     EXTRA_OPTION: >
-      -Dllvm=disabled
-      -Dzlib=disabled
-      -Dosmesa=true
+      -D spirv-to-dxil=true
+      -D gles1=enabled
+      -D gles2=enabled
+      -D osmesa=true
+      -D cpp_rtti=true
+      -D shared-glapi=enabled
+      -D zlib=enabled
       --cross-file=.gitlab-ci/x86_64-w64-mingw32
diff -pruN 22.1.3-1/.gitlab-ci/common/generate-env.sh 22.2.0~rc1-1/.gitlab-ci/common/generate-env.sh
--- 22.1.3-1/.gitlab-ci/common/generate-env.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/common/generate-env.sh	2022-08-03 18:11:03.000000000 +0000
@@ -1,6 +1,7 @@
 #!/bin/bash
 
 for var in \
+    ACO_DEBUG \
     ASAN_OPTIONS \
     BASE_SYSTEM_FORK_HOST_PREFIX \
     BASE_SYSTEM_MAINLINE_HOST_PREFIX \
@@ -80,6 +81,7 @@ for var in \
     MESA_IMAGE \
     MESA_IMAGE_PATH \
     MESA_IMAGE_TAG \
+    MESA_LOADER_DRIVER_OVERRIDE \
     MESA_TEMPLATES_COMMIT \
     MESA_VK_IGNORE_CONFORMANCE_WARNING \
     MESA_SPIRV_LOG_LEVEL \
@@ -103,6 +105,8 @@ for var in \
     PIGLIT_RESULTS \
     PIGLIT_TESTS \
     PIPELINE_ARTIFACTS_BASE \
+    RADV_DEBUG \
+    RADV_PERFTEST \
     SKQP_ASSETS_DIR \
     SKQP_BACKENDS \
     TU_DEBUG \
@@ -110,6 +114,7 @@ for var in \
     VK_CPU \
     VK_DRIVER \
     VK_ICD_FILENAMES \
+    VKD3D_PROTON_RESULTS \
     ; do
   if [ -n "${!var+x}" ]; then
     echo "export $var=${!var@Q}"
diff -pruN 22.1.3-1/.gitlab-ci/common/init-stage2.sh 22.2.0~rc1-1/.gitlab-ci/common/init-stage2.sh
--- 22.1.3-1/.gitlab-ci/common/init-stage2.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/common/init-stage2.sh	2022-08-03 18:11:03.000000000 +0000
@@ -1,5 +1,38 @@
 #!/bin/sh
 
+# Make sure to kill itself and all the children process from this script on
+# exiting, since any console output may interfere with LAVA signals handling,
+# which based on the log console.
+cleanup() {
+  if [ "$BACKGROUND_PIDS" = "" ]; then
+    return 0
+  fi
+
+  set +x
+  echo "Killing all child processes"
+  for pid in $BACKGROUND_PIDS
+  do
+    kill "$pid" 2>/dev/null || true
+  done
+
+  # Sleep just a little to give enough time for subprocesses to be gracefully
+  # killed. Then apply a SIGKILL if necessary.
+  sleep 5
+  for pid in $BACKGROUND_PIDS
+  do
+    kill -9 "$pid" 2>/dev/null || true
+  done
+
+  BACKGROUND_PIDS=
+  set -x
+}
+trap cleanup INT TERM EXIT
+
+# Space separated values with the PIDS of the processes started in the
+# background by this script
+BACKGROUND_PIDS=
+
+
 # Second-stage init, used to set up devices and our job environment before
 # running tests.
 
@@ -60,10 +93,11 @@ if [ "$HWCI_FREQ_MAX" = "true" ]; then
   # Disable GPU runtime power management
   GPU_AUTOSUSPEND=`find /sys/devices -name autosuspend_delay_ms | grep gpu | head -1`
   test -z "$GPU_AUTOSUSPEND" || echo -1 > $GPU_AUTOSUSPEND || true
-
   # Lock Intel GPU frequency to 70% of the maximum allowed by hardware
   # and enable throttling detection & reporting.
-  ./intel-gpu-freq.sh -s 70% -g all -d
+  # Additionally, set the upper limit for CPU scaling frequency to 65% of the
+  # maximum permitted, as an additional measure to mitigate thermal throttling.
+  ./intel-gpu-freq.sh -s 70% --cpu-set-max 65% -g all -d
 fi
 
 # Increase freedreno hangcheck timer because it's right at the edge of the
@@ -74,7 +108,8 @@ fi
 
 # Start a little daemon to capture the first devcoredump we encounter.  (They
 # expire after 5 minutes, so we poll for them).
-./capture-devcoredump.sh &
+/capture-devcoredump.sh &
+BACKGROUND_PIDS="$! $BACKGROUND_PIDS"
 
 # If we want Xorg to be running for the test, then we start it up before the
 # HWCI_TEST_SCRIPT because we need to use xinit to start X (otherwise
@@ -84,6 +119,7 @@ if [ -n "$HWCI_START_XORG" ]; then
   echo "touch /xorg-started; sleep 100000" > /xorg-script
   env \
     xinit /bin/sh /xorg-script -- /usr/bin/Xorg -noreset -s 0 -dpms -logfile /Xorg.0.log &
+  BACKGROUND_PIDS="$! $BACKGROUND_PIDS"
 
   # Wait for xorg to be ready for connections.
   for i in 1 2 3 4 5; do
@@ -95,12 +131,21 @@ if [ -n "$HWCI_START_XORG" ]; then
   export DISPLAY=:0
 fi
 
-sh -c "$HWCI_TEST_SCRIPT" && RESULT=pass || RESULT=fail
+RESULT=fail
+set +e
+sh -c "$HWCI_TEST_SCRIPT"
+EXIT_CODE=$?
+set -e
 
 # Let's make sure the results are always stored in current working directory
 mv -f ${CI_PROJECT_DIR}/results ./ 2>/dev/null || true
 
-[ "${RESULT}" = "fail" ] || rm -rf results/trace/$PIGLIT_REPLAY_DEVICE_NAME
+[ ${EXIT_CODE} -ne 0 ] || rm -rf results/trace/"$PIGLIT_REPLAY_DEVICE_NAME"
+
+# Make sure that capture-devcoredump is done before we start trying to tar up
+# artifacts -- if it's writing while tar is reading, tar will throw an error and
+# kill the job.
+cleanup
 
 # upload artifacts
 if [ -n "$MINIO_RESULTS_UPLOAD" ]; then
@@ -109,4 +154,12 @@ if [ -n "$MINIO_RESULTS_UPLOAD" ]; then
   ci-fairy minio cp results.tar.gz minio://"$MINIO_RESULTS_UPLOAD"/results.tar.gz;
 fi
 
+# We still need to echo the hwci: mesa message, as some scripts rely on it, such
+# as the python ones inside the bare-metal folder
+[ ${EXIT_CODE} -eq 0 ] && RESULT=pass
+
+set +x
 echo "hwci: mesa: $RESULT"
+# Sleep a bit to avoid kernel dump message interleave from LAVA ENDTC signal
+sleep 1
+exit $EXIT_CODE
diff -pruN 22.1.3-1/.gitlab-ci/common/intel-gpu-freq.sh 22.2.0~rc1-1/.gitlab-ci/common/intel-gpu-freq.sh
--- 22.1.3-1/.gitlab-ci/common/intel-gpu-freq.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/common/intel-gpu-freq.sh	2022-08-03 18:11:03.000000000 +0000
@@ -1,8 +1,15 @@
 #!/bin/sh
 #
-# The Intel i915 GPU driver allows to change the minimum, maximum and boost
-# frequencies in steps of 50 MHz via /sys/class/drm/card<n>/<freq_info>,
-# where <n> is the DRM card index and <freq_info> one of the following:
+# This is an utility script to manage Intel GPU frequencies.
+# It can be used for debugging performance problems or trying to obtain a stable
+# frequency while benchmarking.
+#
+# Note the Intel i915 GPU driver allows to change the minimum, maximum and boost
+# frequencies in steps of 50 MHz via:
+#
+# /sys/class/drm/card<n>/<freq_info>
+#
+# Where <n> is the DRM card index and <freq_info> one of the following:
 #
 # - gt_max_freq_mhz (enforced maximum freq)
 # - gt_min_freq_mhz (enforced minimum freq)
@@ -18,6 +25,11 @@
 # - gt_act_freq_mhz (the actual GPU freq)
 # - gt_cur_freq_mhz (the last requested freq)
 #
+# Also note that in addition to GPU management, the script offers the
+# possibility to adjust CPU operating frequencies. However, this is currently
+# limited to just setting the maximum scaling frequency as percentage of the
+# maximum frequency allowed by the hardware.
+#
 # Copyright (C) 2022 Collabora Ltd.
 # Author: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
 #
@@ -27,6 +39,8 @@
 #
 # Constants
 #
+
+# GPU
 DRM_FREQ_SYSFS_PATTERN="/sys/class/drm/card%d/gt_%s_freq_mhz"
 ENF_FREQ_INFO="max min boost"
 CAP_FREQ_INFO="RP0 RPn RP1"
@@ -34,6 +48,14 @@ ACT_FREQ_INFO="act cur"
 THROTT_DETECT_SLEEP_SEC=2
 THROTT_DETECT_PID_FILE_PATH=/tmp/thrott-detect.pid
 
+# CPU
+CPU_SYSFS_PREFIX=/sys/devices/system/cpu
+CPU_PSTATE_SYSFS_PATTERN="${CPU_SYSFS_PREFIX}/intel_pstate/%s"
+CPU_FREQ_SYSFS_PATTERN="${CPU_SYSFS_PREFIX}/cpu%s/cpufreq/%s_freq"
+CAP_CPU_FREQ_INFO="cpuinfo_max cpuinfo_min"
+ENF_CPU_FREQ_INFO="scaling_max scaling_min"
+ACT_CPU_FREQ_INFO="scaling_cur"
+
 #
 # Global variables.
 #
@@ -41,6 +63,7 @@ unset INTEL_DRM_CARD_INDEX
 unset GET_ACT_FREQ GET_ENF_FREQ GET_CAP_FREQ
 unset SET_MIN_FREQ SET_MAX_FREQ
 unset MONITOR_FREQ
+unset CPU_SET_MAX_FREQ
 unset DETECT_THROTT
 unset DRY_RUN
 
@@ -98,14 +121,16 @@ identify_intel_gpu() {
 # return: Global variable(s) FREQ_${arg} containing the requested information
 #
 read_freq_info() {
-    local var val path print=0 ret=0
+    local var val info path print=0 ret=0
 
     [ "$1" = "y" ] && print=1
     shift
 
     while [ $# -gt 0 ]; do
-        var=FREQ_$1
-        path=$(print_freq_sysfs_path "$1")
+        info=$1
+        shift
+        var=FREQ_${info}
+        path=$(print_freq_sysfs_path "${info}")
 
         [ -r ${path} ] && read ${var} < ${path} || {
             log ERROR "Failed to read freq info from: %s" "${path}"
@@ -121,10 +146,8 @@ read_freq_info() {
 
         [ ${print} -eq 1 ] && {
             eval val=\$${var}
-            printf "%6s: %4s MHz\n" "$1" "${val}"
+            printf "%6s: %4s MHz\n" "${info}" "${val}"
         }
-
-        shift
     done
 
     return ${ret}
@@ -393,6 +416,156 @@ detect_throttling() {
 }
 
 #
+# Retrieve the list of online CPUs.
+#
+get_online_cpus() {
+    local path cpu_index
+
+    printf "0"
+    for path in $(grep 1 ${CPU_SYSFS_PREFIX}/cpu*/online); do
+        cpu_index=${path##*/cpu}
+        printf " %s" ${cpu_index%%/*}
+    done
+}
+
+#
+# Helper to print sysfs path for the given CPU index and freq info.
+#
+# arg1: Frequency info sysfs name, one of *_CPU_FREQ_INFO constants above
+# arg2: CPU index
+#
+print_cpu_freq_sysfs_path() {
+    printf ${CPU_FREQ_SYSFS_PATTERN} "$2" "$1"
+}
+
+#
+# Read the specified CPU freq info from sysfs.
+#
+# arg1: CPU index
+# arg2: Flag (y/n) to also enable printing the freq info.
+# arg3...: Frequency info sysfs name(s), see *_CPU_FREQ_INFO constants above
+# return: Global variable(s) CPU_FREQ_${arg} containing the requested information
+#
+read_cpu_freq_info() {
+    local var val info path cpu_index print=0 ret=0
+
+    cpu_index=$1
+    [ "$2" = "y" ] && print=1
+    shift 2
+
+    while [ $# -gt 0 ]; do
+        info=$1
+        shift
+        var=CPU_FREQ_${info}
+        path=$(print_cpu_freq_sysfs_path "${info}" ${cpu_index})
+
+        [ -r ${path} ] && read ${var} < ${path} || {
+            log ERROR "Failed to read CPU freq info from: %s" "${path}"
+            ret=1
+            continue
+        }
+
+        [ -n "${var}" ] || {
+            log ERROR "Got empty CPU freq info from: %s" "${path}"
+            ret=1
+            continue
+        }
+
+        [ ${print} -eq 1 ] && {
+            eval val=\$${var}
+            printf "%6s: %4s Hz\n" "${info}" "${val}"
+        }
+    done
+
+    return ${ret}
+}
+
+#
+# Helper to print freq. value as requested by user via '--cpu-set-max' option.
+# arg1: user requested freq value
+#
+compute_cpu_freq_set() {
+    local val
+
+    case "$1" in
+    +)
+        val=${CPU_FREQ_cpuinfo_max}
+        ;;
+    -)
+        val=${CPU_FREQ_cpuinfo_min}
+        ;;
+    *%)
+        val=$((${1%?} * ${CPU_FREQ_cpuinfo_max} / 100))
+        ;;
+    *[!0-9]*)
+        log ERROR "Cannot set CPU freq to invalid value: %s" "$1"
+        return 1
+        ;;
+    "")
+        log ERROR "Cannot set CPU freq to unspecified value"
+        return 1
+        ;;
+    *)
+        log ERROR "Cannot set CPU freq to custom value; use +, -, or % instead"
+        return 1
+        ;;
+    esac
+
+    printf "%s" "${val}"
+}
+
+#
+# Adjust CPU max scaling frequency.
+#
+set_cpu_freq_max() {
+    local target_freq res=0
+    case "${CPU_SET_MAX_FREQ}" in
+    +)
+        target_freq=100
+        ;;
+    -)
+        target_freq=1
+        ;;
+    *%)
+        target_freq=${CPU_SET_MAX_FREQ%?}
+        ;;
+    *)
+        log ERROR "Invalid CPU freq"
+        return 1
+        ;;
+    esac
+
+    local pstate_info=$(printf "${CPU_PSTATE_SYSFS_PATTERN}" max_perf_pct)
+    [ -e "${pstate_info}" ] && {
+        log INFO "Setting intel_pstate max perf to %s" "${target_freq}%"
+        printf "%s" "${target_freq}" > "${pstate_info}"
+        [ $? -eq 0 ] || {
+            log ERROR "Failed to set intel_pstate max perf"
+            res=1
+        }
+    }
+
+    local cpu_index
+    for cpu_index in $(get_online_cpus); do
+        read_cpu_freq_info ${cpu_index} n ${CAP_CPU_FREQ_INFO} || { res=$?; continue; }
+
+        target_freq=$(compute_cpu_freq_set "${CPU_SET_MAX_FREQ}")
+        [ -z "${target_freq}" ] && { res=$?; continue; }
+
+        log INFO "Setting CPU%s max scaling freq to %s Hz" ${cpu_index} "${target_freq}"
+        [ -n "${DRY_RUN}" ] && continue
+
+        printf "%s" ${target_freq} > $(print_cpu_freq_sysfs_path scaling_max ${cpu_index})
+        [ $? -eq 0 ] || {
+            res=1
+            log ERROR "Failed to set CPU%s max scaling frequency" ${cpu_index}
+        }
+    done
+
+    return ${res}
+}
+
+#
 # Show help message.
 #
 print_usage() {
@@ -426,6 +599,12 @@ Options:
                         as a background process. Use 'stop' or 'status' to
                         terminate the detector process or verify its status.
 
+  --cpu-set-max [FREQUENCY%|+|-}
+                        Set CPU max scaling frequency as % of hw max.
+                        Use '+' or '-' to set frequency to hardware max or min.
+
+  -r, --reset           Reset frequencies to hardware defaults.
+
   --dry-run             See what the script will do without applying any
                         frequency changes.
 
@@ -461,6 +640,8 @@ parse_option_get() {
 
 #
 # Validate user input for '-s, --set' option.
+# arg1: input value to be validated
+# arg2: optional flag indicating input is restricted to %
 #
 validate_option_set() {
     case "$1" in
@@ -472,6 +653,8 @@ validate_option_set() {
         exit 1
         ;;
     esac
+
+    [ -z "$2" ] || { print_usage; exit 1; }
 }
 
 #
@@ -525,6 +708,12 @@ while [ $# -gt 0 ]; do
         esac
         ;;
 
+    --cpu-set-max)
+        shift
+        CPU_SET_MAX_FREQ=$1
+        validate_option_set "${CPU_SET_MAX_FREQ}" restricted
+        ;;
+
     --dry-run)
         DRY_RUN=1
         ;;
@@ -558,6 +747,8 @@ print_freq_info
 
 [ -n "${DETECT_THROTT}" ] && detect_throttling ${DETECT_THROTT}
 
+[ -n "${CPU_SET_MAX_FREQ}" ] && { set_cpu_freq_max || RET=$?; }
+
 [ -n "${MONITOR_FREQ}" ] && {
     log INFO "Entering frequency monitoring mode"
     sleep 2
diff -pruN 22.1.3-1/.gitlab-ci/container/build-apitrace.sh 22.2.0~rc1-1/.gitlab-ci/container/build-apitrace.sh
--- 22.1.3-1/.gitlab-ci/container/build-apitrace.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/build-apitrace.sh	2022-08-03 18:11:03.000000000 +0000
@@ -2,14 +2,14 @@
 
 set -ex
 
-APITRACE_VERSION="170424754bb46002ba706e16ee5404b61988d74a"
+APITRACE_VERSION="790380e05854d5c9d315555444ffcc7acb8f4037"
 
 git clone https://github.com/apitrace/apitrace.git --single-branch --no-checkout /apitrace
 pushd /apitrace
 git checkout "$APITRACE_VERSION"
 git submodule update --init --depth 1 --recursive
 cmake -S . -B _build -G Ninja -DCMAKE_BUILD_TYPE=Release -DENABLE_GUI=False -DENABLE_WAFFLE=on $EXTRA_CMAKE_ARGS
-ninja -C _build
+cmake --build _build --parallel --target apitrace eglretrace
 mkdir build
 cp _build/apitrace build
 cp _build/eglretrace build
diff -pruN 22.1.3-1/.gitlab-ci/container/build-crosvm.sh 22.2.0~rc1-1/.gitlab-ci/container/build-crosvm.sh
--- 22.1.3-1/.gitlab-ci/container/build-crosvm.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/build-crosvm.sh	2022-08-03 18:11:03.000000000 +0000
@@ -13,7 +13,7 @@ git submodule update --init
 cat "$SCRIPT_DIR"/.gitlab-ci/container/build-crosvm_*.patch |
     patch -p1
 
-VIRGLRENDERER_VERSION=0564c9a0c2f584e004a7d4864aee3b8ec9692105
+VIRGLRENDERER_VERSION=dd301caf7e05ec9c09634fb7872067542aad89b7
 rm -rf third_party/virglrenderer
 git clone --single-branch -b master --no-checkout https://gitlab.freedesktop.org/virgl/virglrenderer.git third_party/virglrenderer
 pushd third_party/virglrenderer
diff -pruN 22.1.3-1/.gitlab-ci/container/build-deqp.sh 22.2.0~rc1-1/.gitlab-ci/container/build-deqp.sh
--- 22.1.3-1/.gitlab-ci/container/build-deqp.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/build-deqp.sh	2022-08-03 18:11:03.000000000 +0000
@@ -6,15 +6,11 @@ git config --global user.email "mesa@exa
 git config --global user.name "Mesa CI"
 git clone \
     https://github.com/KhronosGroup/VK-GL-CTS.git \
-    -b vulkan-cts-1.3.1.1 \
+    -b vulkan-cts-1.3.3.0 \
     --depth 1 \
     /VK-GL-CTS
 pushd /VK-GL-CTS
 
-# Cherry-pick fix for zlib dependency
-git fetch origin main
-git cherry-pick -x ec1804831b654ac55bd2a7a5dd27a556afe05030
-
 # --insecure is due to SSL cert failures hitting sourceforge for zlib and
 # libpng (sigh).  The archives get their checksums checked anyway, and git
 # always goes through ssh or https.
@@ -47,8 +43,8 @@ mv /deqp/modules/egl/deqp-egl-x11 /deqp/
 
 # Copy out the mustpass lists we want.
 mkdir /deqp/mustpass
-for mustpass in $(< /VK-GL-CTS/external/vulkancts/mustpass/master/vk-default.txt) ; do
-    cat /VK-GL-CTS/external/vulkancts/mustpass/master/$mustpass \
+for mustpass in $(< /VK-GL-CTS/external/vulkancts/mustpass/main/vk-default.txt) ; do
+    cat /VK-GL-CTS/external/vulkancts/mustpass/main/$mustpass \
         >> /deqp/mustpass/vk-master.txt
 done
 
diff -pruN 22.1.3-1/.gitlab-ci/container/build-gfxreconstruct.sh 22.2.0~rc1-1/.gitlab-ci/container/build-gfxreconstruct.sh
--- 22.1.3-1/.gitlab-ci/container/build-gfxreconstruct.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/build-gfxreconstruct.sh	2022-08-03 18:11:03.000000000 +0000
@@ -2,18 +2,18 @@
 
 set -ex
 
-GFXRECONSTRUCT_VERSION=3738decc2f4f9ff183818e5ab213a75a79fb7ab1
+GFXRECONSTRUCT_VERSION=5ed3caeecc46e976c4df31e263df8451ae176c26
 
-git clone https://github.com/LunarG/gfxreconstruct.git --single-branch -b master --no-checkout /gfxreconstruct
+git clone https://github.com/LunarG/gfxreconstruct.git \
+    --single-branch \
+    -b master \
+    --no-checkout \
+    /gfxreconstruct
 pushd /gfxreconstruct
 git checkout "$GFXRECONSTRUCT_VERSION"
 git submodule update --init
 git submodule update
-cmake -S . -B _build -G Ninja -DCMAKE_BUILD_TYPE=Release
-ninja -C _build gfxrecon-replay gfxrecon-info
-mkdir -p build/bin
-install _build/tools/replay/gfxrecon-replay build/bin
-install _build/tools/info/gfxrecon-info build/bin
-strip build/bin/*
+cmake -S . -B _build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/gfxreconstruct/build -DBUILD_WERROR=OFF
+cmake --build _build --parallel --target tools/{replay,info}/install/strip
 find . -not -path './build' -not -path './build/*' -delete
 popd
diff -pruN 22.1.3-1/.gitlab-ci/container/build-hang-detection.sh 22.2.0~rc1-1/.gitlab-ci/container/build-hang-detection.sh
--- 22.1.3-1/.gitlab-ci/container/build-hang-detection.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/build-hang-detection.sh	2022-08-03 18:11:03.000000000 +0000
@@ -2,7 +2,7 @@
 
 set -ex
 
-PARALLEL_DEQP_RUNNER_VERSION=6596b71cf37a7efb4d54acd48c770ed2d4ad6b7e
+PARALLEL_DEQP_RUNNER_VERSION=fe557794b5dadd8dbf0eae403296625e03bda18a
 
 git clone https://gitlab.freedesktop.org/mesa/parallel-deqp-runner --single-branch -b master --no-checkout /parallel-deqp-runner
 pushd /parallel-deqp-runner
diff -pruN 22.1.3-1/.gitlab-ci/container/build-piglit.sh 22.2.0~rc1-1/.gitlab-ci/container/build-piglit.sh
--- 22.1.3-1/.gitlab-ci/container/build-piglit.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/build-piglit.sh	2022-08-03 18:11:03.000000000 +0000
@@ -4,7 +4,7 @@ set -ex
 
 git clone https://gitlab.freedesktop.org/mesa/piglit.git --single-branch --no-checkout /piglit
 pushd /piglit
-git checkout 445711587d461539a4d8f9d35a7fe996a86d3c8d
+git checkout b2c9d8f56b45d79f804f4cb5ac62520f0edd8988
 patch -p1 <$OLDPWD/.gitlab-ci/piglit/disable-vs_in.diff
 cmake -S . -B . -G Ninja -DCMAKE_BUILD_TYPE=Release $PIGLIT_OPTS $EXTRA_CMAKE_ARGS
 ninja $PIGLIT_BUILD_TARGETS
diff -pruN 22.1.3-1/.gitlab-ci/container/build-skqp_gl.patch 22.2.0~rc1-1/.gitlab-ci/container/build-skqp_gl.patch
--- 22.1.3-1/.gitlab-ci/container/build-skqp_gl.patch	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/build-skqp_gl.patch	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,41 @@
+diff --git a/tools/skqp/src/skqp.cpp b/tools/skqp/src/skqp.cpp
+index 50ed9db01d..938217000d 100644
+--- a/tools/skqp/src/skqp.cpp
++++ b/tools/skqp/src/skqp.cpp
+@@ -448,7 +448,7 @@ inline void write(SkWStream* wStream, const T& text) {
+ 
+ void SkQP::makeReport() {
+     SkASSERT_RELEASE(fAssetManager);
+-    int glesErrorCount = 0, vkErrorCount = 0, gles = 0, vk = 0;
++    int glErrorCount = 0, glesErrorCount = 0, vkErrorCount = 0, gl = 0, gles = 0, vk = 0;
+ 
+     if (!sk_isdir(fReportDirectory.c_str())) {
+         SkDebugf("Report destination does not exist: '%s'\n", fReportDirectory.c_str());
+@@ -460,6 +460,7 @@ void SkQP::makeReport() {
+     htmOut.writeText(kDocHead);
+     for (const SkQP::RenderResult& run : fRenderResults) {
+         switch (run.fBackend) {
++            case SkQP::SkiaBackend::kGL: ++gl; break;
+             case SkQP::SkiaBackend::kGLES: ++gles; break;
+             case SkQP::SkiaBackend::kVulkan: ++vk; break;
+             default: break;
+@@ -477,15 +478,17 @@ void SkQP::makeReport() {
+         }
+         write(&htmOut, SkStringPrintf("  f(%s);\n", str.c_str()));
+         switch (run.fBackend) {
++            case SkQP::SkiaBackend::kGL: ++glErrorCount; break;
+             case SkQP::SkiaBackend::kGLES: ++glesErrorCount; break;
+             case SkQP::SkiaBackend::kVulkan: ++vkErrorCount; break;
+             default: break;
+         }
+     }
+     htmOut.writeText(kDocMiddle);
+-    write(&htmOut, SkStringPrintf("<p>gles errors: %d (of %d)</br>\n"
++    write(&htmOut, SkStringPrintf("<p>gl errors: %d (of %d)</br>\n"
++                                  "gles errors: %d (of %d)</br>\n"
+                                   "vk errors: %d (of %d)</p>\n",
+-                                  glesErrorCount, gles, vkErrorCount, vk));
++                                  glErrorCount, gl, glesErrorCount, gles, vkErrorCount, vk));
+     htmOut.writeText(kDocTail);
+     SkFILEWStream unitOut(SkOSPath::Join(fReportDirectory.c_str(), kUnitTestReportPath).c_str());
+     SkASSERT_RELEASE(unitOut.isValid());
diff -pruN 22.1.3-1/.gitlab-ci/container/build-skqp.sh 22.2.0~rc1-1/.gitlab-ci/container/build-skqp.sh
--- 22.1.3-1/.gitlab-ci/container/build-skqp.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/build-skqp.sh	2022-08-03 18:11:03.000000000 +0000
@@ -41,7 +41,7 @@ download_skia_source() {
     # Skia cloned from https://android.googlesource.com/platform/external/skqp
     # has all needed assets tracked on git-fs
     SKQP_REPO=https://android.googlesource.com/platform/external/skqp
-    SKQP_BRANCH=android-cts-10.0_r11
+    SKQP_BRANCH=android-cts-11.0_r7
 
     git clone --branch "${SKQP_BRANCH}" --depth 1 "${SKQP_REPO}" "${SKIA_DIR}"
 }
diff -pruN 22.1.3-1/.gitlab-ci/container/build-vkd3d-proton.sh 22.2.0~rc1-1/.gitlab-ci/container/build-vkd3d-proton.sh
--- 22.1.3-1/.gitlab-ci/container/build-vkd3d-proton.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/build-vkd3d-proton.sh	2022-08-03 18:11:03.000000000 +0000
@@ -2,8 +2,7 @@
 
 set -ex
 
-VKD3D_PROTON_VERSION="2.6"
-VKD3D_PROTON_COMMIT="3e5aab6fb3e18f81a71b339be4cb5cdf55140980"
+VKD3D_PROTON_COMMIT="5b73139f182d86cd58a757e4b5f0d4cfad96d319"
 
 VKD3D_PROTON_DST_DIR="/vkd3d-proton-tests"
 VKD3D_PROTON_SRC_DIR="/vkd3d-proton-src"
@@ -16,7 +15,7 @@ function build_arch {
   meson "$@"                               \
         -Denable_tests=true                \
         --buildtype release                \
-        --prefix "$VKD3D_PROTON_BUILD_DIR" \
+        --prefix "$VKD3D_PROTON_DST_DIR"   \
         --strip                            \
         --bindir "x${arch}"                \
         --libdir "x${arch}"                \
@@ -24,20 +23,17 @@ function build_arch {
 
   ninja -C "$VKD3D_PROTON_BUILD_DIR/build.${arch}" install
 
-  install -D -m755 -t "${VKD3D_PROTON_DST_DIR}/x${arch}/bin" "$VKD3D_PROTON_BUILD_DIR/build.${arch}/tests/"*.exe
+  install -D -m755 -t "${VKD3D_PROTON_DST_DIR}/x${arch}/bin" "$VKD3D_PROTON_BUILD_DIR/build.${arch}/tests/d3d12"
 }
 
-git clone https://github.com/HansKristian-Work/vkd3d-proton.git --single-branch -b "v$VKD3D_PROTON_VERSION" --no-checkout "$VKD3D_PROTON_SRC_DIR"
+git clone https://github.com/HansKristian-Work/vkd3d-proton.git --single-branch -b master --no-checkout "$VKD3D_PROTON_SRC_DIR"
 pushd "$VKD3D_PROTON_SRC_DIR"
 git checkout "$VKD3D_PROTON_COMMIT"
 git submodule update --init --recursive
 git submodule update --recursive
-build_arch 64 --cross-file build-win64.txt
-build_arch 86 --cross-file build-win32.txt
-cp "setup_vkd3d_proton.sh" "$VKD3D_PROTON_BUILD_DIR/setup_vkd3d_proton.sh"
-chmod +x "$VKD3D_PROTON_BUILD_DIR/setup_vkd3d_proton.sh"
+build_arch 64
+build_arch 86
 popd
 
-"$VKD3D_PROTON_BUILD_DIR"/setup_vkd3d_proton.sh install
 rm -rf "$VKD3D_PROTON_BUILD_DIR"
 rm -rf "$VKD3D_PROTON_SRC_DIR"
diff -pruN 22.1.3-1/.gitlab-ci/container/container_pre_build.sh 22.2.0~rc1-1/.gitlab-ci/container/container_pre_build.sh
--- 22.1.3-1/.gitlab-ci/container/container_pre_build.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/container_pre_build.sh	2022-08-03 18:11:03.000000000 +0000
@@ -34,3 +34,9 @@ chmod +x /usr/local/bin/ninja
 # Set MAKEFLAGS so that all make invocations in container builds include the
 # flags (doesn't apply to non-container builds, but we don't run make there)
 export MAKEFLAGS="-j${FDO_CI_CONCURRENT:-4}"
+
+# make wget to try more than once, when download fails or timeout
+echo -e "retry_connrefused = on\n" \
+        "read_timeout = 300\n" \
+        "tries = 4\n" \
+        "wait_retry = 32" >> /etc/wgetrc
diff -pruN 22.1.3-1/.gitlab-ci/container/create-rootfs.sh 22.2.0~rc1-1/.gitlab-ci/container/create-rootfs.sh
--- 22.1.3-1/.gitlab-ci/container/create-rootfs.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/create-rootfs.sh	2022-08-03 18:11:03.000000000 +0000
@@ -11,15 +11,25 @@ if [ $DEBIAN_ARCH = arm64 ]; then
                    libvulkan-dev
     "
 elif [ $DEBIAN_ARCH = amd64 ]; then
+    # Add llvm 13 to the build image
+    apt-get -y install --no-install-recommends wget gnupg2 software-properties-common
+    apt-key add /llvm-snapshot.gpg.key
+    add-apt-repository "deb https://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-13 main"
+
     ARCH_PACKAGES="firmware-amd-graphics
                    inetutils-syslogd
                    iptables
                    libcap2
+                   libfontconfig1
                    libelf1
                    libfdt1
+                   libgl1
+                   libglu1-mesa
+                   libllvm13
                    libllvm11
                    libva2
                    libva-drm2
+                   libvulkan-dev
                    socat
                    spirv-tools
                    sysvinit-core
@@ -33,6 +43,7 @@ INSTALL_CI_FAIRY_PACKAGES="git
                            python3-wheel
                            "
 
+apt-get update
 apt-get -y install --no-install-recommends \
     $ARCH_PACKAGES \
     $INSTALL_CI_FAIRY_PACKAGES \
@@ -188,6 +199,8 @@ UNNEEDED_PACKAGES="apt libapt-pkg6.0 "\
 "libgles2-mesa-dev "\
 "libglx-mesa0 "\
 "mesa-common-dev "\
+"gnupg2 "\
+"software-properties-common " \
 
 # Removing unneeded packages
 for PACKAGE in ${UNNEEDED_PACKAGES}
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/arm_build.sh 22.2.0~rc1-1/.gitlab-ci/container/debian/arm_build.sh
--- 22.1.3-1/.gitlab-ci/container/debian/arm_build.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/arm_build.sh	2022-08-03 18:11:03.000000000 +0000
@@ -22,11 +22,13 @@ apt-get -y install \
 	flex \
 	g++ \
 	git \
+	glslang-tools \
 	kmod \
 	libasan6 \
 	libdrm-dev \
 	libelf-dev \
 	libexpat1-dev \
+	libvulkan-dev \
 	libx11-dev \
 	libx11-xcb-dev \
 	libxcb-dri2-0-dev \
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/llvm-snapshot.gpg.key 22.2.0~rc1-1/.gitlab-ci/container/debian/llvm-snapshot.gpg.key
--- 22.1.3-1/.gitlab-ci/container/debian/llvm-snapshot.gpg.key	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/llvm-snapshot.gpg.key	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,52 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.12 (GNU/Linux)
+
+mQINBFE9lCwBEADi0WUAApM/mgHJRU8lVkkw0CHsZNpqaQDNaHefD6Rw3S4LxNmM
+EZaOTkhP200XZM8lVdbfUW9xSjA3oPldc1HG26NjbqqCmWpdo2fb+r7VmU2dq3NM
+R18ZlKixiLDE6OUfaXWKamZsXb6ITTYmgTO6orQWYrnW6ckYHSeaAkW0wkDAryl2
+B5v8aoFnQ1rFiVEMo4NGzw4UX+MelF7rxaaregmKVTPiqCOSPJ1McC1dHFN533FY
+Wh/RVLKWo6npu+owtwYFQW+zyQhKzSIMvNujFRzhIxzxR9Gn87MoLAyfgKEzrbbT
+DhqqNXTxS4UMUKCQaO93TzetX/EBrRpJj+vP640yio80h4Dr5pAd7+LnKwgpTDk1
+G88bBXJAcPZnTSKu9I2c6KY4iRNbvRz4i+ZdwwZtdW4nSdl2792L7Sl7Nc44uLL/
+ZqkKDXEBF6lsX5XpABwyK89S/SbHOytXv9o4puv+65Ac5/UShspQTMSKGZgvDauU
+cs8kE1U9dPOqVNCYq9Nfwinkf6RxV1k1+gwtclxQuY7UpKXP0hNAXjAiA5KS5Crq
+7aaJg9q2F4bub0mNU6n7UI6vXguF2n4SEtzPRk6RP+4TiT3bZUsmr+1ktogyOJCc
+Ha8G5VdL+NBIYQthOcieYCBnTeIH7D3Sp6FYQTYtVbKFzmMK+36ERreL/wARAQAB
+tD1TeWx2ZXN0cmUgTGVkcnUgLSBEZWJpYW4gTExWTSBwYWNrYWdlcyA8c3lsdmVz
+dHJlQGRlYmlhbi5vcmc+iQI4BBMBAgAiBQJRPZQsAhsDBgsJCAcDAgYVCAIJCgsE
+FgIDAQIeAQIXgAAKCRAVz00Yr090Ibx+EADArS/hvkDF8juWMXxh17CgR0WZlHCC
+9CTBWkg5a0bNN/3bb97cPQt/vIKWjQtkQpav6/5JTVCSx2riL4FHYhH0iuo4iAPR
+udC7Cvg8g7bSPrKO6tenQZNvQm+tUmBHgFiMBJi92AjZ/Qn1Shg7p9ITivFxpLyX
+wpmnF1OKyI2Kof2rm4BFwfSWuf8Fvh7kDMRLHv+MlnK/7j/BNpKdozXxLcwoFBmn
+l0WjpAH3OFF7Pvm1LJdf1DjWKH0Dc3sc6zxtmBR/KHHg6kK4BGQNnFKujcP7TVdv
+gMYv84kun14pnwjZcqOtN3UJtcx22880DOQzinoMs3Q4w4o05oIF+sSgHViFpc3W
+R0v+RllnH05vKZo+LDzc83DQVrdwliV12eHxrMQ8UYg88zCbF/cHHnlzZWAJgftg
+hB08v1BKPgYRUzwJ6VdVqXYcZWEaUJmQAPuAALyZESw94hSo28FAn0/gzEc5uOYx
+K+xG/lFwgAGYNb3uGM5m0P6LVTfdg6vDwwOeTNIExVk3KVFXeSQef2ZMkhwA7wya
+KJptkb62wBHFE+o9TUdtMCY6qONxMMdwioRE5BYNwAsS1PnRD2+jtlI0DzvKHt7B
+MWd8hnoUKhMeZ9TNmo+8CpsAtXZcBho0zPGz/R8NlJhAWpdAZ1CmcPo83EW86Yq7
+BxQUKnNHcwj2ebkCDQRRPZQsARAA4jxYmbTHwmMjqSizlMJYNuGOpIidEdx9zQ5g
+zOr431/VfWq4S+VhMDhs15j9lyml0y4ok215VRFwrAREDg6UPMr7ajLmBQGau0Fc
+bvZJ90l4NjXp5p0NEE/qOb9UEHT7EGkEhaZ1ekkWFTWCgsy7rRXfZLxB6sk7pzLC
+DshyW3zjIakWAnpQ5j5obiDy708pReAuGB94NSyb1HoW/xGsGgvvCw4r0w3xPStw
+F1PhmScE6NTBIfLliea3pl8vhKPlCh54Hk7I8QGjo1ETlRP4Qll1ZxHJ8u25f/ta
+RES2Aw8Hi7j0EVcZ6MT9JWTI83yUcnUlZPZS2HyeWcUj+8nUC8W4N8An+aNps9l/
+21inIl2TbGo3Yn1JQLnA1YCoGwC34g8QZTJhElEQBN0X29ayWW6OdFx8MDvllbBV
+ymmKq2lK1U55mQTfDli7S3vfGz9Gp/oQwZ8bQpOeUkc5hbZszYwP4RX+68xDPfn+
+M9udl+qW9wu+LyePbW6HX90LmkhNkkY2ZzUPRPDHZANU5btaPXc2H7edX4y4maQa
+xenqD0lGh9LGz/mps4HEZtCI5CY8o0uCMF3lT0XfXhuLksr7Pxv57yue8LLTItOJ
+d9Hmzp9G97SRYYeqU+8lyNXtU2PdrLLq7QHkzrsloG78lCpQcalHGACJzrlUWVP/
+fN3Ht3kAEQEAAYkCHwQYAQIACQUCUT2ULAIbDAAKCRAVz00Yr090IbhWEADbr50X
+OEXMIMGRLe+YMjeMX9NG4jxs0jZaWHc/WrGR+CCSUb9r6aPXeLo+45949uEfdSsB
+pbaEdNWxF5Vr1CSjuO5siIlgDjmT655voXo67xVpEN4HhMrxugDJfCa6z97P0+ML
+PdDxim57uNqkam9XIq9hKQaurxMAECDPmlEXI4QT3eu5qw5/knMzDMZj4Vi6hovL
+wvvAeLHO/jsyfIdNmhBGU2RWCEZ9uo/MeerPHtRPfg74g+9PPfP6nyHD2Wes6yGd
+oVQwtPNAQD6Cj7EaA2xdZYLJ7/jW6yiPu98FFWP74FN2dlyEA2uVziLsfBrgpS4l
+tVOlrO2YzkkqUGrybzbLpj6eeHx+Cd7wcjI8CalsqtL6cG8cUEjtWQUHyTbQWAgG
+5VPEgIAVhJ6RTZ26i/G+4J8neKyRs4vz+57UGwY6zI4AB1ZcWGEE3Bf+CDEDgmnP
+LSwbnHefK9IljT9XU98PelSryUO/5UPw7leE0akXKB4DtekToO226px1VnGp3Bov
+1GBGvpHvL2WizEwdk+nfk8LtrLzej+9FtIcq3uIrYnsac47Pf7p0otcFeTJTjSq3
+krCaoG4Hx0zGQG2ZFpHrSrZTVy6lxvIdfi0beMgY6h78p6M9eYZHQHc02DjFkQXN
+bXb5c6gCHESH5PXwPU4jQEE7Ib9J6sbk7ZT2Mw==
+=j+4q
+-----END PGP PUBLIC KEY BLOCK-----
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/winehq.gpg.key 22.2.0~rc1-1/.gitlab-ci/container/debian/winehq.gpg.key
--- 22.1.3-1/.gitlab-ci/container/debian/winehq.gpg.key	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/winehq.gpg.key	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,53 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGNBFwOmrgBDAC9FZW3dFpew1hwDaqRfdQQ1ABcmOYu1NKZHwYjd+bGvcR2LRGe
+R5dfRqG1Uc/5r6CPCMvnWxFprymkqKEADn8eFn+aCnPx03HrhA+lNEbciPfTHylt
+NTTuRua7YpJIgEOjhXUbxXxnvF8fhUf5NJpJg6H6fPQARUW+5M//BlVgwn2jhzlW
+U+uwgeJthhiuTXkls9Yo3EoJzmkUih+ABZgvaiBpr7GZRw9GO1aucITct0YDNTVX
+KA6el78/udi5GZSCKT94yY9ArN4W6NiOFCLV7MU5d6qMjwGFhfg46NBv9nqpGinK
+3NDjqCevKouhtKl2J+nr3Ju3Spzuv6Iex7tsOqt+XdZCoY+8+dy3G5zbJwBYsMiS
+rTNF55PHtBH1S0QK5OoN2UR1ie/aURAyAFEMhTzvFB2B2v7C0IKIOmYMEG+DPMs9
+FQs/vZ1UnAQgWk02ZiPryoHfjFO80+XYMrdWN+RSo5q9ODClloaKXjqI/aWLGirm
+KXw2R8tz31go3NMAEQEAAbQnV2luZUhRIHBhY2thZ2VzIDx3aW5lLWRldmVsQHdp
+bmVocS5vcmc+iQHOBBMBCgA4AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE
+1D9kAUU2nFHXht3qdvGiD/mHZy8FAlwOmyUACgkQdvGiD/mHZy/zkwv7B+nKFlDY
+Bzz/7j0gqIODbs5FRZRtuf/IuPP3vZdWlNfAW/VyaLtVLJCM/mmaf/O6/gJ+D+E9
+BBoSmHdHzBBOQHIj5IbRedynNcHT5qXsdBeU2ZPR50sdE+jmukvw3Wa5JijoDgUu
+LGLGtU48Z3JsBXQ54OlnTZXQ2SMFhRUa10JANXSJQ+QY2Wo2Pi2+MEAHcrd71A2S
+0mT2DQSSBQ92c6WPfUpOSBawd8P0ipT7rVFNLJh8HVQGyEWxPl8ecDEHoVfG2rdV
+D0ADbNLx9031UUwpUicO6vW/2Ec7c3VNG1cpOtyNTw/lEgvsXOh3GQs/DvFvMy/h
+QzaeF3Qq6cAPlKuxieJe4lLYFBTmCAT4iB1J8oeFs4G7ScfZH4+4NBe3VGoeCD/M
+Wl+qxntAroblxiFuqtPJg+NKZYWBzkptJNhnrBxcBnRinGZLw2k/GR/qPMgsR2L4
+cP+OUuka+R2gp9oDVTZTyMowz+ROIxnEijF50pkj2VBFRB02rfiMp7q6iQIzBBAB
+CgAdFiEE2iNXmnTUrZr50/lFzvrI6q8XUZ0FAlwOm3AACgkQzvrI6q8XUZ3KKg/+
+MD8CgvLiHEX90fXQ23RZQRm2J21w3gxdIen/N8yJVIbK7NIgYhgWfGWsGQedtM7D
+hMwUlDSRb4rWy9vrXBaiZoF3+nK9AcLvPChkZz28U59Jft6/l0gVrykey/ERU7EV
+w1Ie1eRu0tRSXsKvMZyQH8897iHZ7uqoJgyk8U8CvSW+V80yqLB2M8Tk8ECZq34f
+HqUIGs4Wo0UZh0vV4+dEQHBh1BYpmmWl+UPf7nzNwFWXu/EpjVhkExRqTnkEJ+Ai
+OxbtrRn6ETKzpV4DjyifqQF639bMIem7DRRf+mkcrAXetvWkUkE76e3E9KLvETCZ
+l4SBfgqSZs2vNngmpX6Qnoh883aFo5ZgVN3v6uTS+LgTwMt/XlnDQ7+Zw+ehCZ2R
+CO21Y9Kbw6ZEWls/8srZdCQ2LxnyeyQeIzsLnqT/waGjQj35i4exzYeWpojVDb3r
+tvvOALYGVlSYqZXIALTx2/tHXKLHyrn1C0VgHRnl+hwv7U49f7RvfQXpx47YQN/C
+PWrpbG69wlKuJptr+olbyoKAWfl+UzoO8vLMo5njWQNAoAwh1H8aFUVNyhtbkRuq
+l0kpy1Cmcq8uo6taK9lvYp8jak7eV8lHSSiGUKTAovNTwfZG2JboGV4/qLDUKvpa
+lPp2xVpF9MzA8VlXTOzLpSyIVxZnPTpL+xR5P9WQjMS5AY0EXA6auAEMAMReKL89
+0z0SL+/i/geB/agfG/k6AXiG2a9kVWeIjAqFwHKl9W/DTNvOqCDgAt51oiHGRRjt
+1Xm3XZD4p+GM1uZWn9qIFL49Gt5x94TqdrsKTVCJr0Kazn2mKQc7aja0zac+WtZG
+OFn7KbniuAcwtC780cyikfmmExLI1/Vjg+NiMlMtZfpK6FIW+ulPiDQPdzIhVppx
+w9/KlR2Fvh4TbzDsUqkFQSSAFdQ65BWgvzLpZHdKO/ILpDkThLbipjtvbBv/pHKM
+O/NFTNoYkJ3cNW/kfcynwV+4AcKwdRz2A3Mez+g5TKFYPZROIbayOo01yTMLfz2p
+jcqki/t4PACtwFOhkAs+MYPPyZDUkTFcEJQCPDstkAgmJWI3K2qELtDOLQyps3WY
+Mfp+mntOdc8bKjFTMcCEk1zcm14K4Oms+w6dw2UnYsX1FAYYhPm8HUYwE4kP8M+D
+9HGLMjLqqF/kanlCFZs5Avx3mDSAx6zS8vtNdGh+64oDNk4x4A2j8GTUuQARAQAB
+iQG8BBgBCgAmFiEE1D9kAUU2nFHXht3qdvGiD/mHZy8FAlwOmrgCGwwFCQPCZwAA
+CgkQdvGiD/mHZy9FnAwAgfUkxsO53Pm2iaHhtF4+BUc8MNJj64Jvm1tghr6PBRtM
+hpbvvN8SSOFwYIsS+2BMsJ2ldox4zMYhuvBcgNUlix0G0Z7h1MjftDdsLFi1DNv2
+J9dJ9LdpWdiZbyg4Sy7WakIZ/VvH1Znd89Imo7kCScRdXTjIw2yCkotE5lK7A6Ns
+NbVuoYEN+dbGioF4csYehnjTdojwF/19mHFxrXkdDZ/V6ZYFIFxEsxL8FEuyI4+o
+LC3DFSA4+QAFdkjGFXqFPlaEJxWt5d7wk0y+tt68v+ulkJ900BvR+OOMqQURwrAi
+iP3I28aRrMjZYwyqHl8i/qyIv+WRakoDKV+wWteR5DmRAPHmX2vnlPlCmY8ysR6J
+2jUAfuDFVu4/qzJe6vw5tmPJMdfvy0W5oogX6sEdin5M5w2b3WrN8nXZcjbWymqP
+6jCdl6eoCCkKNOIbr/MMSkd2KqAqDVM5cnnlQ7q+AXzwNpj3RGJVoBxbS0nn9JWY
+QNQrWh9rAcMIGT+b1le0
+=4lsa
+-----END PGP PUBLIC KEY BLOCK-----
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/x86_build-base.sh 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_build-base.sh
--- 22.1.3-1/.gitlab-ci/container/debian/x86_build-base.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_build-base.sh	2022-08-03 18:11:03.000000000 +0000
@@ -5,7 +5,11 @@ set -o xtrace
 
 export DEBIAN_FRONTEND=noninteractive
 
-apt-get install -y ca-certificates
+apt-get install -y ca-certificates gnupg2 software-properties-common
+
+# Add llvm 13 to the build image
+apt-key add .gitlab-ci/container/debian/llvm-snapshot.gpg.key
+add-apt-repository "deb https://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-13 main"
 
 sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
 
@@ -25,11 +29,12 @@ apt-get install -y --no-remove \
         dpkg-cross \
         flex \
         g++ \
-        g++-mingw-w64-x86-64 \
+        cmake \
         gcc \
         git \
         glslang-tools \
         kmod \
+        libclang-13-dev \
         libclang-11-dev \
         libclang-9-dev \
         libclc-dev \
@@ -37,6 +42,7 @@ apt-get install -y --no-remove \
         libepoxy-dev \
         libexpat1-dev \
         libgtk-3-dev \
+        libllvm13 \
         libllvm11 \
         libllvm9 \
         libomxil-bellagio-dev \
@@ -54,7 +60,6 @@ apt-get install -y --no-remove \
         libxshmfence-dev \
         libxvmc-dev \
         libxxf86vm-dev \
-        libz-mingw-w64-dev \
         make \
         meson \
         pkg-config \
@@ -64,7 +69,6 @@ apt-get install -y --no-remove \
         qemu-user \
         valgrind \
         wget \
-        wine64 \
         x11proto-dri2-dev \
         x11proto-gl-dev \
         x11proto-randr-dev \
@@ -74,6 +78,8 @@ apt-get install -y --no-remove \
 # Needed for ci-fairy, this revision is able to upload files to MinIO
 pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates@34f4ade99434043f88e164933f570301fd18b125
 
+. .gitlab-ci/container/debian/x86_build-base-wine.sh
+
 ############### Uninstall ephemeral packages
 
 apt-get purge -y $STABLE_EPHEMERAL
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/x86_build-base-wine.sh 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_build-base-wine.sh
--- 22.1.3-1/.gitlab-ci/container/debian/x86_build-base-wine.sh	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_build-base-wine.sh	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+set -e
+set -o xtrace
+
+# Installing wine, need this for testing mingw or nine
+
+# We need multiarch for Wine
+dpkg --add-architecture i386
+apt-get update
+apt-get install -y --no-remove \
+      wine \
+      wine32 \
+      wine64 \
+      xvfb
+
+# Used to initialize the Wine environment to reduce build time
+wine64 whoami.exe
+
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/x86_build-mingw-patch.sh 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_build-mingw-patch.sh
--- 22.1.3-1/.gitlab-ci/container/debian/x86_build-mingw-patch.sh	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_build-mingw-patch.sh	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,74 @@
+#!/bin/bash
+
+# Pull packages from msys2 repository that can be directly used.
+# We can use https://packages.msys2.org/ to retrieve the newest package
+mkdir ~/tmp
+pushd ~/tmp
+MINGW_PACKET_LIST="
+mingw-w64-x86_64-headers-git-10.0.0.r14.ga08c638f8-1-any.pkg.tar.zst
+mingw-w64-x86_64-vulkan-loader-1.3.211-1-any.pkg.tar.zst
+mingw-w64-x86_64-libelf-0.8.13-6-any.pkg.tar.zst
+mingw-w64-x86_64-zlib-1.2.12-1-any.pkg.tar.zst
+mingw-w64-x86_64-zstd-1.5.2-2-any.pkg.tar.zst
+"
+
+for i in $MINGW_PACKET_LIST
+do
+  wget -q https://mirror.msys2.org/mingw/mingw64/$i
+  tar xf $i --strip-components=1 -C /usr/x86_64-w64-mingw32/
+done
+popd
+rm -rf ~/tmp
+
+mkdir -p /usr/x86_64-w64-mingw32/bin
+
+# The output of `wine64 llvm-config --system-libs --cxxflags mcdisassembler`
+# containes absolute path like '-IZ:'
+# The sed is used to replace `-IZ:/usr/x86_64-w64-mingw32/include`
+# to `-I/usr/x86_64-w64-mingw32/include`
+
+# Debian's pkg-config wrapers for mingw are broken, and there's no sign that
+# they're going to be fixed, so we'll just have to fix it ourselves
+# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930492
+cat >/usr/x86_64-w64-mingw32/bin/pkg-config <<EOF
+#!/bin/sh
+
+PKG_CONFIG_LIBDIR=/usr/x86_64-w64-mingw32/lib/pkgconfig:/usr/x86_64-w64-mingw32/share/pkgconfig pkg-config \$@
+EOF
+chmod +x /usr/x86_64-w64-mingw32/bin/pkg-config
+
+cat >/usr/x86_64-w64-mingw32/bin/llvm-config <<EOF
+#!/bin/sh
+wine64 llvm-config \$@ | sed -e "s,Z:/,/,gi"
+EOF
+chmod +x /usr/x86_64-w64-mingw32/bin/llvm-config
+
+cat >/usr/x86_64-w64-mingw32/bin/clang <<EOF
+#!/bin/sh
+wine64 clang \$@
+EOF
+chmod +x /usr/x86_64-w64-mingw32/bin/clang
+
+cat >/usr/x86_64-w64-mingw32/bin/llvm-as <<EOF
+#!/bin/sh
+wine64 llvm-as \$@
+EOF
+chmod +x /usr/x86_64-w64-mingw32/bin/llvm-as
+
+cat >/usr/x86_64-w64-mingw32/bin/llvm-link <<EOF
+#!/bin/sh
+wine64 llvm-link \$@
+EOF
+chmod +x /usr/x86_64-w64-mingw32/bin/llvm-link
+
+cat >/usr/x86_64-w64-mingw32/bin/opt <<EOF
+#!/bin/sh
+wine64 opt \$@
+EOF
+chmod +x /usr/x86_64-w64-mingw32/bin/opt
+
+cat >/usr/x86_64-w64-mingw32/bin/llvm-spirv <<EOF
+#!/bin/sh
+wine64 llvm-spirv \$@
+EOF
+chmod +x /usr/x86_64-w64-mingw32/bin/llvm-spirv
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/x86_build-mingw.sh 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_build-mingw.sh
--- 22.1.3-1/.gitlab-ci/container/debian/x86_build-mingw.sh	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_build-mingw.sh	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+set -e
+set -o xtrace
+
+apt-get update
+apt-get install -y --no-remove \
+        zstd \
+        g++-mingw-w64-i686 \
+        g++-mingw-w64-x86-64
+
+. .gitlab-ci/container/debian/x86_build-mingw-patch.sh
+. .gitlab-ci/container/debian/x86_build-mingw-source-deps.sh
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/x86_build-mingw-source-deps.sh 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_build-mingw-source-deps.sh
--- 22.1.3-1/.gitlab-ci/container/debian/x86_build-mingw-source-deps.sh	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_build-mingw-source-deps.sh	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,100 @@
+#!/bin/bash
+wd=$PWD
+CMAKE_TOOLCHAIN_MINGW_PATH=$wd/.gitlab-ci/container/debian/x86_mingw-toolchain.cmake
+mkdir -p ~/tmp
+pushd ~/tmp
+
+# Building DirectX-Headers
+git clone https://github.com/microsoft/DirectX-Headers -b v1.606.3 --depth 1
+mkdir -p DirectX-Headers/build
+pushd DirectX-Headers/build
+meson .. \
+--backend=ninja \
+--buildtype=release -Dbuild-test=false \
+-Dprefix=/usr/x86_64-w64-mingw32/ \
+--cross-file=$wd/.gitlab-ci/x86_64-w64-mingw32
+
+ninja install
+popd
+
+export VULKAN_SDK_VERSION=1.3.211.0
+
+# Building SPIRV Tools
+git clone -b sdk-$VULKAN_SDK_VERSION --depth=1 \
+https://github.com/KhronosGroup/SPIRV-Tools SPIRV-Tools
+
+git clone -b sdk-$VULKAN_SDK_VERSION --depth=1 \
+https://github.com/KhronosGroup/SPIRV-Headers SPIRV-Tools/external/SPIRV-Headers
+
+mkdir -p SPIRV-Tools/build
+pushd SPIRV-Tools/build
+cmake .. \
+-DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_MINGW_PATH \
+-DCMAKE_INSTALL_PREFIX=/usr/x86_64-w64-mingw32/ \
+-GNinja -DCMAKE_BUILD_TYPE=Release \
+-DCMAKE_CROSSCOMPILING=1 \
+-DCMAKE_POLICY_DEFAULT_CMP0091=NEW
+
+ninja install
+popd
+
+# Building LLVM
+git clone -b release/14.x --depth=1 \
+https://github.com/llvm/llvm-project llvm-project
+
+git clone -b v14.0.0 --depth=1 \
+https://github.com/KhronosGroup/SPIRV-LLVM-Translator llvm-project/llvm/projects/SPIRV-LLVM-Translator
+
+mkdir llvm-project/build
+pushd llvm-project/build
+cmake ../llvm \
+-DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_MINGW_PATH \
+-DCMAKE_INSTALL_PREFIX=/usr/x86_64-w64-mingw32/ \
+-GNinja -DCMAKE_BUILD_TYPE=Release \
+-DCMAKE_CROSSCOMPILING=1 \
+-DLLVM_ENABLE_RTTI=ON \
+-DCROSS_TOOLCHAIN_FLAGS_NATIVE=-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=$PWD/../../SPIRV-Tools/external/SPIRV-Headers \
+-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=$PWD/../../SPIRV-Tools/external/SPIRV-Headers \
+-DLLVM_ENABLE_PROJECTS="clang" \
+-DLLVM_TARGETS_TO_BUILD="AMDGPU;X86" \
+-DLLVM_OPTIMIZED_TABLEGEN=TRUE \
+-DLLVM_ENABLE_ASSERTIONS=TRUE \
+-DLLVM_INCLUDE_UTILS=OFF \
+-DLLVM_INCLUDE_RUNTIMES=OFF \
+-DLLVM_INCLUDE_TESTS=OFF \
+-DLLVM_INCLUDE_EXAMPLES=OFF \
+-DLLVM_INCLUDE_GO_TESTS=OFF \
+-DLLVM_INCLUDE_BENCHMARKS=OFF \
+-DLLVM_BUILD_LLVM_C_DYLIB=OFF \
+-DLLVM_ENABLE_DIA_SDK=OFF \
+-DCLANG_BUILD_TOOLS=ON \
+-DLLVM_SPIRV_INCLUDE_TESTS=OFF
+
+ninja install
+popd
+
+# Building libclc
+mkdir llvm-project/build-libclc
+pushd llvm-project/build-libclc
+cmake ../libclc \
+-DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_MINGW_PATH \
+-DCMAKE_INSTALL_PREFIX=/usr/x86_64-w64-mingw32/ \
+-GNinja -DCMAKE_BUILD_TYPE=Release \
+-DCMAKE_CROSSCOMPILING=1 \
+-DCMAKE_POLICY_DEFAULT_CMP0091=NEW \
+-DCMAKE_CXX_FLAGS="-m64" \
+-DLLVM_CONFIG="/usr/x86_64-w64-mingw32/bin/llvm-config" \
+-DLLVM_CLANG="/usr/x86_64-w64-mingw32/bin/clang" \
+-DLLVM_AS="/usr/x86_64-w64-mingw32/bin/llvm-as" \
+-DLLVM_LINK="/usr/x86_64-w64-mingw32/bin/llvm-link" \
+-DLLVM_OPT="/usr/x86_64-w64-mingw32/bin/opt" \
+-DLLVM_SPIRV="/usr/x86_64-w64-mingw32/bin/llvm-spirv" \
+-DLIBCLC_TARGETS_TO_BUILD="spirv-mesa3d-;spirv64-mesa3d-"
+
+ninja install
+popd
+
+popd # ~/tmp
+
+# Cleanup ~/tmp
+rm -rf ~/tmp
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/x86_build.sh 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_build.sh
--- 22.1.3-1/.gitlab-ci/container/debian/x86_build.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_build.sh	2022-08-03 18:11:03.000000000 +0000
@@ -15,17 +15,15 @@ STABLE_EPHEMERAL=" \
       python3-pip \
       "
 
-# We need multiarch for Wine
-dpkg --add-architecture i386
 apt-get update
 
 apt-get install -y --no-remove \
       $STABLE_EPHEMERAL \
       check \
       clang \
-      cmake \
       libasan6 \
       libarchive-dev \
+      libclang-cpp13-dev \
       libclang-cpp11-dev \
       libgbm-dev \
       libglvnd-dev \
@@ -41,6 +39,7 @@ apt-get install -y --no-remove \
       libxcb-xfixes0-dev \
       libxcb1-dev \
       libxml2-dev \
+      llvm-13-dev \
       llvm-11-dev \
       llvm-9-dev \
       ocl-icd-opencl-dev \
@@ -49,25 +48,11 @@ apt-get install -y --no-remove \
       procps \
       spirv-tools \
       strace \
-      time \
-      wine \
-      wine32
+      time
 
 
 . .gitlab-ci/container/container_pre_build.sh
 
-
-# Debian's pkg-config wrapers for mingw are broken, and there's no sign that
-# they're going to be fixed, so we'll just have to fix it ourselves
-# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930492
-cat >/usr/local/bin/x86_64-w64-mingw32-pkg-config <<EOF
-#!/bin/sh
-
-PKG_CONFIG_LIBDIR=/usr/x86_64-w64-mingw32/lib/pkgconfig pkg-config \$@
-EOF
-chmod +x /usr/local/bin/x86_64-w64-mingw32-pkg-config
-
-
 # dependencies where we want a specific version
 export              XORG_RELEASES=https://xorg.freedesktop.org/releases/individual
 
@@ -89,10 +74,9 @@ cd shader-db
 make
 popd
 
-git clone https://github.com/microsoft/DirectX-Headers -b v1.0.1 --depth 1
-pushd DirectX-Headers
-mkdir build
-cd build
+git clone https://github.com/microsoft/DirectX-Headers -b v1.606.3 --depth 1
+mkdir -p DirectX-Headers/build
+pushd DirectX-Headers/build
 meson .. --backend=ninja --buildtype=release -Dbuild-test=false
 ninja
 ninja install
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/x86_mingw-toolchain.cmake 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_mingw-toolchain.cmake
--- 22.1.3-1/.gitlab-ci/container/debian/x86_mingw-toolchain.cmake	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_mingw-toolchain.cmake	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,8 @@
+set(CMAKE_SYSTEM_NAME Windows)
+set(CMAKE_SYSTEM_PROCESSOR x86_64)
+
+set(CMAKE_SYSROOT /usr/x86_64-w64-mingw32/)
+set(ENV{PKG_CONFIG} /usr/x86_64-w64-mingw32/bin/pkg-config)
+
+set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc-posix)
+set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++-posix)
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/x86_test-base.sh 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_test-base.sh
--- 22.1.3-1/.gitlab-ci/container/debian/x86_test-base.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_test-base.sh	2022-08-03 18:11:03.000000000 +0000
@@ -5,7 +5,7 @@ set -o xtrace
 
 export DEBIAN_FRONTEND=noninteractive
 
-apt-get install -y ca-certificates
+apt-get install -y ca-certificates gnupg2 software-properties-common
 
 sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
 
@@ -19,6 +19,10 @@ STABLE_EPHEMERAL=" \
       python3-wheel \
       "
 
+# Add llvm 13 to the build image
+apt-key add .gitlab-ci/container/debian/llvm-snapshot.gpg.key
+add-apt-repository "deb https://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-13 main"
+
 apt-get update
 apt-get dist-upgrade -y
 
@@ -27,6 +31,7 @@ apt-get install -y --no-remove \
       git-lfs \
       libasan6 \
       libexpat1 \
+      libllvm13 \
       libllvm11 \
       libllvm9 \
       liblz4-1 \
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/x86_test-gl.sh 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_test-gl.sh
--- 22.1.3-1/.gitlab-ci/container/debian/x86_test-gl.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_test-gl.sh	2022-08-03 18:11:03.000000000 +0000
@@ -13,6 +13,7 @@ STABLE_EPHEMERAL=" \
       bison \
       bzip2 \
       ccache \
+      clang-13 \
       clang-11 \
       cmake \
       flex \
@@ -20,6 +21,7 @@ STABLE_EPHEMERAL=" \
       glslang-tools \
       libasound2-dev \
       libcap-dev \
+      libclang-cpp13-dev \
       libclang-cpp11-dev \
       libelf-dev \
       libexpat1-dev \
@@ -37,6 +39,7 @@ STABLE_EPHEMERAL=" \
       libxext-dev \
       libxkbcommon-dev \
       libxrender-dev \
+      llvm-13-dev \
       llvm-11-dev \
       llvm-spirv \
       make \
@@ -48,11 +51,15 @@ STABLE_EPHEMERAL=" \
       xz-utils \
       "
 
+apt-get update
+
 apt-get install -y --no-remove \
       $STABLE_EPHEMERAL \
       clinfo \
       iptables \
+      libclang-common-13-dev \
       libclang-common-11-dev \
+      libclang-cpp13 \
       libclang-cpp11 \
       libcap2 \
       libegl1 \
diff -pruN 22.1.3-1/.gitlab-ci/container/debian/x86_test-vk.sh 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_test-vk.sh
--- 22.1.3-1/.gitlab-ci/container/debian/x86_test-vk.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/debian/x86_test-vk.sh	2022-08-03 18:11:03.000000000 +0000
@@ -1,4 +1,6 @@
 #!/bin/bash
+# The relative paths in this file only become valid at runtime.
+# shellcheck disable=SC1091
 
 set -e
 set -o xtrace
@@ -14,6 +16,7 @@ STABLE_EPHEMERAL=" \
       g++-mingw-w64-x86-64-posix \
       glslang-tools \
       libexpat1-dev \
+      gnupg2 \
       libgbm-dev \
       libgles2-mesa-dev \
       liblz4-dev \
@@ -35,14 +38,21 @@ STABLE_EPHEMERAL=" \
       p7zip \
       patch \
       pkg-config \
+      python3-dev \
       python3-distutils \
+      python3-pip \
+      python3-setuptools \
+      python3-wheel \
+      software-properties-common \
       wget \
+      wine64-tools \
       xz-utils \
       "
 
 apt-get install -y --no-remove \
       $STABLE_EPHEMERAL \
       libxcb-shm0 \
+      pciutils \
       python3-lxml \
       python3-simplejson \
       xinit \
@@ -52,12 +62,16 @@ apt-get install -y --no-remove \
 # We need multiarch for Wine
 dpkg --add-architecture i386
 
-apt-get update
+# Install a more recent version of Wine than exists in Debian.
+apt-key add .gitlab-ci/container/debian/winehq.gpg.key
+apt-add-repository https://dl.winehq.org/wine-builds/debian/
+apt update -qyy
+
+# Needed for Valve's tracing jobs to collect information about the graphics
+# hardware on the test devices.
+pip3 install gfxinfo-mupuf==0.0.9
 
-apt-get install -y --no-remove \
-      wine \
-      wine32 \
-      wine64
+apt install -y --no-remove --install-recommends winehq-stable
 
 function setup_wine() {
     export WINEDEBUG="-all"
@@ -86,28 +100,44 @@ EOF
 
 ############### Install DXVK
 
-DXVK_VERSION="1.8.1"
+dxvk_install_release() {
+    local DXVK_VERSION=${1:-"1.10.1"}
+
+    wget "https://github.com/doitsujin/dxvk/releases/download/v${DXVK_VERSION}/dxvk-${DXVK_VERSION}.tar.gz"
+    tar xzpf dxvk-"${DXVK_VERSION}".tar.gz
+    "dxvk-${DXVK_VERSION}"/setup_dxvk.sh install
+    rm -rf "dxvk-${DXVK_VERSION}"
+    rm dxvk-"${DXVK_VERSION}".tar.gz
+}
 
+# Install from a Github PR number
+dxvk_install_pr() {
+    local __prnum=$1
+
+    # NOTE: Clone all the ensite history of the repo so as not to think
+    # harder about cloning just enough for 'git describe' to work.  'git
+    # describe' is used by the dxvk build system to generate a
+    # dxvk_version Meson variable, which is nice-to-have.
+    git clone https://github.com/doitsujin/dxvk
+    pushd dxvk
+    git fetch origin pull/"$__prnum"/head:pr
+    git checkout pr
+    ./package-release.sh pr ../dxvk-build --no-package
+    popd
+    pushd ./dxvk-build/dxvk-pr
+    ./setup_dxvk.sh install
+    popd
+    rm -rf ./dxvk-build ./dxvk
+}
+
+# Sets up the WINEPREFIX for the DXVK installation commands below.
 setup_wine "/dxvk-wine64"
+dxvk_install_release "1.10.1"
+#dxvk_install_pr 2359
 
-wget "https://github.com/doitsujin/dxvk/releases/download/v${DXVK_VERSION}/dxvk-${DXVK_VERSION}.tar.gz"
-tar xzpf dxvk-"${DXVK_VERSION}".tar.gz
-dxvk-"${DXVK_VERSION}"/setup_dxvk.sh install
-rm -rf dxvk-"${DXVK_VERSION}"
-rm dxvk-"${DXVK_VERSION}".tar.gz
-
-############### Install Windows' apitrace binaries
-
-APITRACE_VERSION="10.0"
-APITRACE_VERSION_DATE=""
-
-wget "https://github.com/apitrace/apitrace/releases/download/${APITRACE_VERSION}/apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64.7z"
-7zr x "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64.7z" \
-      "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64/bin/apitrace.exe" \
-      "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64/bin/d3dretrace.exe"
-mv "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64" /apitrace-msvc-win64
-rm "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64.7z"
+############### Install apitrace binaries for wine
 
+. .gitlab-ci/container/install-wine-apitrace.sh
 # Add the apitrace path to the registry
 wine \
     reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment" \
@@ -144,6 +174,10 @@ PIGLIT_BUILD_TARGETS="piglit_replayer" .
 
 . .gitlab-ci/container/build-deqp.sh
 
+############### Build apitrace
+
+. .gitlab-ci/container/build-apitrace.sh
+
 ############### Build gfxreconstruct
 
 . .gitlab-ci/container/build-gfxreconstruct.sh
diff -pruN 22.1.3-1/.gitlab-ci/container/fedora/x86_build.sh 22.2.0~rc1-1/.gitlab-ci/container/fedora/x86_build.sh
--- 22.1.3-1/.gitlab-ci/container/fedora/x86_build.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/fedora/x86_build.sh	2022-08-03 18:11:03.000000000 +0000
@@ -25,6 +25,7 @@ dnf install -y --setopt=install_weak_dep
     gcc \
     gcc-c++ \
     gettext \
+    glslang \
     kernel-headers \
     llvm-devel \
     clang-devel \
diff -pruN 22.1.3-1/.gitlab-ci/container/gitlab-ci.yml 22.2.0~rc1-1/.gitlab-ci/container/gitlab-ci.yml
--- 22.1.3-1/.gitlab-ci/container/gitlab-ci.yml	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/gitlab-ci.yml	2022-08-03 18:11:03.000000000 +0000
@@ -23,6 +23,9 @@
   variables:
     MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${FDO_DISTRIBUTION_TAG}"
 
+.use-wine:
+  variables:
+    WINEPATH: "/usr/x86_64-w64-mingw32/bin;/usr/x86_64-w64-mingw32/lib;/usr/lib/gcc/x86_64-w64-mingw32/10-posix;c:/windows;c:/windows/system32"
 
 # Build the CI docker images.
 #
@@ -46,10 +49,11 @@
   extends:
     - .container-rules
     - .incorporate-templates-commit
+    - .use-wine
   variables:
     FDO_DISTRIBUTION_VERSION: bullseye-slim
     FDO_REPO_SUFFIX: $CI_JOB_NAME
-    FDO_DISTRIBUTION_EXEC: 'env FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/container/${CI_JOB_NAME}.sh'
+    FDO_DISTRIBUTION_EXEC: 'env "WINEPATH=${WINEPATH}" FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/container/${CI_JOB_NAME}.sh'
     # no need to pull the whole repo to build the container image
     GIT_STRATEGY: none
 
@@ -58,7 +62,7 @@
     - .container
     - .incorporate-base-tag+templates-commit
     # Don't want the .container rules
-    - .ci-run-policy
+    - .build-rules
 
 # Debian 11 based x86 build image base
 debian/x86_build-base:
@@ -113,6 +117,23 @@ debian/i386_build:
   needs:
     - debian/i386_build
 
+# Debian 11 based x86-mingw cross main build image
+debian/x86_build-mingw:
+  extends:
+    - .use-debian/x86_build-base
+  variables:
+    MESA_IMAGE_TAG: &debian-x86_build_mingw ${DEBIAN_BUILD_MINGW_TAG}
+
+.use-debian/x86_build_mingw:
+  extends:
+    - .set-image-base-tag
+  variables:
+    MESA_BASE_TAG: *debian-x86_build-base
+    MESA_IMAGE_PATH: ${DEBIAN_X86_BUILD_MINGW_IMAGE_PATH}
+    MESA_IMAGE_TAG: *debian-x86_build_mingw
+  needs:
+    - debian/x86_build-mingw
+
 # Debian 11 based ppc64el cross-build image
 debian/ppc64el_build:
   extends:
@@ -185,7 +206,7 @@ debian/x86_test-gl:
   extends: .use-debian/x86_test-base
   variables:
     FDO_DISTRIBUTION_EXEC: 'env KERNEL_URL=${KERNEL_URL} FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/container/${CI_JOB_NAME}.sh'
-    KERNEL_URL: &kernel-rootfs-url "https://gitlab.freedesktop.org/gfx-ci/linux/-/archive/v5.16-for-mesa-ci-991fec6622591/linux-v5.16-for-mesa-ci-991fec6622591.tar.bz2"
+    KERNEL_URL: &kernel-rootfs-url "https://gitlab.freedesktop.org/gfx-ci/linux/-/archive/v5.17-for-mesa-ci-b78f7870d97b/linux-v5.17-for-mesa-ci-b78f7870d97b.tar.bz2"
     MESA_IMAGE_TAG: &debian-x86_test-gl ${DEBIAN_X86_TEST_GL_TAG}
 
 .use-debian/x86_test-gl:
@@ -256,7 +277,7 @@ fedora/x86_build:
 
 .kernel+rootfs:
   extends:
-    - .ci-run-policy
+    - .build-rules
   stage: container
   variables:
     GIT_STRATEGY: fetch
@@ -307,7 +328,7 @@ debian/arm_test:
     - .fdo.container-build@debian
     - .container
     # Don't want the .container rules
-    - .ci-run-policy
+    - .build-rules
   needs:
     - kernel+rootfs_arm64
     - kernel+rootfs_armhf
@@ -347,7 +368,7 @@ debian/arm_test:
 
 .windows_container_build:
   inherit:
-    default: false
+    default: [retry]
   extends:
     - .container
     - .windows-docker-vs2019
@@ -361,47 +382,64 @@ debian/arm_test:
   tags:
     - windows
     - shell
-    - "1809"
+    - "2022"
     - mesa
   script:
     - .\.gitlab-ci\windows\mesa_container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $MESA_IMAGE $MESA_UPSTREAM_IMAGE ${DOCKERFILE} ${MESA_BASE_IMAGE}
 
+windows_vs2019:
+  inherit:
+    default: [retry]
+  extends:
+    - .windows_container_build
+  variables:
+    MESA_IMAGE_PATH: &windows_vs_image_path ${WINDOWS_X64_VS_PATH}
+    MESA_IMAGE_TAG: &windows_vs_image_tag ${WINDOWS_X64_VS_TAG}
+    DOCKERFILE: Dockerfile_vs
+    MESA_BASE_IMAGE: "mcr.microsoft.com/windows/server:ltsc2022"
+
 windows_build_vs2019:
   inherit:
-    default: false
+    default: [retry]
   extends:
     - .windows_container_build
+  rules:
+    - if: '$MICROSOFT_FARM == "offline"'
+      when: never
+    - !reference [.build-rules, rules]
   variables:
     MESA_IMAGE_PATH: &windows_build_image_path ${WINDOWS_X64_BUILD_PATH}
     MESA_IMAGE_TAG: &windows_build_image_tag ${WINDOWS_X64_BUILD_TAG}
     DOCKERFILE: Dockerfile_build
+    MESA_BASE_IMAGE_PATH: *windows_vs_image_path
+    MESA_BASE_IMAGE_TAG: *windows_vs_image_tag
+    MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${MESA_BASE_IMAGE_TAG}"
   timeout: 2h 30m # LLVM takes ages
+  needs:
+    - windows_vs2019
 
 windows_test_vs2019:
   inherit:
-    default: false
+    default: [retry]
   extends:
     - .windows_container_build
   rules:
     - if: '$MICROSOFT_FARM == "offline"'
       when: never
-    - !reference [.ci-run-policy, rules]
+    - !reference [.build-rules, rules]
   variables:
     MESA_IMAGE_PATH: &windows_test_image_path ${WINDOWS_X64_TEST_PATH}
     MESA_IMAGE_TAG: &windows_test_image_tag ${WINDOWS_X64_BUILD_TAG}--${WINDOWS_X64_TEST_TAG}
     DOCKERFILE: Dockerfile_test
-    # Right now this only needs the VS install to get DXIL.dll. Maybe see about decoupling this at some point
-    MESA_BASE_IMAGE_PATH: *windows_build_image_path
-    MESA_BASE_IMAGE_TAG: *windows_build_image_tag
+    MESA_BASE_IMAGE_PATH: *windows_vs_image_path
+    MESA_BASE_IMAGE_TAG: *windows_vs_image_tag
     MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${MESA_BASE_IMAGE_TAG}"
-  script:
-    - .\.gitlab-ci\windows\mesa_container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $MESA_IMAGE $MESA_UPSTREAM_IMAGE Dockerfile_test ${MESA_BASE_IMAGE}
   needs:
-    - windows_build_vs2019
+    - windows_vs2019
 
 .use-windows_build_vs2019:
   inherit:
-    default: false
+    default: [retry]
   extends: .windows-docker-vs2019
   image: "$MESA_IMAGE"
   variables:
@@ -412,7 +450,7 @@ windows_test_vs2019:
 
 .use-windows_test_vs2019:
   inherit:
-    default: false
+    default: [retry]
   extends: .windows-docker-vs2019
   image: "$MESA_IMAGE"
   variables:
diff -pruN 22.1.3-1/.gitlab-ci/container/install-wine-apitrace.sh 22.2.0~rc1-1/.gitlab-ci/container/install-wine-apitrace.sh
--- 22.1.3-1/.gitlab-ci/container/install-wine-apitrace.sh	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/install-wine-apitrace.sh	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+APITRACE_VERSION="11.1"
+APITRACE_VERSION_DATE=""
+
+wget "https://github.com/apitrace/apitrace/releases/download/${APITRACE_VERSION}/apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64.7z"
+7zr x "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64.7z" \
+      "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64/bin/apitrace.exe" \
+      "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64/bin/d3dretrace.exe"
+mv "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64" /apitrace-msvc-win64
+rm "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64.7z"
+
+
diff -pruN 22.1.3-1/.gitlab-ci/container/lava_build.sh 22.2.0~rc1-1/.gitlab-ci/container/lava_build.sh
--- 22.1.3-1/.gitlab-ci/container/lava_build.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/container/lava_build.sh	2022-08-03 18:11:03.000000000 +0000
@@ -25,6 +25,7 @@ check_minio "${CI_PROJECT_PATH}"
 if [[ "$DEBIAN_ARCH" = "arm64" ]]; then
     GCC_ARCH="aarch64-linux-gnu"
     KERNEL_ARCH="arm64"
+    SKQP_ARCH="arm64"
     DEFCONFIG="arch/arm64/configs/defconfig"
     DEVICE_TREES="arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dtb"
     DEVICE_TREES+=" arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dtb"
@@ -35,11 +36,13 @@ if [[ "$DEBIAN_ARCH" = "arm64" ]]; then
     DEVICE_TREES+=" arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dtb"
     DEVICE_TREES+=" arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi-juniper-sku16.dtb"
     DEVICE_TREES+=" arch/arm64/boot/dts/nvidia/tegra210-p3450-0000.dtb"
-    DEVICE_TREES+=" arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-limozeen-nots.dtb"
+    DEVICE_TREES+=" arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-limozeen-nots-r5.dtb"
     KERNEL_IMAGE_NAME="Image"
+
 elif [[ "$DEBIAN_ARCH" = "armhf" ]]; then
     GCC_ARCH="arm-linux-gnueabihf"
     KERNEL_ARCH="arm"
+    SKQP_ARCH="arm"
     DEFCONFIG="arch/arm/configs/multi_v7_defconfig"
     DEVICE_TREES="arch/arm/boot/dts/rk3288-veyron-jaq.dtb"
     DEVICE_TREES+=" arch/arm/boot/dts/sun8i-h3-libretech-all-h3-cc.dtb"
@@ -49,6 +52,7 @@ elif [[ "$DEBIAN_ARCH" = "armhf" ]]; the
 else
     GCC_ARCH="x86_64-linux-gnu"
     KERNEL_ARCH="x86_64"
+    SKQP_ARCH="x64"
     DEFCONFIG="arch/x86/configs/x86_64_defconfig"
     DEVICE_TREES=""
     KERNEL_IMAGE_NAME="bzImage"
@@ -152,12 +156,12 @@ mv /deqp /lava-files/rootfs-${DEBIAN_ARC
 
 
 ############### Build SKQP
-if [[ "$DEBIAN_ARCH" = "arm64" ]]; then
-    SKQP_ARCH="arm64" . .gitlab-ci/container/build-skqp.sh
+if [[ "$DEBIAN_ARCH" = "arm64" ]] \
+  || [[ "$DEBIAN_ARCH" = "amd64" ]]; then
+    . .gitlab-ci/container/build-skqp.sh
     mv /skqp /lava-files/rootfs-${DEBIAN_ARCH}/.
 fi
 
-
 ############### Build piglit
 PIGLIT_OPTS="-DPIGLIT_BUILD_DMA_BUF_TESTS=ON" . .gitlab-ci/container/build-piglit.sh
 mv /piglit /lava-files/rootfs-${DEBIAN_ARCH}/.
@@ -210,7 +214,9 @@ fi
 set -e
 
 cp .gitlab-ci/container/create-rootfs.sh /lava-files/rootfs-${DEBIAN_ARCH}/.
+cp .gitlab-ci/container/debian/llvm-snapshot.gpg.key /lava-files/rootfs-${DEBIAN_ARCH}/.
 chroot /lava-files/rootfs-${DEBIAN_ARCH} sh /create-rootfs.sh
+rm /lava-files/rootfs-${DEBIAN_ARCH}/llvm-snapshot.gpg.key
 rm /lava-files/rootfs-${DEBIAN_ARCH}/create-rootfs.sh
 
 
diff -pruN 22.1.3-1/.gitlab-ci/crosvm-init.sh 22.2.0~rc1-1/.gitlab-ci/crosvm-init.sh
--- 22.1.3-1/.gitlab-ci/crosvm-init.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/crosvm-init.sh	2022-08-03 18:11:03.000000000 +0000
@@ -4,7 +4,7 @@ set -e
 
 VSOCK_STDOUT=$1
 VSOCK_STDERR=$2
-VSOCK_TEMP_DIR=$3
+VM_TEMP_DIR=$3
 
 mount -t proc none /proc
 mount -t sysfs none /sys
@@ -12,7 +12,7 @@ mkdir -p /dev/pts
 mount -t devpts devpts /dev/pts
 mount -t tmpfs tmpfs /tmp
 
-. ${VSOCK_TEMP_DIR}/crosvm-env.sh
+. ${VM_TEMP_DIR}/crosvm-env.sh
 
 # .gitlab-ci.yml script variable is using relative paths to install directory,
 # so change to that dir before running `crosvm-script`
@@ -31,7 +31,7 @@ DMESG_PID=$!
 # Transfer the errors and crosvm-script output via a pair of virtio-vsocks
 socat -d -u pipe:${STDERR_FIFO} vsock-listen:${VSOCK_STDERR} &
 socat -d -U vsock-listen:${VSOCK_STDOUT} \
-    system:"stdbuf -eL sh ${VSOCK_TEMP_DIR}/crosvm-script.sh 2> ${STDERR_FIFO}; echo \$? > ${VSOCK_TEMP_DIR}/exit_code",nofork
+    system:"stdbuf -eL sh ${VM_TEMP_DIR}/crosvm-script.sh 2> ${STDERR_FIFO}; echo \$? > ${VM_TEMP_DIR}/exit_code",nofork
 
 kill ${DMESG_PID}
 wait
diff -pruN 22.1.3-1/.gitlab-ci/crosvm-runner.sh 22.2.0~rc1-1/.gitlab-ci/crosvm-runner.sh
--- 22.1.3-1/.gitlab-ci/crosvm-runner.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/crosvm-runner.sh	2022-08-03 18:11:03.000000000 +0000
@@ -2,6 +2,10 @@
 
 set -e
 
+# If run outside of a deqp-runner invoction (e.g. piglit trace replay), then act
+# the same as the first thread in its threadpool.
+THREAD=${DEQP_RUNNER_THREAD:-0}
+
 #
 # Helper to generate CIDs for virtio-vsock based communication with processes
 # running inside crosvm guests.
@@ -17,7 +21,7 @@ set -e
 #  - VSOCK_STDOUT, VSOCK_STDERR: the port numbers the guest should accept
 #    vsock connections on in order to transfer output messages
 #
-#  - VSOCK_TEMP_DIR: the temporary directory path used to pass additional
+#  - VM_TEMP_DIR: the temporary directory path used to pass additional
 #    context data towards the guest
 #
 set_vsock_context() {
@@ -26,19 +30,12 @@ set_vsock_context() {
         exit 1
     }
 
-    local dir_prefix="/tmp-vsock."
-    local cid_prefix=0
-    unset VSOCK_TEMP_DIR
-
-    while [ ${cid_prefix} -lt 128 ]; do
-        VSOCK_TEMP_DIR=${dir_prefix}${cid_prefix}
-        mkdir "${VSOCK_TEMP_DIR}" >/dev/null 2>&1 && break || unset VSOCK_TEMP_DIR
-        cid_prefix=$((cid_prefix + 1))
-    done
-
-    [ -n "${VSOCK_TEMP_DIR}" ] || return 1
+    VM_TEMP_DIR="/tmp-vm.${THREAD}"
+    # Clear out any leftover files from a previous run.
+    rm -rf $VM_TEMP_DIR
+    mkdir $VM_TEMP_DIR || return 1
 
-    VSOCK_CID=$(((CI_JOB_ID & 0x1ffffff) | ((cid_prefix & 0x7f) << 25)))
+    VSOCK_CID=$(((CI_JOB_ID & 0x1ffffff) | ((${THREAD} & 0x7f) << 25)))
     VSOCK_STDOUT=5001
     VSOCK_STDERR=5002
 
@@ -51,19 +48,26 @@ if [ -n "${1##*.sh}" ] && [ -z "${1##*"d
     export DEQP_BIN_DIR
 fi
 
-set_vsock_context || { echo "Could not generate crosvm vsock CID" >&2; exit 1; }
+VM_SOCKET=crosvm-${THREAD}.sock
 
-# Ensure cleanup on script exit
-trap 'exit ${exit_code}' INT TERM
-trap 'exit_code=$?; [ -z "${CROSVM_PID}${SOCAT_PIDS}" ] || kill ${CROSVM_PID} ${SOCAT_PIDS} >/dev/null 2>&1 || true; rm -rf ${VSOCK_TEMP_DIR}' EXIT
+# Terminate any existing crosvm, if a previous invocation of this shell script
+# was terminated due to timeouts.  This "vm stop" may fail if the crosvm died
+# without cleaning itself up.
+if [ -e $VM_SOCKET ]; then
+   crosvm stop $VM_SOCKET || rm -rf $VM_SOCKET
+   # Wait for socats from that invocation to drain
+   sleep 5
+fi
+
+set_vsock_context || { echo "Could not generate crosvm vsock CID" >&2; exit 1; }
 
 # Securely pass the current variables to the crosvm environment
 echo "Variables passed through:"
 SCRIPT_DIR=$(readlink -en "${0%/*}")
-${SCRIPT_DIR}/common/generate-env.sh | tee ${VSOCK_TEMP_DIR}/crosvm-env.sh
+${SCRIPT_DIR}/common/generate-env.sh | tee ${VM_TEMP_DIR}/crosvm-env.sh
 
 # Set the crosvm-script as the arguments of the current script
-echo "$@" > ${VSOCK_TEMP_DIR}/crosvm-script.sh
+echo "$@" > ${VM_TEMP_DIR}/crosvm-script.sh
 
 # Setup networking
 /usr/sbin/iptables-legacy -w -t nat -A POSTROUTING -o eth0 -j MASQUERADE
@@ -71,16 +75,14 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
 
 # Start background processes to receive output from guest
 socat -u vsock-connect:${VSOCK_CID}:${VSOCK_STDERR},retry=200,interval=0.1 stderr &
-SOCAT_PIDS=$!
 socat -u vsock-connect:${VSOCK_CID}:${VSOCK_STDOUT},retry=200,interval=0.1 stdout &
-SOCAT_PIDS="${SOCAT_PIDS} $!"
 
 # Prepare to start crosvm
 unset DISPLAY
 unset XDG_RUNTIME_DIR
 
 CROSVM_KERN_ARGS="quiet console=null root=my_root rw rootfstype=virtiofs ip=192.168.30.2::192.168.30.1:255.255.255.0:crosvm:eth0"
-CROSVM_KERN_ARGS="${CROSVM_KERN_ARGS} init=${SCRIPT_DIR}/crosvm-init.sh -- ${VSOCK_STDOUT} ${VSOCK_STDERR} ${VSOCK_TEMP_DIR}"
+CROSVM_KERN_ARGS="${CROSVM_KERN_ARGS} init=${SCRIPT_DIR}/crosvm-init.sh -- ${VSOCK_STDOUT} ${VSOCK_STDERR} ${VM_TEMP_DIR}"
 
 [ "${CROSVM_GALLIUM_DRIVER}" = "llvmpipe" ] && \
     CROSVM_LIBGL_ALWAYS_SOFTWARE=true || CROSVM_LIBGL_ALWAYS_SOFTWARE=false
@@ -95,21 +97,15 @@ crosvm run \
     --gpu "${CROSVM_GPU_ARGS}" -m 4096 -c 2 --disable-sandbox \
     --shared-dir /:my_root:type=fs:writeback=true:timeout=60:cache=always \
     --host_ip "192.168.30.1" --netmask "255.255.255.0" --mac "AA:BB:CC:00:00:12" \
+    -s $VM_SOCKET \
     --cid ${VSOCK_CID} -p "${CROSVM_KERN_ARGS}" \
-    /lava-files/${KERNEL_IMAGE_NAME:-bzImage} > ${VSOCK_TEMP_DIR}/crosvm 2>&1 &
+    /lava-files/${KERNEL_IMAGE_NAME:-bzImage} > ${VM_TEMP_DIR}/crosvm 2>&1
 
-# Wait for crosvm process to terminate
-CROSVM_PID=$!
-wait ${CROSVM_PID}
 CROSVM_RET=$?
-unset CROSVM_PID
 
 [ ${CROSVM_RET} -eq 0 ] && {
-    # socat background processes terminate gracefully on remote peers exit
-    wait
-    unset SOCAT_PIDS
     # The actual return code is the crosvm guest script's exit code
-    CROSVM_RET=$(cat ${VSOCK_TEMP_DIR}/exit_code 2>/dev/null)
+    CROSVM_RET=$(cat ${VM_TEMP_DIR}/exit_code 2>/dev/null)
     # Force error when the guest script's exit code is not available
     CROSVM_RET=${CROSVM_RET:-1}
 }
@@ -118,7 +114,7 @@ unset CROSVM_PID
 [ ${CROSVM_RET} -eq 0 ] || {
     set +x
     echo "Dumping crosvm output.." >&2
-    cat ${VSOCK_TEMP_DIR}/crosvm >&2
+    cat ${VM_TEMP_DIR}/crosvm >&2
     set -x
 }
 
diff -pruN 22.1.3-1/.gitlab-ci/deqp-runner.sh 22.2.0~rc1-1/.gitlab-ci/deqp-runner.sh
--- 22.1.3-1/.gitlab-ci/deqp-runner.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/deqp-runner.sh	2022-08-03 18:11:03.000000000 +0000
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
 echo -e "\e[0Ksection_start:$(date +%s):test_setup[collapsed=true]\r\e[0Kpreparing test setup"
 
diff -pruN 22.1.3-1/.gitlab-ci/docs/bare-metal.rst 22.2.0~rc1-1/.gitlab-ci/docs/bare-metal.rst
--- 22.1.3-1/.gitlab-ci/docs/bare-metal.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/docs/bare-metal.rst	2022-08-03 18:11:03.000000000 +0000
@@ -200,11 +200,13 @@ want a pass-through HTTP cache.  On your
 
 Add the server setup files:
 
-.. literalinclude: fdo-cache:
+.. literalinclude:: fdo-cache
    :name: /etc/nginx/sites-available/fdo-cache
+   :caption: /etc/nginx/sites-available/fdo-cache
 
-.. literalinclude: uri-caching.conf:
-   :name: /etc/nginx/sites-available/snippets/uri-caching.conf
+.. literalinclude:: uri-caching.conf
+   :name: /etc/nginx/snippets/uri-caching.conf
+   :caption: /etc/nginx/snippets/uri-caching.conf
 
 Edit the listener addresses in fdo-cache to suit the ethernet interface that
 your devices are on.
diff -pruN 22.1.3-1/.gitlab-ci/docs/index.rst 22.2.0~rc1-1/.gitlab-ci/docs/index.rst
--- 22.1.3-1/.gitlab-ci/docs/index.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/docs/index.rst	2022-08-03 18:11:03.000000000 +0000
@@ -39,7 +39,7 @@ empty (or set to the default ``.gitlab-c
 If you're having issues with the GitLab CI, your best bet is to ask
 about it on ``#freedesktop`` on OFTC and tag `Daniel Stone
 <https://gitlab.freedesktop.org/daniels>`__ (``daniels`` on IRC) or
-`Eric Anholt <https://gitlab.freedesktop.org/anholt>`__ (``anholt`` on
+`Emma Anholt <https://gitlab.freedesktop.org/anholt>`__ (``anholt`` on
 IRC).
 
 The three GitLab CI systems currently integrated are:
diff -pruN 22.1.3-1/.gitlab-ci/docs/kernel.rst 22.2.0~rc1-1/.gitlab-ci/docs/kernel.rst
--- 22.1.3-1/.gitlab-ci/docs/kernel.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/docs/kernel.rst	2022-08-03 18:11:03.000000000 +0000
@@ -18,7 +18,7 @@ Linux mainline, that is why Mesa has its
 as the base for newer kernels.
 
 So, one should base the kernel uprev from the last tag used in the Mesa CI,
-please refer to `.gitlab-ci.yml` `KERNEL_URL` variable.
+please refer to `.gitlab-ci/container/gitlab-ci.yml` `KERNEL_URL` variable.
 Every tag has a standard naming: `vX.YZ-for-mesa-ci-<commit_short_SHA>`, which
 can be created via the command:
 
@@ -28,7 +28,7 @@ Building Kernel
 ---------------
 
 When Mesa CI generates a new rootfs image, the Linux Kernel is built based on
-the script located at `.gitlab-ci/build-kernel.sh`.
+the script located at `.gitlab-ci/container/build-kernel.sh`.
 
 Updating Kconfigs
 ^^^^^^^^^^^^^^^^^
@@ -56,8 +56,8 @@ Updating image tags
 
 Every kernel uprev should update 3 image tags, located at two files.
 
-:code:`.gitlab-ci.yml` tag
-^^^^^^^^^^^^^^^^^^^^^^^^^^
+:code:`.gitlab-ci/container/gitlab-ci.yml` tag
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 - **KERNEL_URL** for the location of the new kernel
 
 :code:`.gitlab-ci/image-tags.yml` tags
diff -pruN 22.1.3-1/.gitlab-ci/docs/skqp.rst 22.2.0~rc1-1/.gitlab-ci/docs/skqp.rst
--- 22.1.3-1/.gitlab-ci/docs/skqp.rst	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/docs/skqp.rst	2022-08-03 18:11:03.000000000 +0000
@@ -10,7 +10,7 @@ The rendering tests have support for GL,
 rendering scenarios.
 And the unit tests check the GPU behavior without rendering images.
 
-Tests 
+Tests
 -----
 
 Render tests design
@@ -19,7 +19,7 @@ Render tests design
 It is worth noting that `rendertests.txt` can bring some detail about each test
 expectation, so each test can have a max pixel error count, to tell skqp that it
 is OK to have at most that number of errors for that test. See also:
-https://github.com/google/skia/blob/main/tools/skqp/README_ALGORITHM.md
+https://github.com/google/skia/blob/c29454d1c9ebed4758a54a69798869fa2e7a36e0/tools/skqp/README_ALGORITHM.md
 
 .. _test-location:
 
diff -pruN 22.1.3-1/.gitlab-ci/image-tags.yml 22.2.0~rc1-1/.gitlab-ci/image-tags.yml
--- 22.1.3-1/.gitlab-ci/image-tags.yml	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/image-tags.yml	2022-08-03 18:11:03.000000000 +0000
@@ -1,21 +1,27 @@
 variables:
    DEBIAN_X86_BUILD_BASE_IMAGE: "debian/x86_build-base"
-   DEBIAN_BASE_TAG: "2022-02-21-libdrm"
+   DEBIAN_BASE_TAG: "2022-07-01-bb-llvm13"
 
    DEBIAN_X86_BUILD_IMAGE_PATH: "debian/x86_build"
-   DEBIAN_BUILD_TAG: "2022-02-21-libdrm"
+   DEBIAN_BUILD_TAG: "2022-07-14-directx-headers"
+
+   DEBIAN_X86_BUILD_MINGW_IMAGE_PATH: "debian/x86_build-mingw"
+   DEBIAN_BUILD_MINGW_TAG: "2022-07-14-directx-headers"
 
    DEBIAN_X86_TEST_BASE_IMAGE: "debian/x86_test-base"
 
    DEBIAN_X86_TEST_IMAGE_PATH: "debian/x86_test-gl"
-   DEBIAN_X86_TEST_GL_TAG: "2022-04-07-virgl-crosvm"
-   DEBIAN_X86_TEST_VK_TAG: "2022-04-05-deqp-runner"
+   DEBIAN_X86_TEST_GL_TAG: "2022-07-06-virgl-update"
+   DEBIAN_X86_TEST_VK_TAG: "2022-07-18-apitrace-11-1"
+
+   FEDORA_X86_BUILD_TAG: "2022-04-24-spirv-tools-5"
+   KERNEL_ROOTFS_TAG: "2022-07-06-virgl-update"
 
-   FEDORA_X86_BUILD_TAG: "2022-03-18-spirv-tools-5"
-   KERNEL_ROOTFS_TAG: "2022-04-07-prefix-skqp"
+   WINDOWS_X64_VS_PATH: "windows/x64_vs"
+   WINDOWS_X64_VS_TAG: "2022-06-15-vs-winsdk"
 
    WINDOWS_X64_BUILD_PATH: "windows/x64_build"
-   WINDOWS_X64_BUILD_TAG: "2022-20-02-base_split"
+   WINDOWS_X64_BUILD_TAG: "2022-06-15-vs-winsdk"
 
    WINDOWS_X64_TEST_PATH: "windows/x64_test"
-   WINDOWS_X64_TEST_TAG: "2022-04-13-dozen_ci"
+   WINDOWS_X64_TEST_TAG: "2022-06-15-vs-winsdk"
diff -pruN 22.1.3-1/.gitlab-ci/lava/exceptions.py 22.2.0~rc1-1/.gitlab-ci/lava/exceptions.py
--- 22.1.3-1/.gitlab-ci/lava/exceptions.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/lava/exceptions.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,28 @@
+from datetime import timedelta
+
+
+class MesaCIException(Exception):
+    pass
+
+
+class MesaCITimeoutError(MesaCIException):
+    def __init__(self, *args, timeout_duration: timedelta) -> None:
+        super().__init__(*args)
+        self.timeout_duration = timeout_duration
+
+
+class MesaCIRetryError(MesaCIException):
+    def __init__(self, *args, retry_count: int) -> None:
+        super().__init__(*args)
+        self.retry_count = retry_count
+
+
+class MesaCIParseException(MesaCIException):
+    pass
+
+
+class MesaCIKnownIssueException(MesaCIException):
+    """Exception raised when the Mesa CI script finds something in the logs that
+    is known to cause the LAVA job to eventually fail"""
+
+    pass
diff -pruN 22.1.3-1/.gitlab-ci/lava/lava-gitlab-ci.yml 22.2.0~rc1-1/.gitlab-ci/lava/lava-gitlab-ci.yml
--- 22.1.3-1/.gitlab-ci/lava/lava-gitlab-ci.yml	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/lava/lava-gitlab-ci.yml	2022-08-03 18:11:03.000000000 +0000
@@ -1,6 +1,4 @@
 .lava-test:
-  extends:
-    - .ci-run-policy
   # Cancel job if a newer commit is pushed to the same branch
   interruptible: true
   variables:
diff -pruN 22.1.3-1/.gitlab-ci/lava/lava_job_submitter.py 22.2.0~rc1-1/.gitlab-ci/lava/lava_job_submitter.py
--- 22.1.3-1/.gitlab-ci/lava/lava_job_submitter.py	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/lava/lava_job_submitter.py	2022-08-03 18:11:03.000000000 +0000
@@ -1,42 +1,46 @@
 #!/usr/bin/env python3
 #
-# Copyright (C) 2020, 2021 Collabora Limited
-# Author: Gustavo Padovan <gustavo.padovan@collabora.com>
+# Copyright (C) 2020 - 2022 Collabora Limited
+# Authors:
+#     Gustavo Padovan <gustavo.padovan@collabora.com>
+#     Guilherme Gallo <guilherme.gallo@collabora.com>
 #
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
+# SPDX-License-Identifier: MIT
 
 """Send a job to LAVA, track it and collect log back"""
 
+
 import argparse
+import contextlib
 import pathlib
+import re
 import sys
 import time
 import traceback
 import urllib.parse
-import xmlrpc
-
+import xmlrpc.client
 from datetime import datetime, timedelta
 from os import getenv
+from typing import Any, Optional
 
 import lavacli
 import yaml
+from lava.exceptions import (
+    MesaCIException,
+    MesaCIKnownIssueException,
+    MesaCIParseException,
+    MesaCIRetryError,
+    MesaCITimeoutError,
+)
+from lava.utils import (
+    CONSOLE_LOG,
+    GitlabSection,
+    LogFollower,
+    LogSectionType,
+    fatal_err,
+    hide_sensitive_data,
+    print_log,
+)
 from lavacli.utils import loader
 
 # Timeout in seconds to decide if the device from the dispatched LAVA job has
@@ -53,17 +57,8 @@ LOG_POLLING_TIME_SEC = int(getenv("LAVA_
 # How many retries should be made when a timeout happen.
 NUMBER_OF_RETRIES_TIMEOUT_DETECTION = int(getenv("LAVA_NUMBER_OF_RETRIES_TIMEOUT_DETECTION", 2))
 
-
-def print_log(msg):
-    print("{}: {}".format(datetime.now(), msg))
-
-def fatal_err(msg):
-    print_log(msg)
-    sys.exit(1)
-
-
-def hide_sensitive_data(yaml_data, hide_tag="HIDEME"):
-    return "".join(line for line in yaml_data.splitlines(True) if hide_tag not in line)
+# How many attempts should be made when a timeout happen during LAVA device boot.
+NUMBER_OF_ATTEMPTS_LAVA_BOOT = int(getenv("LAVA_NUMBER_OF_ATTEMPTS_LAVA_BOOT", 3))
 
 
 def generate_lava_yaml(args):
@@ -76,9 +71,13 @@ def generate_lava_yaml(args):
         'context': {
             'extra_nfsroot_args': ' init=/init rootwait usbcore.quirks=0bda:8153:k'
         },
-        'timeouts': {
-            'job': {
-                'minutes': args.job_timeout
+        "timeouts": {
+            "job": {"minutes": args.job_timeout},
+            "action": {"minutes": 3},
+            "actions": {
+                "depthcharge-action": {
+                    "minutes": 3 * NUMBER_OF_ATTEMPTS_LAVA_BOOT,
+                }
             }
         },
     }
@@ -109,20 +108,22 @@ def generate_lava_yaml(args):
 
     # always boot over NFS
     boot = {
-      'timeout': { 'minutes': 25 },
-      'method': args.boot_method,
-      'commands': 'nfs',
-      'prompts': ['lava-shell:'],
+        "failure_retry": NUMBER_OF_ATTEMPTS_LAVA_BOOT,
+        "method": args.boot_method,
+        "commands": "nfs",
+        "prompts": ["lava-shell:"],
     }
 
     # skeleton test definition: only declaring each job as a single 'test'
     # since LAVA's test parsing is not useful to us
+    run_steps = []
     test = {
       'timeout': { 'minutes': args.job_timeout },
       'failure_retry': 1,
       'definitions': [ {
         'name': 'mesa',
         'from': 'inline',
+        'lava-signal': 'kmsg',
         'path': 'inline/mesa.yaml',
         'repository': {
           'metadata': {
@@ -132,10 +133,8 @@ def generate_lava_yaml(args):
             'scope': [ 'functional' ],
             'format': 'Lava-Test Test Definition 1.0',
           },
-          'parse': {
-            'pattern': r'hwci: (?P<test_case_id>\S*):\s+(?P<result>(pass|fail))'
-          },
           'run': {
+            "steps": run_steps
           },
         },
       } ],
@@ -145,27 +144,39 @@ def generate_lava_yaml(args):
     #   - inline .gitlab-ci/common/init-stage1.sh
     #   - fetch and unpack per-pipeline build artifacts from build job
     #   - fetch and unpack per-job environment from lava-submit.sh
-    #   - exec .gitlab-ci/common/init-stage2.sh 
-    init_lines = []
+    #   - exec .gitlab-ci/common/init-stage2.sh
 
     with open(args.first_stage_init, 'r') as init_sh:
-      init_lines += [ x.rstrip() for x in init_sh if not x.startswith('#') and x.rstrip() ]
+      run_steps += [ x.rstrip() for x in init_sh if not x.startswith('#') and x.rstrip() ]
 
-    with open(args.jwt_file) as jwt_file:
-        init_lines += [
-            "set +x",
-            f'echo -n "{jwt_file.read()}" > "{args.jwt_file}"  # HIDEME',
-            "set -x",
+    if args.jwt_file:
+        with open(args.jwt_file) as jwt_file:
+            run_steps += [
+                "set +x",
+                f'echo -n "{jwt_file.read()}" > "{args.jwt_file}"  # HIDEME',
+                "set -x",
+                f'echo "export CI_JOB_JWT_FILE={args.jwt_file}" >> /set-job-env-vars.sh',
+            ]
+    else:
+        run_steps += [
+            "echo Could not find jwt file, disabling MINIO requests...",
+            "sed -i '/MINIO_RESULTS_UPLOAD/d' /set-job-env-vars.sh",
         ]
 
-    init_lines += [
+    run_steps += [
       'mkdir -p {}'.format(args.ci_project_dir),
       'wget -S --progress=dot:giga -O- {} | tar -xz -C {}'.format(args.build_url, args.ci_project_dir),
       'wget -S --progress=dot:giga -O- {} | tar -xz -C /'.format(args.job_rootfs_overlay_url),
-      f'echo "export CI_JOB_JWT_FILE={args.jwt_file}" >> /set-job-env-vars.sh',
-      'exec /init-stage2.sh',
+
+      # Sleep a bit to give time for bash to dump shell xtrace messages into
+      # console which may cause interleaving with LAVA_SIGNAL_STARTTC in some
+      # devices like a618.
+      'sleep 1',
+
+      # Putting CI_JOB name as the testcase name, it may help LAVA farm
+      # maintainers with monitoring
+      f"lava-test-case 'mesa-ci_{args.mesa_job_name}' --shell /init-stage2.sh",
     ]
-    test['definitions'][0]['repository']['run']['steps'] = init_lines
 
     values['actions'] = [
       { 'deploy': deploy },
@@ -211,135 +222,303 @@ def _call_proxy(fn, *args):
             fatal_err("FATAL: Fault: {} (code: {})".format(err.faultString, err.faultCode))
 
 
-def get_job_results(proxy, job_id, test_suite, test_case):
-    # Look for infrastructure errors and retry if we see them.
-    results_yaml = _call_proxy(proxy.results.get_testjob_results_yaml, job_id)
-    results = yaml.load(results_yaml, Loader=loader(False))
-    for res in results:
-        metadata = res["metadata"]
-        if "result" not in metadata or metadata["result"] != "fail":
-            continue
-        if 'error_type' in metadata and metadata['error_type'] == "Infrastructure":
-            print_log("LAVA job {} failed with Infrastructure Error. Retry.".format(job_id))
-            return False
-        if 'case' in metadata and metadata['case'] == "validate":
-            print_log("LAVA job {} failed validation (possible download error). Retry.".format(job_id))
+class LAVAJob:
+    COLOR_STATUS_MAP = {
+        "pass": CONSOLE_LOG["FG_GREEN"],
+        "hung": CONSOLE_LOG["FG_YELLOW"],
+        "fail": CONSOLE_LOG["FG_RED"],
+        "canceled": CONSOLE_LOG["FG_MAGENTA"],
+    }
+
+    def __init__(self, proxy, definition):
+        self.job_id = None
+        self.proxy = proxy
+        self.definition = definition
+        self.last_log_line = 0
+        self.last_log_time = None
+        self.is_finished = False
+        self.status = "created"
+
+    def heartbeat(self):
+        self.last_log_time = datetime.now()
+        self.status = "running"
+
+    def validate(self) -> Optional[dict]:
+        """Returns a dict with errors, if the validation fails.
+
+        Returns:
+            Optional[dict]: a dict with the validation errors, if any
+        """
+        return _call_proxy(self.proxy.scheduler.jobs.validate, self.definition, True)
+
+    def submit(self):
+        try:
+            self.job_id = _call_proxy(self.proxy.scheduler.jobs.submit, self.definition)
+        except MesaCIException:
             return False
+        return True
 
-    results_yaml = _call_proxy(proxy.results.get_testcase_results_yaml, job_id, test_suite, test_case)
-    results = yaml.load(results_yaml, Loader=loader(False))
-    if not results:
-        fatal_err("LAVA: no result for test_suite '{}', test_case '{}'".format(test_suite, test_case))
+    def cancel(self):
+        if self.job_id:
+            self.proxy.scheduler.jobs.cancel(self.job_id)
+
+    def is_started(self) -> bool:
+        waiting_states = ["Submitted", "Scheduling", "Scheduled"]
+        job_state: dict[str, str] = _call_proxy(
+            self.proxy.scheduler.job_state, self.job_id
+        )
+        return job_state["job_state"] not in waiting_states
 
-    print_log("LAVA: result for test_suite '{}', test_case '{}': {}".format(test_suite, test_case, results[0]['result']))
-    if results[0]['result'] != 'pass':
-        fatal_err("FAIL")
-
-    return True
-
-def wait_until_job_is_started(proxy, job_id):
-    print_log(f"Waiting for job {job_id} to start.")
-    current_state = "Submitted"
-    waiting_states = ["Submitted", "Scheduling", "Scheduled"]
-    while current_state in waiting_states:
-        job_state = _call_proxy(proxy.scheduler.job_state, job_id)
-        current_state = job_state["job_state"]
+    def _load_log_from_data(self, data) -> list[str]:
+        lines = []
+        # When there is no new log data, the YAML is empty
+        if loaded_lines := yaml.load(str(data), Loader=loader(False)):
+            lines = loaded_lines
+            self.last_log_line += len(lines)
+        return lines
+
+    def get_logs(self) -> list[str]:
+        try:
+            (finished, data) = _call_proxy(
+                self.proxy.scheduler.jobs.logs, self.job_id, self.last_log_line
+            )
+            self.is_finished = finished
+            return self._load_log_from_data(data)
+
+        except Exception as mesa_ci_err:
+            raise MesaCIParseException(
+                f"Could not get LAVA job logs. Reason: {mesa_ci_err}"
+            ) from mesa_ci_err
+
+    def parse_job_result_from_log(
+        self, lava_lines: list[dict[str, str]]
+    ) -> list[dict[str, str]]:
+        """Use the console log to catch if the job has completed successfully or
+        not. Returns the list of log lines until the result line."""
+
+        last_line = None  # Print all lines. lines[:None] == lines[:]
+
+        for idx, line in enumerate(lava_lines):
+            if result := re.search(r"hwci: mesa: (pass|fail)", line):
+                self.is_finished = True
+                self.status = result.group(1)
+
+                last_line = idx + 1
+                # We reached the log end here. hwci script has finished.
+                break
+        return lava_lines[:last_line]
 
-        time.sleep(WAIT_FOR_DEVICE_POLLING_TIME_SEC)
-    print_log(f"Job {job_id} started.")
 
-def follow_job_execution(proxy, job_id):
-    line_count = 0
-    finished = False
-    last_time_logs = datetime.now()
-    while not finished:
-        (finished, data) = _call_proxy(proxy.scheduler.jobs.logs, job_id, line_count)
-        if logs := yaml.load(str(data), Loader=loader(False)):
-            # Reset the timeout
-            last_time_logs = datetime.now()
-            for line in logs:
-                print("{} {}".format(line["dt"], line["msg"]))
-
-            line_count += len(logs)
-
-        else:
-            time_limit = timedelta(seconds=DEVICE_HANGING_TIMEOUT_SEC)
-            if datetime.now() - last_time_logs > time_limit:
-                print_log("LAVA job {} doesn't advance (machine got hung?). Retry.".format(job_id))
-                return False
-
-        # `proxy.scheduler.jobs.logs` does not block, even when there is no
-        # new log to be fetched. To avoid dosing the LAVA dispatcher
-        # machine, let's add a sleep to save them some stamina.
-        time.sleep(LOG_POLLING_TIME_SEC)
-
-    return True
-
-def show_job_data(proxy, job_id):
-    show = _call_proxy(proxy.scheduler.jobs.show, job_id)
-    for field, value in show.items():
-        print("{}\t: {}".format(field, value))
+def find_exception_from_metadata(metadata, job_id):
+    if "result" not in metadata or metadata["result"] != "fail":
+        return
+    if "error_type" in metadata:
+        error_type = metadata["error_type"]
+        if error_type == "Infrastructure":
+            raise MesaCIException(
+                f"LAVA job {job_id} failed with Infrastructure Error. Retry."
+            )
+        if error_type == "Job":
+            # This happens when LAVA assumes that the job cannot terminate or
+            # with mal-formed job definitions. As we are always validating the
+            # jobs, only the former is probable to happen. E.g.: When some LAVA
+            # action timed out more times than expected in job definition.
+            raise MesaCIException(
+                f"LAVA job {job_id} failed with JobError "
+                "(possible LAVA timeout misconfiguration/bug). Retry."
+            )
+    if "case" in metadata and metadata["case"] == "validate":
+        raise MesaCIException(
+            f"LAVA job {job_id} failed validation (possible download error). Retry."
+        )
+    return metadata
 
 
-def validate_job(proxy, job_file):
-    try:
-        return _call_proxy(proxy.scheduler.jobs.validate, job_file, True)
-    except:
-        return False
+def find_lava_error(job) -> None:
+    # Look for infrastructure errors and retry if we see them.
+    results_yaml = _call_proxy(job.proxy.results.get_testjob_results_yaml, job.job_id)
+    results = yaml.load(results_yaml, Loader=loader(False))
+    for res in results:
+        metadata = res["metadata"]
+        find_exception_from_metadata(metadata, job.job_id)
 
-def submit_job(proxy, job_file):
-    return _call_proxy(proxy.scheduler.jobs.submit, job_file)
+    # If we reach this far, it means that the job ended without hwci script
+    # result and no LAVA infrastructure problem was found
+    job.status = "fail"
+
+
+def show_job_data(job):
+    with GitlabSection(
+        "job_data",
+        "LAVA job info",
+        type=LogSectionType.LAVA_POST_PROCESSING,
+        start_collapsed=True,
+    ):
+        show = _call_proxy(job.proxy.scheduler.jobs.show, job.job_id)
+        for field, value in show.items():
+            print("{}\t: {}".format(field, value))
+
+
+def fetch_logs(job, max_idle_time, log_follower) -> None:
+    # Poll to check for new logs, assuming that a prolonged period of
+    # silence means that the device has died and we should try it again
+    if datetime.now() - job.last_log_time > max_idle_time:
+        max_idle_time_min = max_idle_time.total_seconds() / 60
+
+        raise MesaCITimeoutError(
+            f"{CONSOLE_LOG['BOLD']}"
+            f"{CONSOLE_LOG['FG_YELLOW']}"
+            f"LAVA job {job.job_id} does not respond for {max_idle_time_min} "
+            "minutes. Retry."
+            f"{CONSOLE_LOG['RESET']}",
+            timeout_duration=max_idle_time,
+        )
 
+    time.sleep(LOG_POLLING_TIME_SEC)
 
-def retriable_follow_job(proxy, yaml_file):
-    retry_count = NUMBER_OF_RETRIES_TIMEOUT_DETECTION
+    # The XMLRPC binary packet may be corrupted, causing a YAML scanner error.
+    # Retry the log fetching several times before exposing the error.
+    for _ in range(5):
+        with contextlib.suppress(MesaCIParseException):
+            new_log_lines = job.get_logs()
+            break
+    else:
+        raise MesaCIParseException
 
-    while retry_count >= 0:
-        job_id = submit_job(proxy, yaml_file)
+    if log_follower.feed(new_log_lines):
+        # If we had non-empty log data, we can assure that the device is alive.
+        job.heartbeat()
+    parsed_lines = log_follower.flush()
+
+    # Only parse job results when the script reaches the end of the logs.
+    # Depending on how much payload the RPC scheduler.jobs.logs get, it may
+    # reach the LAVA_POST_PROCESSING phase.
+    if log_follower.current_section.type in (
+        LogSectionType.TEST_CASE,
+        LogSectionType.LAVA_POST_PROCESSING,
+    ):
+        parsed_lines = job.parse_job_result_from_log(parsed_lines)
 
-        print_log("LAVA job id: {}".format(job_id))
+    for line in parsed_lines:
+        print_log(line)
 
-        wait_until_job_is_started(proxy, job_id)
 
-        if not follow_job_execution(proxy, job_id):
-            print_log(f"Job {job_id} has timed out. Cancelling it.")
-            # Cancel the job as it is considered unreachable by Mesa CI.
-            proxy.scheduler.jobs.cancel(job_id)
+def follow_job_execution(job):
+    try:
+        job.submit()
+    except Exception as mesa_ci_err:
+        raise MesaCIException(
+            f"Could not submit LAVA job. Reason: {mesa_ci_err}"
+        ) from mesa_ci_err
 
-            retry_count -= 1
-            continue
+    print_log(f"Waiting for job {job.job_id} to start.")
+    while not job.is_started():
+        time.sleep(WAIT_FOR_DEVICE_POLLING_TIME_SEC)
+    print_log(f"Job {job.job_id} started.")
 
-        show_job_data(proxy, job_id)
+    gl = GitlabSection(
+        id="lava_boot",
+        header="LAVA boot",
+        type=LogSectionType.LAVA_BOOT,
+        start_collapsed=True,
+    )
+    print(gl.start())
+    max_idle_time = timedelta(seconds=DEVICE_HANGING_TIMEOUT_SEC)
+    with LogFollower(current_section=gl) as lf:
+
+        max_idle_time = timedelta(seconds=DEVICE_HANGING_TIMEOUT_SEC)
+        # Start to check job's health
+        job.heartbeat()
+        while not job.is_finished:
+            fetch_logs(job, max_idle_time, lf)
+
+    show_job_data(job)
+
+    # Mesa Developers expect to have a simple pass/fail job result.
+    # If this does not happen, it probably means a LAVA infrastructure error
+    # happened.
+    if job.status not in ["pass", "fail"]:
+        find_lava_error(job)
+
+
+def print_job_final_status(job):
+    if job.status == "running":
+        job.status = "hung"
+
+    color = LAVAJob.COLOR_STATUS_MAP.get(job.status, CONSOLE_LOG["FG_RED"])
+    print_log(
+        f"{color}"
+        f"LAVA Job finished with status: {job.status}"
+        f"{CONSOLE_LOG['RESET']}"
+    )
 
-        if get_job_results(proxy, job_id, "0_mesa", "mesa") == True:
-            break
-    else:
-        # The script attempted all the retries. The job seemed to fail.
-        return False
 
-    return True
+def retriable_follow_job(proxy, job_definition) -> LAVAJob:
+    retry_count = NUMBER_OF_RETRIES_TIMEOUT_DETECTION
+
+    for attempt_no in range(1, retry_count + 2):
+        job = LAVAJob(proxy, job_definition)
+        try:
+            follow_job_execution(job)
+            return job
+        except MesaCIKnownIssueException as found_issue:
+            print_log(found_issue)
+            job.status = "canceled"
+        except MesaCIException as mesa_exception:
+            print_log(mesa_exception)
+            job.cancel()
+        except KeyboardInterrupt as e:
+            print_log("LAVA job submitter was interrupted. Cancelling the job.")
+            job.cancel()
+            raise e
+        finally:
+            print_log(
+                f"{CONSOLE_LOG['BOLD']}"
+                f"Finished executing LAVA job in the attempt #{attempt_no}"
+                f"{CONSOLE_LOG['RESET']}"
+            )
+            print_job_final_status(job)
+
+    raise MesaCIRetryError(
+        f"{CONSOLE_LOG['BOLD']}"
+        f"{CONSOLE_LOG['FG_RED']}"
+        "Job failed after it exceeded the number of "
+        f"{retry_count} retries."
+        f"{CONSOLE_LOG['RESET']}",
+        retry_count=retry_count,
+    )
+
+
+def treat_mesa_job_name(args):
+    # Remove mesa job names with spaces, which breaks the lava-test-case command
+    args.mesa_job_name = args.mesa_job_name.split(" ")[0]
 
 
 def main(args):
     proxy = setup_lava_proxy()
 
-    yaml_file = generate_lava_yaml(args)
+    job_definition = generate_lava_yaml(args)
 
     if args.dump_yaml:
-        print(hide_sensitive_data(generate_lava_yaml(args)))
+        with GitlabSection(
+            "yaml_dump",
+            "LAVA job definition (YAML)",
+            type=LogSectionType.LAVA_BOOT,
+            start_collapsed=True,
+        ):
+            print(hide_sensitive_data(job_definition))
+    job = LAVAJob(proxy, job_definition)
+
+    if errors := job.validate():
+        fatal_err(f"Error in LAVA job definition: {errors}")
+    print_log("LAVA job definition validated successfully")
 
     if args.validate_only:
-        ret = validate_job(proxy, yaml_file)
-        if not ret:
-            fatal_err("Error in LAVA job definition")
-        print("LAVA job definition validated successfully")
         return
 
-    if not retriable_follow_job(proxy, yaml_file):
-        fatal_err(
-            "Job failed after it exceeded the number of"
-            f"{NUMBER_OF_RETRIES_TIMEOUT_DETECTION} retries."
-        )
+    finished_job = retriable_follow_job(proxy, job_definition)
+    exit_code = 0 if finished_job.status == "pass" else 1
+    sys.exit(exit_code)
 
 
 def create_parser():
@@ -363,9 +542,11 @@ def create_parser():
     parser.add_argument("--validate-only", action='store_true')
     parser.add_argument("--dump-yaml", action='store_true')
     parser.add_argument("--visibility-group")
+    parser.add_argument("--mesa-job-name")
 
     return parser
 
+
 if __name__ == "__main__":
     # given that we proxy from DUT -> LAVA dispatcher -> LAVA primary -> us ->
     # GitLab runner -> GitLab primary -> user, safe to say we don't need any
@@ -377,4 +558,5 @@ if __name__ == "__main__":
 
     parser.set_defaults(func=main)
     args = parser.parse_args()
+    treat_mesa_job_name(args)
     args.func(args)
diff -pruN 22.1.3-1/.gitlab-ci/lava/lava-pytest.sh 22.2.0~rc1-1/.gitlab-ci/lava/lava-pytest.sh
--- 22.1.3-1/.gitlab-ci/lava/lava-pytest.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/lava/lava-pytest.sh	2022-08-03 18:11:03.000000000 +0000
@@ -31,4 +31,5 @@ TEST_DIR=${CI_PROJECT_DIR}/.gitlab-ci/te
 PYTHONPATH="${TEST_DIR}:${PYTHONPATH}" python3 -m \
     pytest "${TEST_DIR}" \
             -W ignore::DeprecationWarning \
-            --junitxml=artifacts/ci_scripts_report.xml
+            --junitxml=artifacts/ci_scripts_report.xml \
+            -m 'not slow'
diff -pruN 22.1.3-1/.gitlab-ci/lava/lava-submit.sh 22.2.0~rc1-1/.gitlab-ci/lava/lava-submit.sh
--- 22.1.3-1/.gitlab-ci/lava/lava-submit.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/lava/lava-submit.sh	2022-08-03 18:11:03.000000000 +0000
@@ -28,7 +28,7 @@ ci-fairy minio cp job-rootfs-overlay.tar
 
 touch results/lava.log
 tail -f results/lava.log &
-artifacts/lava/lava_job_submitter.py \
+PYTHONPATH=artifacts/ artifacts/lava/lava_job_submitter.py \
 	--dump-yaml \
 	--pipeline-info "$CI_JOB_NAME: $CI_PIPELINE_URL on $CI_COMMIT_REF_NAME ${CI_NODE_INDEX}/${CI_NODE_TOTAL}" \
 	--rootfs-url-prefix "https://${BASE_SYSTEM_HOST_PATH}" \
@@ -45,4 +45,6 @@ artifacts/lava/lava_job_submitter.py \
 	--kernel-image-type "${KERNEL_IMAGE_TYPE}" \
 	--boot-method ${BOOT_METHOD} \
 	--visibility-group ${VISIBILITY_GROUP} \
-	--lava-tags "${LAVA_TAGS}" >> results/lava.log
+	--lava-tags "${LAVA_TAGS}" \
+	--mesa-job-name "$CI_JOB_NAME" \
+	>> results/lava.log
diff -pruN 22.1.3-1/.gitlab-ci/lava/utils/console_format.py 22.2.0~rc1-1/.gitlab-ci/lava/utils/console_format.py
--- 22.1.3-1/.gitlab-ci/lava/utils/console_format.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/lava/utils/console_format.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,10 @@
+CONSOLE_LOG = {
+    "FG_GREEN": "\x1b[1;32;5;197m",
+    "FG_RED": "\x1b[1;38;5;197m",
+    "FG_YELLOW": "\x1b[1;33;5;197m",
+    "FG_MAGENTA": "\x1b[1;35;5;197m",
+    "RESET": "\x1b[0m",
+    "UNDERLINED": "\x1b[3m",
+    "BOLD": "\x1b[1m",
+    "DIM": "\x1b[2m",
+}
diff -pruN 22.1.3-1/.gitlab-ci/lava/utils/gitlab_section.py 22.2.0~rc1-1/.gitlab-ci/lava/utils/gitlab_section.py
--- 22.1.3-1/.gitlab-ci/lava/utils/gitlab_section.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/lava/utils/gitlab_section.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,84 @@
+from __future__ import annotations
+
+import re
+from dataclasses import dataclass, field
+from datetime import datetime, timedelta
+from typing import TYPE_CHECKING, Optional
+
+from lava.utils.console_format import CONSOLE_LOG
+
+if TYPE_CHECKING:
+    from lava.utils.log_section import LogSectionType
+
+
+@dataclass
+class GitlabSection:
+    id: str
+    header: str
+    type: LogSectionType
+    start_collapsed: bool = False
+    escape: str = "\x1b[0K"
+    colour: str = f"{CONSOLE_LOG['BOLD']}{CONSOLE_LOG['FG_GREEN']}"
+    __start_time: Optional[datetime] = field(default=None, init=False)
+    __end_time: Optional[datetime] = field(default=None, init=False)
+
+    @classmethod
+    def section_id_filter(cls, value) -> str:
+        return str(re.sub(r"[^\w_-]+", "-", value))
+
+    def __post_init__(self):
+        self.id = self.section_id_filter(self.id)
+
+    @property
+    def has_started(self) -> bool:
+        return self.__start_time is not None
+
+    @property
+    def has_finished(self) -> bool:
+        return self.__end_time is not None
+
+    def get_timestamp(self, time: datetime) -> str:
+        unix_ts = datetime.timestamp(time)
+        return str(int(unix_ts))
+
+    def section(self, marker: str, header: str, time: datetime) -> str:
+        preamble = f"{self.escape}section_{marker}"
+        collapse = marker == "start" and self.start_collapsed
+        collapsed = "[collapsed=true]" if collapse else ""
+        section_id = f"{self.id}{collapsed}"
+
+        timestamp = self.get_timestamp(time)
+        before_header = ":".join([preamble, timestamp, section_id])
+        colored_header = f"{self.colour}{header}\x1b[0m" if header else ""
+        header_wrapper = "\r" + f"{self.escape}{colored_header}"
+
+        return f"{before_header}{header_wrapper}"
+
+    def __enter__(self):
+        print(self.start())
+        return self
+
+    def __exit__(self, exc_type, exc_val, exc_tb):
+        print(self.end())
+
+    def start(self) -> str:
+        assert not self.has_finished, "Starting an already finished section"
+        self.__start_time = datetime.now()
+        return self.section(marker="start", header=self.header, time=self.__start_time)
+
+    def end(self) -> str:
+        assert self.has_started, "Ending an uninitialized section"
+        self.__end_time = datetime.now()
+        assert (
+            self.__end_time >= self.__start_time
+        ), "Section execution time will be negative"
+        return self.section(marker="end", header="", time=self.__end_time)
+
+    def delta_time(self) -> Optional[timedelta]:
+        if self.__start_time and self.__end_time:
+            return self.__end_time - self.__start_time
+
+        if self.has_started:
+            return datetime.now() - self.__start_time
+
+        return None
diff -pruN 22.1.3-1/.gitlab-ci/lava/utils/__init__.py 22.2.0~rc1-1/.gitlab-ci/lava/utils/__init__.py
--- 22.1.3-1/.gitlab-ci/lava/utils/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/lava/utils/__init__.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,11 @@
+from .console_format import CONSOLE_LOG
+from .gitlab_section import GitlabSection
+from .log_follower import (
+    LogFollower,
+    fatal_err,
+    fix_lava_color_log,
+    fix_lava_gitlab_section_log,
+    hide_sensitive_data,
+    print_log,
+)
+from .log_section import LogSection, LogSectionType
diff -pruN 22.1.3-1/.gitlab-ci/lava/utils/lava_log_hints.py 22.2.0~rc1-1/.gitlab-ci/lava/utils/lava_log_hints.py
--- 22.1.3-1/.gitlab-ci/lava/utils/lava_log_hints.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/lava/utils/lava_log_hints.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,43 @@
+from __future__ import annotations
+
+import re
+from dataclasses import dataclass, field
+from typing import TYPE_CHECKING, Any
+
+if TYPE_CHECKING:
+    from lava.utils import LogFollower
+
+from lava.exceptions import MesaCIKnownIssueException
+from lava.utils.console_format import CONSOLE_LOG
+from lava.utils.log_section import LogSectionType
+
+
+@dataclass
+class LAVALogHints:
+    log_follower: LogFollower
+    has_r8152_issue_history: bool = field(default=False, init=False)
+
+    def detect_failure(self, new_lines: list[dict[str, Any]]):
+        for line in new_lines:
+            self.detect_r8152_issue(line)
+
+    def detect_r8152_issue(self, line):
+        if (
+            self.log_follower.phase == LogSectionType.TEST_CASE
+            and line["lvl"] == "target"
+        ):
+            if re.search(r"r8152 \S+ eth0: Tx status -71", line["msg"]):
+                self.has_r8152_issue_history = True
+                return
+
+            if self.has_r8152_issue_history and re.search(
+                r"nfs: server \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} not responding, still trying",
+                line["msg"],
+            ):
+                raise MesaCIKnownIssueException(
+                    f"{CONSOLE_LOG['FG_MAGENTA']}"
+                    "Probable network issue failure encountered, retrying the job"
+                    f"{CONSOLE_LOG['RESET']}"
+                )
+
+        self.has_r8152_issue_history = False
diff -pruN 22.1.3-1/.gitlab-ci/lava/utils/log_follower.py 22.2.0~rc1-1/.gitlab-ci/lava/utils/log_follower.py
--- 22.1.3-1/.gitlab-ci/lava/utils/log_follower.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/lava/utils/log_follower.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,218 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2022 Collabora Limited
+# Author: Guilherme Gallo <guilherme.gallo@collabora.com>
+#
+# SPDX-License-Identifier: MIT
+
+"""
+Some utilities to analyse logs, create gitlab sections and other quality of life
+improvements
+"""
+
+import logging
+import re
+import sys
+from dataclasses import dataclass, field
+from datetime import datetime, timedelta
+from typing import Optional, Union
+
+from lava.exceptions import MesaCITimeoutError
+from lava.utils.console_format import CONSOLE_LOG
+from lava.utils.gitlab_section import GitlabSection
+from lava.utils.lava_log_hints import LAVALogHints
+from lava.utils.log_section import (
+    DEFAULT_GITLAB_SECTION_TIMEOUTS,
+    FALLBACK_GITLAB_SECTION_TIMEOUT,
+    LOG_SECTIONS,
+    LogSectionType,
+)
+
+
+@dataclass
+class LogFollower:
+    current_section: Optional[GitlabSection] = None
+    timeout_durations: dict[LogSectionType, timedelta] = field(
+        default_factory=lambda: DEFAULT_GITLAB_SECTION_TIMEOUTS,
+    )
+    fallback_timeout: timedelta = FALLBACK_GITLAB_SECTION_TIMEOUT
+    _buffer: list[str] = field(default_factory=list, init=False)
+    log_hints: LAVALogHints = field(init=False)
+
+    def __post_init__(self):
+        section_is_created = bool(self.current_section)
+        section_has_started = bool(
+            self.current_section and self.current_section.has_started
+        )
+        self.log_hints = LAVALogHints(self)
+        assert (
+            section_is_created == section_has_started
+        ), "Can't follow logs beginning from uninitialized GitLab sections."
+
+    @property
+    def phase(self) -> LogSectionType:
+        return (
+            self.current_section.type
+            if self.current_section
+            else LogSectionType.UNKNOWN
+        )
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, exc_type, exc_val, exc_tb):
+        """Cleanup existing buffer if this object gets out from the context"""
+        self.clear_current_section()
+        last_lines = self.flush()
+        for line in last_lines:
+            print(line)
+
+    def watchdog(self):
+        if not self.current_section:
+            return
+
+        timeout_duration = self.timeout_durations.get(
+            self.current_section.type, self.fallback_timeout
+        )
+
+        if self.current_section.delta_time() > timeout_duration:
+            raise MesaCITimeoutError(
+                f"Gitlab Section {self.current_section} has timed out",
+                timeout_duration=timeout_duration,
+            )
+
+    def clear_current_section(self):
+        if self.current_section and not self.current_section.has_finished:
+            self._buffer.append(self.current_section.end())
+            self.current_section = None
+
+    def update_section(self, new_section: GitlabSection):
+        # Sections can have redundant regex to find them to mitigate LAVA
+        # interleaving kmsg and stderr/stdout issue.
+        if self.current_section and self.current_section.id == new_section.id:
+            return
+        self.clear_current_section()
+        self.current_section = new_section
+        self._buffer.append(new_section.start())
+
+    def manage_gl_sections(self, line):
+        if isinstance(line["msg"], list):
+            logging.debug("Ignoring messages as list. Kernel dumps.")
+            return
+
+        for log_section in LOG_SECTIONS:
+            if new_section := log_section.from_log_line_to_section(line):
+                self.update_section(new_section)
+
+    def detect_kernel_dump_line(self, line: dict[str, Union[str, list]]) -> bool:
+        # line["msg"] can be a list[str] when there is a kernel dump
+        if isinstance(line["msg"], list):
+            return line["lvl"] == "debug"
+
+        # result level has dict line["msg"]
+        if not isinstance(line["msg"], str):
+            return False
+
+        # we have a line, check if it is a kernel message
+        if re.search(r"\[[\d\s]{5}\.[\d\s]{6}\] +\S{2,}", line["msg"]):
+            print_log(f"{CONSOLE_LOG['BOLD']}{line['msg']}{CONSOLE_LOG['RESET']}")
+            return True
+
+        return False
+
+    def feed(self, new_lines: list[dict[str, str]]) -> bool:
+        """Input data to be processed by LogFollower instance
+        Returns true if the DUT (device under test) seems to be alive.
+        """
+
+        self.watchdog()
+
+        # No signal of job health in the log
+        is_job_healthy = False
+
+        for line in new_lines:
+            if self.detect_kernel_dump_line(line):
+                continue
+
+            # At least we are fed with a non-kernel dump log, it seems that the
+            # job is progressing
+            is_job_healthy = True
+            self.manage_gl_sections(line)
+            if parsed_line := parse_lava_line(line):
+                self._buffer.append(parsed_line)
+
+        self.log_hints.detect_failure(new_lines)
+
+        return is_job_healthy
+
+    def flush(self) -> list[str]:
+        buffer = self._buffer
+        self._buffer = []
+        return buffer
+
+
+def fix_lava_color_log(line):
+    """This function is a temporary solution for the color escape codes mangling
+    problem. There is some problem in message passing between the LAVA
+    dispatcher and the device under test (DUT). Here \x1b character is missing
+    before `[:digit::digit:?:digit:?m` ANSI TTY color codes, or the more
+    complicated ones with number values for text format before background and
+    foreground colors.
+    When this problem is fixed on the LAVA side, one should remove this function.
+    """
+    line["msg"] = re.sub(r"(\[(\d+;){0,2}\d{1,3}m)", "\x1b" + r"\1", line["msg"])
+
+
+def fix_lava_gitlab_section_log(line):
+    """This function is a temporary solution for the Gitlab section markers
+    mangling problem. Gitlab parses the following lines to define a collapsible
+    gitlab section in their log:
+    - \x1b[0Ksection_start:timestamp:section_id[collapsible=true/false]\r\x1b[0Ksection_header
+    - \x1b[0Ksection_end:timestamp:section_id\r\x1b[0K
+    There is some problem in message passing between the LAVA dispatcher and the
+    device under test (DUT), that digests \x1b and \r control characters
+    incorrectly. When this problem is fixed on the LAVA side, one should remove
+    this function.
+    """
+    if match := re.match(r"\[0K(section_\w+):(\d+):(\S+)\[0K([\S ]+)?", line["msg"]):
+        marker, timestamp, id_collapsible, header = match.groups()
+        # The above regex serves for both section start and end lines.
+        # When the header is None, it means we are dealing with `section_end` line
+        header = header or ""
+        line["msg"] = f"\x1b[0K{marker}:{timestamp}:{id_collapsible}\r\x1b[0K{header}"
+
+
+def parse_lava_line(line) -> Optional[str]:
+    prefix = ""
+    suffix = ""
+
+    if line["lvl"] in ["results", "feedback", "debug"]:
+        return
+    elif line["lvl"] in ["warning", "error"]:
+        prefix = CONSOLE_LOG["FG_RED"]
+        suffix = CONSOLE_LOG["RESET"]
+    elif line["lvl"] == "input":
+        prefix = "$ "
+        suffix = ""
+    elif line["lvl"] == "target":
+        fix_lava_color_log(line)
+        fix_lava_gitlab_section_log(line)
+
+    return f'{prefix}{line["msg"]}{suffix}'
+
+
+def print_log(msg):
+    # Reset color from timestamp, since `msg` can tint the terminal color
+    print(f"{CONSOLE_LOG['RESET']}{datetime.now()}: {msg}")
+
+
+def fatal_err(msg):
+    colored_msg = f"{CONSOLE_LOG['FG_RED']}"
+    f"{msg}"
+    f"{CONSOLE_LOG['RESET']}"
+    print_log(colored_msg)
+    sys.exit(1)
+
+
+def hide_sensitive_data(yaml_data, hide_tag="HIDEME"):
+    return "".join(line for line in yaml_data.splitlines(True) if hide_tag not in line)
diff -pruN 22.1.3-1/.gitlab-ci/lava/utils/log_section.py 22.2.0~rc1-1/.gitlab-ci/lava/utils/log_section.py
--- 22.1.3-1/.gitlab-ci/lava/utils/log_section.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/lava/utils/log_section.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,88 @@
+import re
+from dataclasses import dataclass
+from datetime import timedelta
+from enum import Enum, auto
+from typing import Optional, Pattern, Union
+
+from lava.utils.gitlab_section import GitlabSection
+
+
+class LogSectionType(Enum):
+    UNKNOWN = auto()
+    LAVA_BOOT = auto()
+    TEST_SUITE = auto()
+    TEST_CASE = auto()
+    LAVA_POST_PROCESSING = auto()
+
+
+FALLBACK_GITLAB_SECTION_TIMEOUT = timedelta(minutes=10)
+DEFAULT_GITLAB_SECTION_TIMEOUTS = {
+    # Empirically, successful device boot in LAVA time takes less than 3
+    # minutes.
+    # LAVA itself is configured to attempt thrice to boot the device,
+    # summing up to 9 minutes.
+    # It is better to retry the boot than cancel the job and re-submit to avoid
+    # the enqueue delay.
+    LogSectionType.LAVA_BOOT: timedelta(minutes=9),
+    # Test suite phase is where the initialization happens.
+    LogSectionType.TEST_SUITE: timedelta(minutes=5),
+    # Test cases may take a long time, this script has no right to interrupt
+    # them. But if the test case takes almost 1h, it will never succeed due to
+    # Gitlab job timeout.
+    LogSectionType.TEST_CASE: timedelta(minutes=60),
+    # LAVA post processing may refer to a test suite teardown, or the
+    # adjustments to start the next test_case
+    LogSectionType.LAVA_POST_PROCESSING: timedelta(minutes=5),
+}
+
+
+@dataclass(frozen=True)
+class LogSection:
+    regex: Union[Pattern, str]
+    levels: tuple[str]
+    section_id: str
+    section_header: str
+    section_type: LogSectionType
+    collapsed: bool = False
+
+    def from_log_line_to_section(
+        self, lava_log_line: dict[str, str]
+    ) -> Optional[GitlabSection]:
+        if lava_log_line["lvl"] not in self.levels:
+            return
+
+        if match := re.search(self.regex, lava_log_line["msg"]):
+            section_id = self.section_id.format(*match.groups())
+            section_header = self.section_header.format(*match.groups())
+            return GitlabSection(
+                id=section_id,
+                header=section_header,
+                type=self.section_type,
+                start_collapsed=self.collapsed,
+            )
+
+
+LOG_SECTIONS = (
+    LogSection(
+        regex=re.compile(r"<?STARTTC>? ([^>]*)"),
+        levels=("target", "debug"),
+        section_id="{}",
+        section_header="test_case {}",
+        section_type=LogSectionType.TEST_CASE,
+    ),
+    LogSection(
+        regex=re.compile(r"<?STARTRUN>? ([^>]*)"),
+        levels=("target", "debug"),
+        section_id="{}",
+        section_header="test_suite {}",
+        section_type=LogSectionType.TEST_SUITE,
+    ),
+    LogSection(
+        regex=re.compile(r"ENDTC>? ([^>]+)"),
+        levels=("target", "debug"),
+        section_id="post-{}",
+        section_header="Post test_case {}",
+        collapsed=True,
+        section_type=LogSectionType.LAVA_POST_PROCESSING,
+    ),
+)
diff -pruN 22.1.3-1/.gitlab-ci/meson/build.sh 22.2.0~rc1-1/.gitlab-ci/meson/build.sh
--- 22.1.3-1/.gitlab-ci/meson/build.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/meson/build.sh	2022-08-03 18:11:03.000000000 +0000
@@ -48,6 +48,8 @@ case $CI_JOB_NAME in
         if test -f /usr/bin/time; then
             MESON_TEST_ARGS+=--wrapper=$PWD/.gitlab-ci/meson/time.sh
         fi
+        Xvfb :0 -screen 0 1024x768x16 &
+        export DISPLAY=:0.0
         ;;
     *)
         if test -f /usr/bin/time -a -f /usr/bin/strace; then
@@ -63,7 +65,7 @@ meson _build --native-file=native.file \
       -D prefix=`pwd`/install \
       -D libdir=lib \
       -D buildtype=${BUILDTYPE:-debug} \
-      -D build-tests=true \
+      -D build-tests=false \
       -D c_args="$(echo -n $C_ARGS)" \
       -D cpp_args="$(echo -n $CPP_ARGS)" \
       -D libunwind=${UNWIND} \
@@ -71,11 +73,12 @@ meson _build --native-file=native.file \
       ${GALLIUM_ST} \
       -D gallium-drivers=${GALLIUM_DRIVERS:-[]} \
       -D vulkan-drivers=${VULKAN_DRIVERS:-[]} \
+      -D video-codecs=h264dec,h264enc,h265dec,h265enc,vc1dec \
       -D werror=true \
       ${EXTRA_OPTION}
 cd _build
 meson configure
 ninja
-LC_ALL=C.UTF-8 meson test --num-processes ${FDO_CI_CONCURRENT:-4} ${MESON_TEST_ARGS}
+LC_ALL=C.UTF-8 meson test --num-processes ${FDO_CI_CONCURRENT:-4} --print-errorlogs ${MESON_TEST_ARGS}
 ninja install
 cd ..
diff -pruN 22.1.3-1/.gitlab-ci/piglit/piglit-traces.sh 22.2.0~rc1-1/.gitlab-ci/piglit/piglit-traces.sh
--- 22.1.3-1/.gitlab-ci/piglit/piglit-traces.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/piglit/piglit-traces.sh	2022-08-03 18:11:03.000000000 +0000
@@ -13,6 +13,7 @@ mkdir -p "$RESULTS"
 # using a command wrapper. Hence, we will just set it when running the
 # command.
 export __LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$INSTALL/lib/"
+export VK_ICD_FILENAMES="$INSTALL/share/vulkan/icd.d/${VK_DRIVER}_icd.${VK_CPU:-`uname -m`}.json"
 
 # Sanity check to ensure that our environment is sufficient to make our tests
 # run against the Mesa built by CI, rather than any installed distro version.
@@ -33,96 +34,48 @@ quiet() {
     set -x
 }
 
-if [ "$VK_DRIVER" ]; then
+# Set environment for apitrace executable.
+export PATH="/apitrace/build:$PATH"
 
-    ### VULKAN ###
+# Our rootfs may not have "less", which apitrace uses during
+# apitrace dump
+export PAGER=cat
 
-    # Set the Vulkan driver to use.
-    export VK_ICD_FILENAMES="$INSTALL/share/vulkan/icd.d/${VK_DRIVER}_icd.x86_64.json"
+SANITY_MESA_VERSION_CMD="wflinfo"
 
-    # Set environment for Wine.
-    export WINEDEBUG="-all"
-    export WINEPREFIX="/dxvk-wine64"
-    export WINEESYNC=1
+HANG_DETECTION_CMD=""
 
-    # Set environment for DXVK.
-    export DXVK_LOG_LEVEL="none"
-    export DXVK_STATE_CACHE=0
 
-    # Set environment for gfxreconstruct executables.
-    export PATH="/gfxreconstruct/build/bin:$PATH"
+# Set up the platform windowing system.
 
-    SANITY_MESA_VERSION_CMD="vulkaninfo"
+if [ "x$EGL_PLATFORM" = "xsurfaceless" ]; then
+    # Use the surfaceless EGL platform.
+    export DISPLAY=
+    export WAFFLE_PLATFORM="surfaceless_egl"
 
-    HANG_DETECTION_CMD="/parallel-deqp-runner/build/bin/hang-detection"
+    SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform surfaceless_egl --api gles2"
 
+    if [ "x$GALLIUM_DRIVER" = "xvirpipe" ]; then
+    # piglit is to use virpipe, and virgl_test_server llvmpipe
+    export GALLIUM_DRIVER="$GALLIUM_DRIVER"
 
-    # Set up the Window System Interface (WSI)
+    LD_LIBRARY_PATH="$__LD_LIBRARY_PATH" \
+    GALLIUM_DRIVER=llvmpipe \
+    VTEST_USE_EGL_SURFACELESS=1 \
+    VTEST_USE_GLES=1 \
+    virgl_test_server >"$RESULTS"/vtest-log.txt 2>&1 &
 
-    if [ ${TEST_START_XORG:-0} -eq 1 ]; then
-        "$INSTALL"/common/start-x.sh "$INSTALL"
-        export DISPLAY=:0
-    else
-        # Run vulkan against the host's running X server (xvfb doesn't
-        # have DRI3 support).
-        # Set the DISPLAY env variable in each gitlab-runner's
-        # configuration file:
-        # https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-section
-        quiet printf "%s%s\n" "Running against the hosts' X server. " \
-              "DISPLAY is \"$DISPLAY\"."
+    sleep 1
     fi
+elif [ "x$PIGLIT_PLATFORM" = "xgbm" ]; then
+    SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform gbm --api gl"
+elif [ "x$PIGLIT_PLATFORM" = "xmixed_glx_egl" ]; then
+    # It is assumed that you have already brought up your X server before
+    # calling this script.
+    SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform glx --api gl"
 else
-
-    ### GL/ES ###
-
-    # Set environment for apitrace executable.
-    export PATH="/apitrace/build:$PATH"
-
-    # Our rootfs may not have "less", which apitrace uses during
-    # apitrace dump
-    export PAGER=cat
-
-    SANITY_MESA_VERSION_CMD="wflinfo"
-
-    HANG_DETECTION_CMD=""
-
-
-    # Set up the platform windowing system.
-
-    if [ "x$EGL_PLATFORM" = "xsurfaceless" ]; then
-
-        # Use the surfaceless EGL platform.
-        export DISPLAY=
-        export WAFFLE_PLATFORM="surfaceless_egl"
-
-        SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform surfaceless_egl --api gles2"
-
-        if [ "x$GALLIUM_DRIVER" = "xvirpipe" ]; then
-            # piglit is to use virpipe, and virgl_test_server llvmpipe
-            export GALLIUM_DRIVER="$GALLIUM_DRIVER"
-
-            LD_LIBRARY_PATH="$__LD_LIBRARY_PATH" \
-            GALLIUM_DRIVER=llvmpipe \
-            VTEST_USE_EGL_SURFACELESS=1 \
-            VTEST_USE_GLES=1 \
-            virgl_test_server >"$RESULTS"/vtest-log.txt 2>&1 &
-
-            sleep 1
-        fi
-    elif [ "x$PIGLIT_PLATFORM" = "xgbm" ]; then
-        SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform gbm --api gl"
-    elif [ "x$PIGLIT_PLATFORM" = "xmixed_glx_egl" ]; then
-        # It is assumed that you have already brought up your X server before
-        # calling this script.
-        SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform glx --api gl"
-    else
-        SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform glx --api gl --profile core"
-        RUN_CMD_WRAPPER="xvfb-run --server-args=\"-noreset\" sh -c"
-    fi
-fi
-
-if [ "$ZINK_USE_LAVAPIPE" ]; then
-    export VK_ICD_FILENAMES="$INSTALL/share/vulkan/icd.d/lvp_icd.x86_64.json"
+    SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform glx --api gl --profile core"
+    RUN_CMD_WRAPPER="xvfb-run --server-args=\"-noreset\" sh -c"
 fi
 
 # If the job is parallel at the  gitlab job level, will take the corresponding
@@ -178,7 +131,7 @@ PIGLIT_OPTIONS=$(printf "%s" "$PIGLIT_OP
 
 PIGLIT_TESTS=$(printf "%s" "$PIGLIT_TESTS")
 
-PIGLIT_CMD="./piglit run --timeout 300 -j${FDO_CI_CONCURRENT:-4} $PIGLIT_OPTIONS $PIGLIT_TESTS replay "$(/usr/bin/printf "%q" "$RESULTS")
+PIGLIT_CMD="./piglit run -l verbose --timeout 300 -j${FDO_CI_CONCURRENT:-4} $PIGLIT_OPTIONS $PIGLIT_TESTS replay "$(/usr/bin/printf "%q" "$RESULTS")
 
 RUN_CMD="export LD_LIBRARY_PATH=$__LD_LIBRARY_PATH; $SANITY_MESA_VERSION_CMD && $HANG_DETECTION_CMD $PIGLIT_CMD"
 
diff -pruN 22.1.3-1/.gitlab-ci/prepare-artifacts.sh 22.2.0~rc1-1/.gitlab-ci/prepare-artifacts.sh
--- 22.1.3-1/.gitlab-ci/prepare-artifacts.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/prepare-artifacts.sh	2022-08-03 18:11:03.000000000 +0000
@@ -34,6 +34,7 @@ cp -Rp .gitlab-ci/fossilize-runner.sh in
 cp -Rp .gitlab-ci/crosvm-init.sh install/
 cp -Rp .gitlab-ci/*.txt install/
 cp -Rp .gitlab-ci/report-flakes.py install/
+cp -Rp .gitlab-ci/valve install/
 cp -Rp .gitlab-ci/vkd3d-proton install/
 cp -Rp .gitlab-ci/*-runner.sh install/
 find . -path \*/ci/\*.txt \
@@ -47,7 +48,7 @@ mkdir -p artifacts/
 tar -cf artifacts/install.tar install
 cp -Rp .gitlab-ci/common artifacts/ci-common
 cp -Rp .gitlab-ci/lava artifacts/
-cp -Rp .gitlab-ci/valve artifacts/
+cp -Rp .gitlab-ci/b2c artifacts/
 
 if [ -n "$MINIO_ARTIFACT_NAME" ]; then
     # Pass needed files to the test stage
diff -pruN 22.1.3-1/.gitlab-ci/run-shader-db.sh 22.2.0~rc1-1/.gitlab-ci/run-shader-db.sh
--- 22.1.3-1/.gitlab-ci/run-shader-db.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/run-shader-db.sh	2022-08-03 18:11:03.000000000 +0000
@@ -16,3 +16,12 @@ for driver in freedreno intel v3d; do
         ./run -j${FDO_CI_CONCURRENT:-4} ./shaders \
             > $ARTIFACTSDIR/${driver}-shader-db.txt
 done
+
+# Run shader-db over a number of supported chipsets for nouveau
+for chipset in 40 a3 c0 e4 f0 134 162; do
+    echo "Running drm-shim for nouveau - $chipset"
+    env LD_PRELOAD=$LIBDIR/libnouveau_noop_drm_shim.so \
+        NOUVEAU_CHIPSET=${chipset} \
+        ./run -j${FDO_CI_CONCURRENT:-4} ./shaders \
+            > $ARTIFACTSDIR/nouveau-${chipset}-shader-db.txt
+done
diff -pruN 22.1.3-1/.gitlab-ci/test/gitlab-ci.yml 22.2.0~rc1-1/.gitlab-ci/test/gitlab-ci.yml
--- 22.1.3-1/.gitlab-ci/test/gitlab-ci.yml	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/test/gitlab-ci.yml	2022-08-03 18:11:03.000000000 +0000
@@ -1,6 +1,4 @@
 .test:
-  extends:
-    - .ci-run-policy
   # Cancel job if a newer commit is pushed to the same branch
   interruptible: true
   variables:
@@ -100,6 +98,11 @@
   variables:
     DEQP_VER: vk
 
+.skqp-test:
+  variables:
+    HWCI_START_XORG: 1
+    HWCI_TEST_SCRIPT: "/install/skqp-runner.sh"
+
 .fossilize-test:
   script:
     - ./install/fossilize-runner.sh
@@ -111,18 +114,18 @@
 
 .baremetal-test:
   extends:
-    - .ci-run-policy
     - .test
   # Cancel job if a newer commit is pushed to the same branch
   interruptible: true
-  stage: test
   before_script:
     - !reference [default, before_script]
     # Use this instead of gitlab's artifacts download because it hits packet.net
     # instead of fd.o.  Set FDO_HTTP_CACHE_URI to an http cache for your test lab to
     # improve it even more (see https://docs.mesa3d.org/ci/bare-metal.html for
     # setup).
+    - echo -e "\e[0Ksection_start:$(date +%s):artifacts_download[collapsed=true]\r\e[0KDownloading artifacts from minio"
     - wget ${FDO_HTTP_CACHE_URI:-}https://${PIPELINE_ARTIFACTS_BASE}/${MINIO_ARTIFACT_NAME}.tar.gz -S --progress=dot:giga -O- | tar -xz
+    - echo -e "\e[0Ksection_end:$(date +%s):artifacts_download\r\e[0K"
   artifacts:
     when: always
     name: "mesa_${CI_JOB_NAME}"
@@ -134,21 +137,37 @@
     reports:
       junit: results/junit.xml
 
+# ARM testing of bare-metal boards attached to an x86 gitlab-runner system
 .baremetal-test-armhf:
   extends:
     - .baremetal-test
+    - .use-debian/arm_test
   variables:
     BM_ROOTFS: /rootfs-armhf
     MINIO_ARTIFACT_NAME: mesa-armhf
+  needs:
+    - debian/arm_test
+    - job: debian-armhf
+      artifacts: false
 
+# ARM64 testing of bare-metal boards attached to an x86 gitlab-runner system
 .baremetal-test-arm64:
   extends:
     - .baremetal-test
+    - .use-debian/arm_test
   variables:
     BM_ROOTFS: /rootfs-arm64
     MINIO_ARTIFACT_NAME: mesa-arm64
+  needs:
+    - debian/arm_test
+    - job: debian-arm64
+      artifacts: false
 
+# ARM64 testing of bare-metal boards attached to an x86 gitlab-runner system, using an asan mesa build
 .baremetal-arm64-asan-test:
+  extends:
+    - .baremetal-test
+    - .use-debian/arm_test
   variables:
     DEQP_RUNNER_OPTIONS: "--env LD_PRELOAD=libasan.so.6:/install/lib/libdlclose-skip.so"
     MINIO_ARTIFACT_NAME: mesa-arm64-asan
@@ -180,26 +199,25 @@
   # depend on more than one image per job. So, the job container is
   # built as part of the CI in the boot2container project.
   image: registry.freedesktop.org/mupuf/valve-infra/mesa-trigger:2022-03-03.2
-  extends:
-    - .use-debian/x86_test-vk
+  timeout: 1h 40m
   variables:
     # No need by default to pull the whole repo
     GIT_STRATEGY: none
     # boot2container initrd configuration parameters.
-    B2C_KERNEL_URL: 'https://gitlab.freedesktop.org/mupuf/valve-infra/-/package_files/117/download'  # 5.16-for-mesa-ci
-    B2C_INITRAMFS_URL: 'https://gitlab.freedesktop.org/mupuf/boot2container/-/releases/v0.9.4/downloads/initramfs.linux_amd64.cpio.xz'
+    B2C_KERNEL_URL: 'https://gitlab.freedesktop.org/mupuf/valve-infra/-/package_files/144/download'  # 5.17.1
+    B2C_INITRAMFS_URL: 'https://gitlab.freedesktop.org/mupuf/boot2container/-/releases/v0.9.6/downloads/initramfs.linux_amd64.cpio.xz'
     B2C_JOB_SUCCESS_REGEX: '\[.*\]: Execution is over, pipeline status: 0\r$'
-    B2C_JOB_WARN_REGEX: 'null'
+    B2C_JOB_WARN_REGEX: '\*ERROR\* ring .* timeout, but soft recovered'
     B2C_LOG_LEVEL: 6
     B2C_POWEROFF_DELAY: 15
     B2C_SESSION_END_REGEX: '^.*It''s now safe to turn off your computer\r$'
-    B2C_SESSION_REBOOT_REGEX: 'GPU hang detected!'
-    B2C_TIMEOUT_BOOT_MINUTES: 240
-    B2C_TIMEOUT_BOOT_RETRIES: 2
+    B2C_SESSION_REBOOT_REGEX: '(GPU hang detected!|\*ERROR\* ring [^\s]+ timeout(?!, but soft recovered)|The CS has been cancelled because the context is lost)'
+    B2C_TIMEOUT_BOOT_MINUTES: 45
+    B2C_TIMEOUT_BOOT_RETRIES: 1
     B2C_TIMEOUT_FIRST_MINUTES: 5
     B2C_TIMEOUT_FIRST_RETRIES: 3
     B2C_TIMEOUT_MINUTES: 2
-    B2C_TIMEOUT_OVERALL_MINUTES: 240
+    B2C_TIMEOUT_OVERALL_MINUTES: 90
     B2C_TIMEOUT_RETRIES: 0
 
     # As noted in the top description, we make a distinction between the
@@ -208,11 +226,12 @@
     # we rename the MESA_IMAGE variable into IMAGE_UNDER_TEST.
     IMAGE_UNDER_TEST: "$MESA_IMAGE"
 
-    INSTALL_TARBALL: "./artifacts/install.tar"
-    CI_VALVE_ARTIFACTS: "./artifacts/valve"
+    INSTALL_TARBALL_NAME: "install.tar"
+    INSTALL_TARBALL: "./artifacts/${INSTALL_TARBALL_NAME}"
+    CI_B2C_ARTIFACTS: "./artifacts/b2c"
     CI_COMMON_SCRIPTS: "./artifacts/ci-common"
     GENERATE_ENV_SCRIPT: "${CI_COMMON_SCRIPTS}/generate-env.sh"
-    B2C_JOB_TEMPLATE: "${CI_VALVE_ARTIFACTS}/b2c.yml.jinja2.jinja2"
+    B2C_JOB_TEMPLATE: "${CI_B2C_ARTIFACTS}/b2c.yml.jinja2.jinja2"
     JOB_FOLDER: "job_folder"
   before_script:
     # We don't want the tarball unpacking of .test, but will take the JWT bits.
@@ -236,15 +255,15 @@
       fi
 
       [ -s "$INSTALL_TARBALL" ] || exit 1
-      [ -d "$CI_VALVE_ARTIFACTS" ] || exit 1
+      [ -d "$CI_B2C_ARTIFACTS" ] || exit 1
       [ -d "$CI_COMMON_SCRIPTS" ] || exit 1
 
 
-      B2C_TEST_SCRIPT="bash -c 'source ./set-job-env-vars.sh ; ${B2C_TEST_SCRIPT}'"
+      B2C_TEST_SCRIPT="bash -c 'source ./set-job-env-vars.sh; tar xf ${INSTALL_TARBALL_NAME}; ${B2C_TEST_SCRIPT}'"
 
       # The Valve CI gateway receives jobs in a YAML format. Create a
       # job description from the CI environment.
-      python3 "$CI_VALVE_ARTIFACTS"/generate_b2c.py \
+      python3 "$CI_B2C_ARTIFACTS"/generate_b2c.py \
         --ci-job-id "${CI_JOB_ID}" \
         --container-cmd "${B2C_TEST_SCRIPT}" \
         --initramfs-url "${B2C_INITRAMFS_URL}" \
@@ -283,9 +302,8 @@
       echo "export CI_JOB_JWT=${CI_JOB_JWT}" >> ${JOB_FOLDER}/set-job-env-vars.sh
       set -x
 
-      # Extract the Mesa distribution into the location expected by
-      # the Mesa CI deqp-runner scripts.
-      tar x -C ${JOB_FOLDER} -f $INSTALL_TARBALL
+      # Copy the mesa install tarball to the job folder, for later extraction
+      mv "${INSTALL_TARBALL}" "${JOB_FOLDER}"
 
   script: |
       slugify () {
@@ -302,9 +320,6 @@
       # Gitlab coordinator for status presentation. results/junit.xml
       # will be parsed by the UI for more detailed explanations of
       # test execution.
-  needs:
-    - debian/x86_test-vk
-    - debian-testing
   artifacts:
     when: always
     name: "mesa_${CI_JOB_NAME}"
@@ -312,3 +327,19 @@
       - ${JOB_FOLDER}/results
     reports:
       junit: ${JOB_FOLDER}/results/junit.xml
+
+.b2c-test-vk:
+  extends:
+    - .use-debian/x86_test-vk
+    - .b2c-test
+  needs:
+    - debian/x86_test-vk
+    - debian-testing
+
+.b2c-test-gl:
+  extends:
+    - .use-debian/x86_test-gl
+    - .b2c-test
+  needs:
+    - debian/x86_test-gl
+    - debian-testing
diff -pruN 22.1.3-1/.gitlab-ci/tests/conftest.py 22.2.0~rc1-1/.gitlab-ci/tests/conftest.py
--- 22.1.3-1/.gitlab-ci/tests/conftest.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/tests/conftest.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,56 @@
+from unittest.mock import MagicMock, patch
+
+import pytest
+import yaml
+from freezegun import freeze_time
+
+from .lava.helpers import generate_testsuite_result, jobs_logs_response
+
+
+def pytest_configure(config):
+    config.addinivalue_line(
+        "markers", "slow: marks tests as slow (deselect with '-m \"not slow\"')"
+    )
+
+@pytest.fixture
+def mock_sleep():
+    """Mock time.sleep to make test faster"""
+    with patch("time.sleep", return_value=None):
+        yield
+
+
+@pytest.fixture
+def frozen_time(mock_sleep):
+    with freeze_time() as frozen_time:
+        yield frozen_time
+
+
+RESULT_GET_TESTJOB_RESULTS = [{"metadata": {"result": "test"}}]
+
+
+@pytest.fixture
+def mock_proxy():
+    def create_proxy_mock(
+        job_results=RESULT_GET_TESTJOB_RESULTS,
+        testsuite_results=[generate_testsuite_result()],
+        **kwargs
+    ):
+        proxy_mock = MagicMock()
+        proxy_submit_mock = proxy_mock.scheduler.jobs.submit
+        proxy_submit_mock.return_value = "1234"
+
+        proxy_results_mock = proxy_mock.results.get_testjob_results_yaml
+        proxy_results_mock.return_value = yaml.safe_dump(job_results)
+
+        proxy_test_suites_mock = proxy_mock.results.get_testsuite_results_yaml
+        proxy_test_suites_mock.return_value = yaml.safe_dump(testsuite_results)
+
+        proxy_logs_mock = proxy_mock.scheduler.jobs.logs
+        proxy_logs_mock.return_value = jobs_logs_response()
+
+        for key, value in kwargs.items():
+            setattr(proxy_logs_mock, key, value)
+
+        return proxy_mock
+
+    yield create_proxy_mock
diff -pruN 22.1.3-1/.gitlab-ci/tests/lava/helpers.py 22.2.0~rc1-1/.gitlab-ci/tests/lava/helpers.py
--- 22.1.3-1/.gitlab-ci/tests/lava/helpers.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/tests/lava/helpers.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,139 @@
+from contextlib import nullcontext as does_not_raise
+from datetime import datetime
+from itertools import cycle
+from typing import Callable, Generator, Iterable, Optional, Tuple, Union
+
+import yaml
+from freezegun import freeze_time
+from lava.utils.log_section import (
+    DEFAULT_GITLAB_SECTION_TIMEOUTS,
+    FALLBACK_GITLAB_SECTION_TIMEOUT,
+    LogSectionType,
+)
+
+
+def section_timeout(section_type: LogSectionType) -> int:
+    return int(
+        DEFAULT_GITLAB_SECTION_TIMEOUTS.get(
+            section_type, FALLBACK_GITLAB_SECTION_TIMEOUT
+        ).total_seconds()
+    )
+
+
+def create_lava_yaml_msg(
+    dt: Callable = datetime.now, msg="test", lvl="target"
+) -> dict[str, str]:
+    return {"dt": str(dt()), "msg": msg, "lvl": lvl}
+
+
+def generate_testsuite_result(
+    name="test-mesa-ci", result="pass", metadata_extra=None, extra=None
+):
+    if metadata_extra is None:
+        metadata_extra = {}
+    if extra is None:
+        extra = {}
+    return {"metadata": {"result": result, **metadata_extra}, "name": name}
+
+
+def jobs_logs_response(
+    finished=False, msg=None, lvl="target", result=None
+) -> Tuple[bool, str]:
+    timed_msg = {"dt": str(datetime.now()), "msg": "New message", "lvl": lvl}
+    if result:
+        timed_msg["lvl"] = "target"
+        timed_msg["msg"] = f"hwci: mesa: {result}"
+
+    logs = [timed_msg] if msg is None else msg
+
+    return finished, yaml.safe_dump(logs)
+
+
+def section_aware_message_generator(
+    messages: dict[LogSectionType, Iterable[int]], result: Optional[str] = None
+) -> Iterable[tuple[dict, Iterable[int]]]:
+    default = [1]
+
+    result_message_section = LogSectionType.TEST_CASE
+
+    for section_type in LogSectionType:
+        delay = messages.get(section_type, default)
+        yield mock_lava_signal(section_type), delay
+        if result and section_type == result_message_section:
+            # To consider the job finished, the result `echo` should be produced
+            # in the correct section
+            yield create_lava_yaml_msg(msg=f"hwci: mesa: {result}"), delay
+
+
+def message_generator():
+    for section_type in LogSectionType:
+        yield mock_lava_signal(section_type)
+
+
+def level_generator():
+    # Tests all known levels by default
+    yield from cycle(("results", "feedback", "warning", "error", "debug", "target"))
+
+
+def generate_n_logs(
+    n=1,
+    tick_fn: Union[Generator, Iterable[int], int] = 1,
+    level_fn=level_generator,
+    result="pass",
+):
+    """Simulate a log partitionated in n components"""
+    level_gen = level_fn()
+
+    if isinstance(tick_fn, Generator):
+        tick_gen = tick_fn
+    elif isinstance(tick_fn, Iterable):
+        tick_gen = cycle(tick_fn)
+    else:
+        tick_gen = cycle((tick_fn,))
+
+    with freeze_time(datetime.now()) as time_travel:
+        tick_sec: int = next(tick_gen)
+        while True:
+            # Simulate a scenario where the target job is waiting for being started
+            for _ in range(n - 1):
+                level: str = next(level_gen)
+
+                time_travel.tick(tick_sec)
+                yield jobs_logs_response(finished=False, msg=[], lvl=level)
+
+            time_travel.tick(tick_sec)
+            yield jobs_logs_response(finished=True, result=result)
+
+
+def to_iterable(tick_fn):
+    if isinstance(tick_fn, Generator):
+        return tick_fn
+    elif isinstance(tick_fn, Iterable):
+        return cycle(tick_fn)
+    else:
+        return cycle((tick_fn,))
+
+
+def mock_logs(messages=None, result=None):
+    if messages is None:
+        messages = {}
+    with freeze_time(datetime.now()) as time_travel:
+        # Simulate a complete run given by message_fn
+        for msg, tick_list in section_aware_message_generator(messages, result):
+            for tick_sec in tick_list:
+                yield jobs_logs_response(finished=False, msg=[msg])
+                time_travel.tick(tick_sec)
+
+
+def mock_lava_signal(type: LogSectionType) -> dict[str, str]:
+    return {
+        LogSectionType.TEST_CASE: create_lava_yaml_msg(
+            msg="<STARTTC> case", lvl="debug"
+        ),
+        LogSectionType.TEST_SUITE: create_lava_yaml_msg(
+            msg="<STARTRUN> suite", lvl="debug"
+        ),
+        LogSectionType.LAVA_POST_PROCESSING: create_lava_yaml_msg(
+            msg="<LAVA_SIGNAL_ENDTC case>", lvl="target"
+        ),
+    }.get(type, create_lava_yaml_msg())
diff -pruN 22.1.3-1/.gitlab-ci/tests/test_lava_job_submitter.py 22.2.0~rc1-1/.gitlab-ci/tests/test_lava_job_submitter.py
--- 22.1.3-1/.gitlab-ci/tests/test_lava_job_submitter.py	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/tests/test_lava_job_submitter.py	2022-08-03 18:11:03.000000000 +0000
@@ -3,91 +3,40 @@
 # Copyright (C) 2022 Collabora Limited
 # Author: Guilherme Gallo <guilherme.gallo@collabora.com>
 #
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
+# SPDX-License-Identifier: MIT
 
 import xmlrpc.client
 from contextlib import nullcontext as does_not_raise
 from datetime import datetime
-from itertools import repeat
-from typing import Tuple
-from unittest.mock import MagicMock, patch
+from itertools import chain, repeat
 
 import pytest
-import yaml
-from freezegun import freeze_time
+from lava.exceptions import MesaCIException, MesaCIRetryError
 from lava.lava_job_submitter import (
     DEVICE_HANGING_TIMEOUT_SEC,
+    NUMBER_OF_RETRIES_TIMEOUT_DETECTION,
+    LAVAJob,
     follow_job_execution,
-    hide_sensitive_data,
     retriable_follow_job,
 )
+from lava.utils import LogSectionType
 
+from .lava.helpers import (
+    generate_n_logs,
+    generate_testsuite_result,
+    jobs_logs_response,
+    mock_lava_signal,
+    mock_logs,
+    section_timeout,
+)
 
-def jobs_logs_response(finished=False, msg=None) -> Tuple[bool, str]:
-    timed_msg = {"dt": str(datetime.now()), "msg": "New message"}
-    logs = [timed_msg] if msg is None else msg
-
-    return finished, yaml.safe_dump(logs)
-
-
-def result_get_testjob_results_response() -> str:
-    result = {"result": "test"}
-    results = [{"metadata": result}]
-
-    return yaml.safe_dump(results)
-
-
-def result_get_testcase_results_response() -> str:
-    result = {"result": "pass"}
-    test_cases = [result]
-
-    return yaml.safe_dump(test_cases)
-
-
-@pytest.fixture
-def mock_proxy():
-    def create_proxy_mock(**kwargs):
-        proxy_mock = MagicMock()
-        proxy_submit_mock = proxy_mock.scheduler.jobs.submit
-        proxy_submit_mock.return_value = "1234"
-
-        proxy_results_mock = proxy_mock.results.get_testjob_results_yaml
-        proxy_results_mock.return_value = result_get_testjob_results_response()
-
-        proxy_test_cases_mock = proxy_mock.results.get_testcase_results_yaml
-        proxy_test_cases_mock.return_value = result_get_testcase_results_response()
-
-        proxy_logs_mock = proxy_mock.scheduler.jobs.logs
-        proxy_logs_mock.return_value = jobs_logs_response()
-        for key, value in kwargs.items():
-            setattr(proxy_logs_mock, key, value)
-
-        return proxy_mock
-
-    yield create_proxy_mock
+NUMBER_OF_MAX_ATTEMPTS = NUMBER_OF_RETRIES_TIMEOUT_DETECTION + 1
 
 
 @pytest.fixture
 def mock_proxy_waiting_time(mock_proxy):
     def update_mock_proxy(frozen_time, **kwargs):
-        wait_time = kwargs.pop("wait_time", 0)
+        wait_time = kwargs.pop("wait_time", 1)
         proxy_mock = mock_proxy(**kwargs)
         proxy_job_state = proxy_mock.scheduler.job_state
         proxy_job_state.return_value = {"job_state": "Running"}
@@ -98,101 +47,167 @@ def mock_proxy_waiting_time(mock_proxy):
     return update_mock_proxy
 
 
-@pytest.fixture
-def mock_sleep():
-    """Mock time.sleep to make test faster"""
-    with patch("time.sleep", return_value=None):
-        yield
-
-
-@pytest.fixture
-def frozen_time(mock_sleep):
-    with freeze_time() as frozen_time:
-        yield frozen_time
-
-
 @pytest.mark.parametrize("exception", [RuntimeError, SystemError, KeyError])
 def test_submit_and_follow_respects_exceptions(mock_sleep, mock_proxy, exception):
-    with pytest.raises(exception):
-        follow_job_execution(mock_proxy(side_effect=exception), "")
-
-
-def generate_n_logs(n=1, tick_sec=1):
-    """Simulate a log partitionated in n components"""
-    with freeze_time(datetime.now()) as time_travel:
-        while True:
-            # Simulate a scenario where the target job is waiting for being started
-            for _ in range(n - 1):
-                time_travel.tick(tick_sec)
-                yield jobs_logs_response(finished=False, msg=[])
-
-            time_travel.tick(tick_sec)
-            yield jobs_logs_response(finished=True)
+    with pytest.raises(MesaCIException):
+        proxy = mock_proxy(side_effect=exception)
+        job = LAVAJob(proxy, '')
+        follow_job_execution(job)
 
 
 NETWORK_EXCEPTION = xmlrpc.client.ProtocolError("", 0, "test", {})
 XMLRPC_FAULT = xmlrpc.client.Fault(0, "test")
 
 PROXY_SCENARIOS = {
-    "finish case": (generate_n_logs(1), does_not_raise(), True),
-    "works at last retry": (
-        generate_n_logs(n=3, tick_sec=DEVICE_HANGING_TIMEOUT_SEC + 1),
+    "simple pass case": (mock_logs(result="pass"), does_not_raise(), "pass", {}),
+    "simple fail case": (mock_logs(result="fail"), does_not_raise(), "fail", {}),
+    "simple hung case": (
+        mock_logs(
+            messages={
+                LogSectionType.TEST_CASE: [
+                    section_timeout(LogSectionType.TEST_CASE) + 1
+                ]
+                * 1000
+            },
+            result="fail",
+        ),
+        pytest.raises(MesaCIRetryError),
+        "hung",
+        {},
+    ),
+    "leftover dump from last job in boot section": (
+        (
+            mock_lava_signal(LogSectionType.LAVA_BOOT),
+            jobs_logs_response(finished=False, msg=None, result="fail"),
+        ),
+        pytest.raises(MesaCIRetryError),
+        "hung",
+        {},
+    ),
+    "boot works at last retry": (
+        mock_logs(
+            messages={
+                LogSectionType.LAVA_BOOT: [
+                    section_timeout(LogSectionType.LAVA_BOOT) + 1
+                ]
+                * NUMBER_OF_RETRIES_TIMEOUT_DETECTION
+                + [1]
+            },
+            result="pass",
+        ),
         does_not_raise(),
-        True,
+        "pass",
+        {},
+    ),
+    "test case took too long": pytest.param(
+        mock_logs(
+            messages={
+                LogSectionType.TEST_CASE: [
+                    section_timeout(LogSectionType.TEST_CASE) + 1
+                ]
+                * (NUMBER_OF_MAX_ATTEMPTS + 1)
+            },
+            result="pass",
+        ),
+        pytest.raises(MesaCIRetryError),
+        "pass",
+        {},
     ),
     "timed out more times than retry attempts": (
-        generate_n_logs(n=4, tick_sec=DEVICE_HANGING_TIMEOUT_SEC + 1),
-        does_not_raise(),
-        False,
+        generate_n_logs(n=4, tick_fn=9999999),
+        pytest.raises(MesaCIRetryError),
+        "fail",
+        {},
     ),
     "long log case, no silence": (
-        generate_n_logs(n=1000, tick_sec=0),
+        mock_logs(
+            messages={LogSectionType.TEST_CASE: [1] * (1000)},
+            result="pass",
+        ),
         does_not_raise(),
-        True,
+        "pass",
+        {},
     ),
-    "very long silence": (
-        generate_n_logs(n=4, tick_sec=100000),
+    "no retries, testsuite succeed": (
+        mock_logs(result="pass"),
+        does_not_raise(),
+        "pass",
+        {
+            "testsuite_results": [
+                generate_testsuite_result(result="pass")
+            ]
+        },
+    ),
+    "no retries, but testsuite fails": (
+        mock_logs(result="fail"),
+        does_not_raise(),
+        "fail",
+        {
+            "testsuite_results": [
+                generate_testsuite_result(result="fail")
+            ]
+        },
+    ),
+    "no retries, one testsuite fails": (
+        generate_n_logs(n=1, tick_fn=0, result="fail"),
         does_not_raise(),
-        False,
+        "fail",
+        {
+            "testsuite_results": [
+                generate_testsuite_result(result="fail"),
+                generate_testsuite_result(result="pass")
+            ]
+        },
+    ),
+    "very long silence": (
+        generate_n_logs(n=NUMBER_OF_MAX_ATTEMPTS + 1, tick_fn=100000),
+        pytest.raises(MesaCIRetryError),
+        "fail",
+        {},
     ),
     # If a protocol error happens, _call_proxy will retry without affecting timeouts
     "unstable connection, ProtocolError followed by final message": (
-        (NETWORK_EXCEPTION, jobs_logs_response(finished=True)),
+        (NETWORK_EXCEPTION, *list(mock_logs(result="pass"))),
         does_not_raise(),
-        True,
+        "pass",
+        {},
     ),
     # After an arbitrary number of retries, _call_proxy should call sys.exit
     "unreachable case, subsequent ProtocolErrors": (
         repeat(NETWORK_EXCEPTION),
         pytest.raises(SystemExit),
-        False,
+        "fail",
+        {},
     ),
-    "XMLRPC Fault": ([XMLRPC_FAULT], pytest.raises(SystemExit, match="1"), False),
+    "XMLRPC Fault": ([XMLRPC_FAULT], pytest.raises(SystemExit, match="1"), False, {}),
 }
 
 
-@patch("time.sleep", return_value=None)  # mock sleep to make test faster
 @pytest.mark.parametrize(
-    "side_effect, expectation, has_finished",
+    "test_log, expectation, job_result, proxy_args",
     PROXY_SCENARIOS.values(),
     ids=PROXY_SCENARIOS.keys(),
 )
 def test_retriable_follow_job(
-    mock_sleep, side_effect, expectation, has_finished, mock_proxy
+    mock_sleep,
+    test_log,
+    expectation,
+    job_result,
+    proxy_args,
+    mock_proxy,
 ):
     with expectation:
-        result = retriable_follow_job(mock_proxy(side_effect=side_effect), "")
-        assert has_finished == result
+        proxy = mock_proxy(side_effect=test_log, **proxy_args)
+        job: LAVAJob = retriable_follow_job(proxy, "")
+        assert job_result == job.status
 
 
-WAIT_FOR_JOB_SCENARIOS = {
-    "one log run taking (sec):": (generate_n_logs(1), True),
-}
+WAIT_FOR_JOB_SCENARIOS = {"one log run taking (sec):": (mock_logs(result="pass"))}
 
 
-@pytest.mark.parametrize("wait_time", (0, DEVICE_HANGING_TIMEOUT_SEC * 2))
+@pytest.mark.parametrize("wait_time", (DEVICE_HANGING_TIMEOUT_SEC * 2,))
 @pytest.mark.parametrize(
-    "side_effect, has_finished",
+    "side_effect",
     WAIT_FOR_JOB_SCENARIOS.values(),
     ids=WAIT_FOR_JOB_SCENARIOS.keys(),
 )
@@ -200,11 +215,10 @@ def test_simulate_a_long_wait_to_start_a
     frozen_time,
     wait_time,
     side_effect,
-    has_finished,
     mock_proxy_waiting_time,
 ):
     start_time = datetime.now()
-    result = retriable_follow_job(
+    job: LAVAJob = retriable_follow_job(
         mock_proxy_waiting_time(
             frozen_time, side_effect=side_effect, wait_time=wait_time
         ),
@@ -214,37 +228,127 @@ def test_simulate_a_long_wait_to_start_a
     end_time = datetime.now()
     delta_time = end_time - start_time
 
-    assert has_finished == result
+    assert job.status == "pass"
     assert delta_time.total_seconds() >= wait_time
 
 
-SENSITIVE_DATA_SCENARIOS = {
-    "no sensitive data tagged": (
-        ["bla  bla", "mytoken: asdkfjsde1341=="],
-        ["bla  bla", "mytoken: asdkfjsde1341=="],
-        "HIDEME",
-    ),
-    "sensitive data tagged": (
-        ["bla  bla", "mytoken: asdkfjsde1341== # HIDEME"],
-        ["bla  bla"],
-        "HIDEME",
-    ),
-    "sensitive data tagged with custom word": (
-        ["bla  bla", "mytoken: asdkfjsde1341== # DELETETHISLINE", "third line"],
-        ["bla  bla", "third line"],
-        "DELETETHISLINE",
+
+CORRUPTED_LOG_SCENARIOS = {
+    "too much subsequent corrupted data": (
+        [(False, "{'msg': 'Incomplete}")] * 100 + [jobs_logs_response(True)],
+        pytest.raises((MesaCIRetryError)),
+    ),
+    "one subsequent corrupted data": (
+        [(False, "{'msg': 'Incomplete}")] * 2 + [jobs_logs_response(True)],
+        does_not_raise(),
+    ),
+}
+
+
+@pytest.mark.parametrize(
+    "data_sequence, expected_exception",
+    CORRUPTED_LOG_SCENARIOS.values(),
+    ids=CORRUPTED_LOG_SCENARIOS.keys(),
+)
+def test_log_corruption(mock_sleep, data_sequence, expected_exception, mock_proxy):
+    proxy_mock = mock_proxy()
+    proxy_logs_mock = proxy_mock.scheduler.jobs.logs
+    proxy_logs_mock.side_effect = data_sequence
+    with expected_exception:
+        retriable_follow_job(proxy_mock, "")
+
+
+LAVA_RESULT_LOG_SCENARIOS = {
+    # the submitter should accept xtrace logs
+    "Bash xtrace echo with kmsg interleaving": (
+        "echo hwci: mesa: pass[  737.673352] <LAVA_SIGNAL_ENDTC mesa-ci>",
+        "pass",
+    ),
+    # the submitter should accept xtrace logs
+    "kmsg result print": (
+        "[  737.673352] hwci: mesa: pass",
+        "pass",
+    ),
+    # if the job result echo has a very bad luck, it still can be interleaved
+    # with kmsg
+    "echo output with kmsg interleaving": (
+        "hwci: mesa: pass[  737.673352] <LAVA_SIGNAL_ENDTC mesa-ci>",
+        "pass",
+    ),
+    "fail case": (
+        "hwci: mesa: fail",
+        "fail",
     ),
 }
 
 
 @pytest.mark.parametrize(
-    "input, expectation, tag",
-    SENSITIVE_DATA_SCENARIOS.values(),
-    ids=SENSITIVE_DATA_SCENARIOS.keys(),
-)
-def test_hide_sensitive_data(input, expectation, tag):
-    yaml_data = yaml.safe_dump(input)
-    yaml_result = hide_sensitive_data(yaml_data, tag)
-    result = yaml.safe_load(yaml_result)
+    "message, expectation",
+    LAVA_RESULT_LOG_SCENARIOS.values(),
+    ids=LAVA_RESULT_LOG_SCENARIOS.keys(),
+)
+def test_parse_job_result_from_log(message, expectation, mock_proxy):
+    job = LAVAJob(mock_proxy(), "")
+    job.parse_job_result_from_log([message])
+
+    assert job.status == expectation
+
+
+@pytest.mark.slow(
+    reason="Slow and sketchy test. Needs a LAVA log raw file at /tmp/log.yaml"
+)
+def test_full_yaml_log(mock_proxy, frozen_time):
+    import itertools
+    import random
+    from datetime import datetime
+
+    import yaml
+
+    def time_travel_from_log_chunk(data_chunk):
+        if not data_chunk:
+            return
+
+        first_log_time = data_chunk[0]["dt"]
+        frozen_time.move_to(first_log_time)
+        yield
 
-    assert result == expectation
+        last_log_time = data_chunk[-1]["dt"]
+        frozen_time.move_to(last_log_time)
+        return
+
+    def time_travel_to_test_time():
+        # Suppose that the first message timestamp of the entire LAVA job log is
+        # the same of from the job submitter execution
+        with open("/tmp/log.yaml", "r") as f:
+            first_log = f.readline()
+            first_log_time = yaml.safe_load(first_log)[0]["dt"]
+            frozen_time.move_to(first_log_time)
+
+    def load_lines() -> list:
+        with open("/tmp/log.yaml", "r") as f:
+            data = yaml.safe_load(f)
+            chain = itertools.chain(data)
+            try:
+                while True:
+                    data_chunk = [next(chain) for _ in range(random.randint(0, 50))]
+                    # Suppose that the first message timestamp is the same of
+                    # log fetch RPC call
+                    time_travel_from_log_chunk(data_chunk)
+                    yield False, []
+                    # Travel to the same datetime of the last fetched log line
+                    # in the chunk
+                    time_travel_from_log_chunk(data_chunk)
+                    yield False, data_chunk
+            except StopIteration:
+                yield True, data_chunk
+                return
+
+    proxy = mock_proxy()
+
+    def reset_logs(*args):
+        proxy.scheduler.jobs.logs.side_effect = load_lines()
+
+    proxy.scheduler.jobs.submit = reset_logs
+    with pytest.raises(MesaCIRetryError):
+        time_travel_to_test_time()
+        retriable_follow_job(proxy, "")
diff -pruN 22.1.3-1/.gitlab-ci/tests/utils/test_lava_log.py 22.2.0~rc1-1/.gitlab-ci/tests/utils/test_lava_log.py
--- 22.1.3-1/.gitlab-ci/tests/utils/test_lava_log.py	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/tests/utils/test_lava_log.py	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,349 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2022 Collabora Limited
+# Author: Guilherme Gallo <guilherme.gallo@collabora.com>
+#
+# SPDX-License-Identifier: MIT
+
+from datetime import datetime, timedelta
+
+import pytest
+import yaml
+from lava.exceptions import MesaCIKnownIssueException, MesaCITimeoutError
+from lava.utils import (
+    GitlabSection,
+    LogFollower,
+    LogSectionType,
+    fix_lava_color_log,
+    fix_lava_gitlab_section_log,
+    hide_sensitive_data,
+)
+
+from ..lava.helpers import create_lava_yaml_msg, does_not_raise
+
+GITLAB_SECTION_SCENARIOS = {
+    "start collapsed": (
+        "start",
+        True,
+        f"\x1b[0Ksection_start:mock_date:my_first_section[collapsed=true]\r\x1b[0K{GitlabSection.colour}my_header\x1b[0m",
+    ),
+    "start non_collapsed": (
+        "start",
+        False,
+        f"\x1b[0Ksection_start:mock_date:my_first_section\r\x1b[0K{GitlabSection.colour}my_header\x1b[0m",
+    ),
+    "end collapsed": (
+        "end",
+        True,
+        "\x1b[0Ksection_end:mock_date:my_first_section\r\x1b[0K",
+    ),
+    "end non_collapsed": (
+        "end",
+        False,
+        "\x1b[0Ksection_end:mock_date:my_first_section\r\x1b[0K",
+    ),
+}
+
+@pytest.mark.parametrize(
+    "method, collapsed, expectation",
+    GITLAB_SECTION_SCENARIOS.values(),
+    ids=GITLAB_SECTION_SCENARIOS.keys(),
+)
+def test_gitlab_section(method, collapsed, expectation):
+    gs = GitlabSection(
+        id="my_first_section",
+        header="my_header",
+        type=LogSectionType.TEST_CASE,
+        start_collapsed=collapsed,
+    )
+    gs.get_timestamp = lambda x: "mock_date"
+    gs.start()
+    result = getattr(gs, method)()
+    assert result == expectation
+
+
+def test_gl_sections():
+    lines = [
+        {
+            "dt": datetime.now(),
+            "lvl": "debug",
+            "msg": "Received signal: <STARTRUN> 0_mesa 5971831_1.3.2.3.1",
+        },
+        # Redundant log message which triggers the same Gitlab Section, it
+        # should be ignored, unless the id is different
+        {
+            "dt": datetime.now(),
+            "lvl": "target",
+            "msg": "[    7.778836] <LAVA_SIGNAL_STARTRUN 0_mesa 5971831_1.3.2.3.1>",
+        },
+        {
+            "dt": datetime.now(),
+            "lvl": "debug",
+            "msg": "Received signal: <STARTTC> mesa-ci_iris-kbl-traces",
+        },
+        # Another redundant log message
+        {
+            "dt": datetime.now(),
+            "lvl": "target",
+            "msg": "[   16.997829] <LAVA_SIGNAL_STARTTC mesa-ci_iris-kbl-traces>",
+        },
+        {
+            "dt": datetime.now(),
+            "lvl": "target",
+            "msg": "<LAVA_SIGNAL_ENDTC mesa-ci_iris-kbl-traces>",
+        },
+    ]
+    lf = LogFollower()
+    for line in lines:
+        lf.manage_gl_sections(line)
+
+    parsed_lines = lf.flush()
+    assert "section_start" in parsed_lines[0]
+    assert "collapsed=true" not in parsed_lines[0]
+    assert "section_end" in parsed_lines[1]
+    assert "section_start" in parsed_lines[2]
+    assert "collapsed=true" not in parsed_lines[2]
+    assert "section_end" in parsed_lines[3]
+    assert "section_start" in parsed_lines[4]
+    assert "collapsed=true" in parsed_lines[4]
+
+
+def test_log_follower_flush():
+    lines = [
+        {
+            "dt": datetime.now(),
+            "lvl": "debug",
+            "msg": "Received signal: <STARTTC> mesa-ci_iris-kbl-traces",
+        },
+        {
+            "dt": datetime.now(),
+            "lvl": "target",
+            "msg": "<LAVA_SIGNAL_ENDTC mesa-ci_iris-kbl-traces>",
+        },
+    ]
+    lf = LogFollower()
+    lf.feed(lines)
+    parsed_lines = lf.flush()
+    empty = lf.flush()
+    lf.feed(lines)
+    repeated_parsed_lines = lf.flush()
+
+    assert parsed_lines
+    assert not empty
+    assert repeated_parsed_lines
+
+
+SENSITIVE_DATA_SCENARIOS = {
+    "no sensitive data tagged": (
+        ["bla  bla", "mytoken: asdkfjsde1341=="],
+        ["bla  bla", "mytoken: asdkfjsde1341=="],
+        "HIDEME",
+    ),
+    "sensitive data tagged": (
+        ["bla  bla", "mytoken: asdkfjsde1341== # HIDEME"],
+        ["bla  bla"],
+        "HIDEME",
+    ),
+    "sensitive data tagged with custom word": (
+        ["bla  bla", "mytoken: asdkfjsde1341== # DELETETHISLINE", "third line"],
+        ["bla  bla", "third line"],
+        "DELETETHISLINE",
+    ),
+}
+
+
+@pytest.mark.parametrize(
+    "input, expectation, tag",
+    SENSITIVE_DATA_SCENARIOS.values(),
+    ids=SENSITIVE_DATA_SCENARIOS.keys(),
+)
+def test_hide_sensitive_data(input, expectation, tag):
+    yaml_data = yaml.safe_dump(input)
+    yaml_result = hide_sensitive_data(yaml_data, tag)
+    result = yaml.safe_load(yaml_result)
+
+    assert result == expectation
+
+
+COLOR_MANGLED_SCENARIOS = {
+    "Mangled error message at target level": (
+        create_lava_yaml_msg(msg="[0m[0m[31mERROR - dEQP error: ", lvl="target"),
+        "\x1b[0m\x1b[0m\x1b[31mERROR - dEQP error: ",
+    ),
+    "Mangled pass message at target level": (
+        create_lava_yaml_msg(
+            msg="[0mPass: 26718, ExpectedFail: 95, Skip: 25187, Duration: 8:18, Remaining: 13",
+            lvl="target",
+        ),
+        "\x1b[0mPass: 26718, ExpectedFail: 95, Skip: 25187, Duration: 8:18, Remaining: 13",
+    ),
+    "Mangled error message with bold formatting at target level": (
+        create_lava_yaml_msg(msg="[1;31mReview the image changes...", lvl="target"),
+        "\x1b[1;31mReview the image changes...",
+    ),
+    "Mangled error message with high intensity background at target level": (
+        create_lava_yaml_msg(msg="[100mReview the image changes...", lvl="target"),
+        "\x1b[100mReview the image changes...",
+    ),
+    "Mangled error message with underline+bg color+fg color at target level": (
+        create_lava_yaml_msg(msg="[4;41;97mReview the image changes...", lvl="target"),
+        "\x1b[4;41;97mReview the image changes...",
+    ),
+    "Bad input for color code.": (
+        create_lava_yaml_msg(
+            msg="[4;97 This message is missing the `m`.", lvl="target"
+        ),
+        "[4;97 This message is missing the `m`.",
+    ),
+}
+
+
+@pytest.mark.parametrize(
+    "message, fixed_message",
+    COLOR_MANGLED_SCENARIOS.values(),
+    ids=COLOR_MANGLED_SCENARIOS.keys(),
+)
+def test_fix_lava_color_log(message, fixed_message):
+    fix_lava_color_log(message)
+
+    assert message["msg"] == fixed_message
+
+
+GITLAB_SECTION_MANGLED_SCENARIOS = {
+    "Mangled section_start at target level": (
+        create_lava_yaml_msg(
+            msg="[0Ksection_start:1652658415:deqp[collapsed=false][0Kdeqp-runner",
+            lvl="target",
+        ),
+        "\x1b[0Ksection_start:1652658415:deqp[collapsed=false]\r\x1b[0Kdeqp-runner",
+    ),
+    "Mangled section_start at target level with header with spaces": (
+        create_lava_yaml_msg(
+            msg="[0Ksection_start:1652658415:deqp[collapsed=false][0Kdeqp runner stats",
+            lvl="target",
+        ),
+        "\x1b[0Ksection_start:1652658415:deqp[collapsed=false]\r\x1b[0Kdeqp runner stats",
+    ),
+    "Mangled section_end at target level": (
+        create_lava_yaml_msg(
+            msg="[0Ksection_end:1652658415:test_setup[0K",
+            lvl="target",
+        ),
+        "\x1b[0Ksection_end:1652658415:test_setup\r\x1b[0K",
+    ),
+}
+
+
+@pytest.mark.parametrize(
+    "message, fixed_message",
+    GITLAB_SECTION_MANGLED_SCENARIOS.values(),
+    ids=GITLAB_SECTION_MANGLED_SCENARIOS.keys(),
+)
+def test_fix_lava_gitlab_section_log(message, fixed_message):
+    fix_lava_gitlab_section_log(message)
+
+    assert message["msg"] == fixed_message
+
+
+WATCHDOG_SCENARIOS = {
+    "1 second before timeout": ({"seconds": -1}, does_not_raise()),
+    "1 second after timeout": ({"seconds": 1}, pytest.raises(MesaCITimeoutError)),
+}
+
+
+@pytest.mark.parametrize(
+    "timedelta_kwargs, exception",
+    WATCHDOG_SCENARIOS.values(),
+    ids=WATCHDOG_SCENARIOS.keys(),
+)
+def test_log_follower_watchdog(frozen_time, timedelta_kwargs, exception):
+    lines = [
+        {
+            "dt": datetime.now(),
+            "lvl": "debug",
+            "msg": "Received signal: <STARTTC> mesa-ci_iris-kbl-traces",
+        },
+    ]
+    td = {LogSectionType.TEST_CASE: timedelta(minutes=1)}
+    lf = LogFollower(timeout_durations=td)
+    lf.feed(lines)
+    frozen_time.tick(
+        lf.timeout_durations[LogSectionType.TEST_CASE] + timedelta(**timedelta_kwargs)
+    )
+    lines = [create_lava_yaml_msg()]
+    with exception:
+        lf.feed(lines)
+
+
+GITLAB_SECTION_ID_SCENARIOS = [
+    ("a-good_name", "a-good_name"),
+    ("spaces are not welcome", "spaces-are-not-welcome"),
+    ("abc:amd64 1/3", "abc-amd64-1-3"),
+]
+
+
+@pytest.mark.parametrize("case_name, expected_id", GITLAB_SECTION_ID_SCENARIOS)
+def test_gitlab_section_id(case_name, expected_id):
+    gl = GitlabSection(
+        id=case_name, header=case_name, type=LogSectionType.LAVA_POST_PROCESSING
+    )
+
+    assert gl.id == expected_id
+
+
+A618_NETWORK_ISSUE_LOGS = [
+    create_lava_yaml_msg(
+        msg="[ 1733.599402] r8152 2-1.3:1.0 eth0: Tx status -71", lvl="target"
+    ),
+    create_lava_yaml_msg(
+        msg="[ 1733.604506] nfs: server 192.168.201.1 not responding, still trying",
+        lvl="target",
+    ),
+]
+TEST_PHASE_LAVA_SIGNAL = create_lava_yaml_msg(
+    msg="Received signal: <STARTTC> mesa-ci_a618_vk", lvl="debug"
+)
+
+
+A618_NETWORK_ISSUE_SCENARIOS = {
+    "Pass - R8152 kmsg during boot": (A618_NETWORK_ISSUE_LOGS, does_not_raise()),
+    "Fail - R8152 kmsg during test phase": (
+        [TEST_PHASE_LAVA_SIGNAL, *A618_NETWORK_ISSUE_LOGS],
+        pytest.raises(MesaCIKnownIssueException),
+    ),
+    "Pass - Partial (1) R8152 kmsg during test phase": (
+        [TEST_PHASE_LAVA_SIGNAL, A618_NETWORK_ISSUE_LOGS[0]],
+        does_not_raise(),
+    ),
+    "Pass - Partial (2) R8152 kmsg during test phase": (
+        [TEST_PHASE_LAVA_SIGNAL, A618_NETWORK_ISSUE_LOGS[1]],
+        does_not_raise(),
+    ),
+    "Pass - Partial subsequent (3) R8152 kmsg during test phase": (
+        [
+            TEST_PHASE_LAVA_SIGNAL,
+            A618_NETWORK_ISSUE_LOGS[0],
+            A618_NETWORK_ISSUE_LOGS[0],
+        ],
+        does_not_raise(),
+    ),
+    "Pass - Partial subsequent (4) R8152 kmsg during test phase": (
+        [
+            TEST_PHASE_LAVA_SIGNAL,
+            A618_NETWORK_ISSUE_LOGS[1],
+            A618_NETWORK_ISSUE_LOGS[1],
+        ],
+        does_not_raise(),
+    ),
+}
+
+
+@pytest.mark.parametrize(
+    "messages, expectation",
+    A618_NETWORK_ISSUE_SCENARIOS.values(),
+    ids=A618_NETWORK_ISSUE_SCENARIOS.keys(),
+)
+def test_detect_failure(messages, expectation):
+    lf = LogFollower()
+    with expectation:
+        lf.feed(messages)
diff -pruN 22.1.3-1/.gitlab-ci/test-source-dep.yml 22.2.0~rc1-1/.gitlab-ci/test-source-dep.yml
--- 22.1.3-1/.gitlab-ci/test-source-dep.yml	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/test-source-dep.yml	2022-08-03 18:11:03.000000000 +0000
@@ -1,19 +1,25 @@
 # This file list source dependencies to avoid creating/running jobs
 # those outcome cannot be changed by the modifications from a branch.
 
-# Generic rule to not run the job during scheduled pipelines
-# ----------------------------------------------------------
-.scheduled_pipelines-rules:
-  rules: &ignore_scheduled_pipelines
-    if: '$CI_PIPELINE_SOURCE == "schedule"'
-    when: never
-
-# Mesa core source file dependencies
-# ----------------------------------
-.mesa-rules:
+# Rule to filter for only scheduled pipelines.
+.scheduled_pipeline-rules:
   rules:
-    - *ignore_scheduled_pipelines
-    - changes: &mesa_core_file_list
+    - if: &is-scheduled-pipeline '$CI_PIPELINE_SOURCE == "schedule"'
+      when: on_success
+
+# Generic rule to not run the job during scheduled pipelines. Jobs that aren't
+# something like a nightly run should include this rule.
+.no_scheduled_pipelines-rules:
+  rules:
+    - if: *is-scheduled-pipeline
+      when: never
+
+# Mesa core source file dependencies that may impact any test job
+# ---------------------------------------------------------------
+.core-rules:
+  rules:
+    - !reference [.no_scheduled_pipelines-rules, rules]
+    - changes: &core_file_list
       - .gitlab-ci.yml
       - .gitlab-ci/**/*
       - include/**/*
@@ -22,12 +28,24 @@
       - src/*
       - src/compiler/**/*
       - src/drm-shim/**/*
-      - src/egl/**/*
       - src/gbm/**/*
-      - src/glx/**/*
       - src/gtest/**/*
       - src/hgl/**/*
       - src/include/**/*
+      # Some src/util and src/compiler files use headers from mesa/ (e.g.
+      # mtypes.h).  We should clean that up.
+      - src/mesa/**/*.h
+      - src/tool/**/*
+      - src/util/**/*
+      when: on_success
+
+# Mesa source file dependencies that may impact any GL driver test job.
+.gl-rules:
+  rules:
+    - !reference [.core-rules, rules]
+    - changes: &mesa_core_file_list
+      - src/egl/**/*
+      - src/glx/**/*
       - src/loader/**/*
       - src/mapi/**/*
       - src/mesa/*
@@ -41,22 +59,7 @@
       - src/mesa/vbo/**/*
       - src/mesa/x86/**/*
       - src/mesa/x86-64/**/*
-      - src/tool/**/*
-      - src/util/**/*
-
-.vulkan-rules:
-  rules:
-    - *ignore_scheduled_pipelines
-    - changes: &vulkan_file_list
-      - src/vulkan/**/*
       when: on_success
-    - when: never
-
-# Gallium core source file dependencies
-# -------------------------------------
-.gallium-rules:
-  rules:
-    - *ignore_scheduled_pipelines
     - changes: &gallium_core_file_list
       - src/gallium/*
       - src/gallium/auxiliary/**/*
@@ -67,63 +70,50 @@
       - src/gallium/targets/**/*
       - src/gallium/tests/**/*
       - src/gallium/winsys/*
+      when: on_success
+
+# Source file dependencies that may impact any Vulkan driver build or test
+.vulkan-rules:
+  rules:
+    - !reference [.core-rules, rules]
+    - changes: &vulkan_file_list
+      - src/vulkan/**/*
+      when: on_success
 
 .softpipe-rules:
   stage: software-renderer
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.gl-rules, rules]
     - changes: &softpipe_file_list
       - src/gallium/drivers/softpipe/**/*
       - src/gallium/winsys/sw/**/*
       when: on_success
-    - when: never
 
 .llvmpipe-rules:
   stage: software-renderer
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.gl-rules, rules]
     - changes: &llvmpipe_file_list
       - src/gallium/drivers/llvmpipe/**/*
       - src/gallium/winsys/sw/**/*
       when: on_success
-    - when: never
 
 .lavapipe-rules:
   stage: software-renderer
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.vulkan-rules, rules]
+    # One could probably be a little more clever here and skip non-gallium Mesa changes (see also .llvmpipe-cl-rules).
+    - !reference [.gl-rules, rules]
     - changes: &lavapipe_file_list
       - src/gallium/drivers/llvmpipe/**/*
       - src/gallium/frontends/lavapipe/**/*
       - src/gallium/winsys/sw/**/*
       when: on_success
-    - changes:
-        *vulkan_file_list
-      when: on_success
-    - when: never
 
 .llvmpipe-cl-rules:
   stage: software-renderer
   rules:
-    - *ignore_scheduled_pipelines
+    - !reference [.no_scheduled_pipelines-rules, rules]
     - changes:
       - .gitlab-ci.yml
       - .gitlab-ci/**/*
@@ -143,73 +133,80 @@
     - changes: &clover_file_list
       - src/gallium/frontends/clover/**/*
       when: on_success
-    - when: never
 
-.freedreno-rules:
-  stage: freedreno
+.collabora-farm-rules:
   rules:
-    - if: '$FD_FARM == "offline"'
-      when: never
     - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
       when: never
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
-    - changes:
-        *vulkan_file_list
+
+.igalia-farm-rules:
+  rules:
+    - if: '$IGALIA_FARM == "offline"'
+      when: never
+
+# Skips freedreno jobs if either of the farms we use are offline.
+.freedreno-farm-rules:
+  rules:
+    - if: '$FD_FARM == "offline"'
+      when: never
+    - !reference [.collabora-farm-rules, rules]
+
+# Rules for changes that impact either freedreno or turnip.
+.freedreno-common-rules:
+  rules:
+    - !reference [.freedreno-farm-rules, rules]
+    - changes: &freedreno_core_file_list
+      - src/freedreno/ci/**/*
+      - src/freedreno/common/**/*
+      - src/freedreno/drm/**/*
+      - src/freedreno/fdl/**/*
+      - src/freedreno/ir3/**/*
+      - src/freedreno/isa/**/*
+      - src/freedreno/registers/**/*
       when: on_success
-    - changes: &freedreno_file_list
-      # Note: when https://gitlab.com/gitlab-org/gitlab/-/issues/198688
-      # is supported, we can change the src/freedreno/ rule to explicitly
-      # exclude tools
-      - src/freedreno/**/*
+
+.freedreno-rules:
+  stage: freedreno
+  rules:
+    - !reference [.gl-rules, rules]
+    - !reference [.freedreno-common-rules, rules]
+    - changes: &freedreno_gl_file_list
+      - src/freedreno/ir2/**/*
       - src/gallium/drivers/freedreno/**/*
       - src/gallium/winsys/freedreno/**/*
       when: on_success
-    - when: never
 
-# Unfortunately YAML doesn't let us concatenate arrays, so we have to do the
-# rules duplication manually
-.freedreno-rules-restricted:
+.turnip-rules:
   stage: freedreno
   rules:
-    - if: '$FD_FARM == "offline"'
-      when: never
-    - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
-      when: never
-    # If the triggerer has access to the restricted traces and if it is pre-merge
-    - if: '($GITLAB_USER_LOGIN !~ "/^(robclark|anholt|flto|cwabbott0|Danil|tomeu)$/") &&
-           ($GITLAB_USER_LOGIN != "marge-bot" || $CI_COMMIT_BRANCH)'
-      when: never
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
-    - changes:
-        *vulkan_file_list
-      when: on_success
+    - !reference [.vulkan-rules, rules]
+    - !reference [.freedreno-common-rules, rules]
     - changes:
-        *freedreno_file_list
+      - src/freedreno/vulkan/**/*
       when: on_success
-    - when: never
 
-# Unfortunately YAML doesn't let us concatenate arrays, so we have to do the
-# rules duplication manually
-.freedreno-rules-performance:
+# For piglit and skqp test jobs that run both GL and VK tests.
+.freedreno-turnip-rules:
+  rules:
+    - !reference [.freedreno-rules, rules]
+    - !reference [.turnip-rules, rules]
+
+.freedreno-rules-restricted:
   stage: freedreno
   rules:
-    - if: '$FD_FARM == "offline"'
-      when: never
-    - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
+    # If the triggerer has access to the restricted traces and if it is pre-merge
+    - if: '($GITLAB_USER_LOGIN !~ "/^(robclark|anholt|flto|cwabbott0|Danil|tomeu|okias)$/") &&
+           ($GITLAB_USER_LOGIN != "marge-bot" || $CI_COMMIT_BRANCH)'
       when: never
-    - *ignore_scheduled_pipelines
+    - !reference [.freedreno-rules, rules]
+
+# Rules for GL driver performance tracking.  We want them to run as code is
+# merged to main, but we don't want them to block marge.  So, they need to have
+# only when: never or when: manual, and a separate script maintained by
+# Collabora triggers the manual job after merge to main.
+.gl-rules-performance:
+  rules:
+    - !reference [.no_scheduled_pipelines-rules, rules]
     # Run only on pre-merge pipelines from Marge
     - if: '$GITLAB_USER_LOGIN != "marge-bot" || $CI_COMMIT_BRANCH'
       when: never
@@ -219,44 +216,37 @@
     - changes:
         *gallium_core_file_list
       when: manual
+
+# Unfortunately YAML doesn't let us concatenate arrays, so we have to do the
+# rules duplication manually
+.freedreno-rules-performance:
+  stage: freedreno
+  rules:
+    - !reference [.freedreno-farm-rules, rules]
+    - !reference [.gl-rules-performance, rules]
     - changes:
-        *vulkan_file_list
+        *freedreno_core_file_list
       when: manual
     - changes:
-        *freedreno_file_list
+        *freedreno_gl_file_list
       when: manual
-    - when: never
 
 .nouveau-rules:
   stage: nouveau
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.gl-rules, rules]
     - changes:
       - src/nouveau/**/*
       - src/gallium/drivers/nouveau/**/*
       - src/gallium/winsys/kmsro/**/*
       - src/gallium/winsys/nouveau/**/*
       when: on_success
-    - when: never
 
 .panfrost-midgard-rules:
   stage: arm
   rules:
-    - *ignore_scheduled_pipelines
-    - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
-      when: never
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.collabora-farm-rules, rules]
+    - !reference [.gl-rules, rules]
     - changes: &panfrost_gallium_file_list
       - src/gallium/drivers/panfrost/**/*
       - src/gallium/winsys/panfrost/**/*
@@ -271,130 +261,85 @@
     - changes:
       - src/panfrost/midgard/**/*
       when: on_success
-    - when: never
 
 .panfrost-bifrost-rules:
   stage: arm
   rules:
-    - *ignore_scheduled_pipelines
-    - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
-      when: never
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.collabora-farm-rules, rules]
+    - !reference [.vulkan-rules, rules]
+    - !reference [.gl-rules, rules]
     - changes:
         *panfrost_common_file_list
       when: on_success
     - changes:
         *panfrost_gallium_file_list
       when: on_success
-    - changes:
-        *vulkan_file_list
-      when: on_success
     - changes: &panfrost_vulkan_file_list
       - src/panfrost/vulkan/*
       when: on_success
     - changes:
       - src/panfrost/bifrost/**/*
       when: on_success
-    - when: never
 
 .vc4-rules:
   stage: broadcom
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.igalia-farm-rules, rules]
+    - !reference [.gl-rules, rules]
     - changes:
       - src/broadcom/**/*
       - src/gallium/drivers/vc4/**/*
       - src/gallium/winsys/kmsro/**/*
       - src/gallium/winsys/vc4/**/*
       when: on_success
-    - when: never
 
 .v3d-rules:
   stage: broadcom
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.igalia-farm-rules, rules]
+    - !reference [.gl-rules, rules]
     - changes:
       - src/broadcom/**/*
       - src/gallium/drivers/v3d/**/*
       - src/gallium/winsys/kmsro/**/*
       - src/gallium/winsys/v3d/**/*
       when: on_success
-    - when: never
 
 .v3dv-rules:
   stage: broadcom
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *vulkan_file_list
-      when: on_success
+    - !reference [.igalia-farm-rules, rules]
+    - !reference [.vulkan-rules, rules]
     - changes:
       - src/broadcom/**/*
       when: on_success
-    - when: never
 
 .lima-rules:
   stage: arm
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - if: '$LIMA_FARM == "offline"'
+      when: never
+    - !reference [.gl-rules, rules]
     - changes:
       - src/gallium/drivers/lima/**/*
       - src/gallium/winsys/lima/**/*
       - src/lima/**/*
       when: on_success
-    - when: never
 
 .radv-rules:
   stage: amd
   rules:
-    - *ignore_scheduled_pipelines
-    - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
-      when: never
-    - changes:
-        *mesa_core_file_list
-      when: on_success
+    - !reference [.collabora-farm-rules, rules]
+    - !reference [.vulkan-rules, rules]
     - changes: &radv_file_list
       - src/amd/**/*
       - src/vulkan/**/*
       when: on_success
-    - when: never
 
 .virgl-rules:
   stage: layered-backends
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.gl-rules, rules]
     - changes:
         *llvmpipe_file_list
       when: on_success
@@ -402,47 +347,30 @@
       - src/gallium/drivers/virgl/**/*
       - src/gallium/winsys/virgl/**/*
       when: on_success
-    - when: never
 
-# Unfortunately YAML doesn't let us concatenate arrays, so we have to do the
-# rules duplication manually
-.virgl-lava-rules-performance:
+# Unfortunately we can't sed the on_success from another rules set, so we have
+# to do duplicate the files lists to set the job to manual (see
+# .gl-rules-performance)
+.virgl-iris-rules-performance:
   stage: layered-backends
   rules:
-    - *ignore_scheduled_pipelines
-    - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
-      when: never
-    # Run only on pre-merge pipelines from Marge
-    - if: '$GITLAB_USER_LOGIN != "marge-bot" || $CI_COMMIT_BRANCH'
-      when: never
-    - changes:
-        *mesa_core_file_list
-      when: manual
-    - changes:
-        *gallium_core_file_list
-      when: manual
+    - !reference [.collabora-farm-rules, rules]
+    - !reference [.gl-rules-performance, rules]
     - changes:
         *llvmpipe_file_list
       when: manual
     - changes:
         *virgl_file_list
       when: manual
-    - when: never
 
 .radeonsi-rules:
   stage: amd
   rules:
-    - *ignore_scheduled_pipelines
-    - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
-      when: never
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.collabora-farm-rules, rules]
+    - !reference [.gl-rules, rules]
     - changes: &radeonsi_file_list
       - src/gallium/drivers/radeonsi/**/*
+      - src/gallium/include/winsys/**/*
       - src/gallium/winsys/amdgpu/**/*
       - src/amd/*
       - src/amd/addrlib/**/*
@@ -450,138 +378,110 @@
       - src/amd/llvm/**/*
       - src/amd/registers/**/*
       when: on_success
-    - when: never
 
 .radeonsi-vaapi-rules:
   stage: amd
   rules:
-    - *ignore_scheduled_pipelines
-    - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
-      when: never
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.collabora-farm-rules, rules]
+    - !reference [.gl-rules, rules]
     - changes:
         *radeonsi_file_list
       when: on_success
     - changes: &radeon_vcn_file_list
       - src/gallium/frontends/va/**/*
-      - src/gallium/drivers/radeon/**/*
       when: on_success
-    - when: never
 
 .i915g-rules:
   stage: intel
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.gl-rules, rules]
     - changes:
       - src/gallium/drivers/i915/**/*
       - src/gallium/winsys/i915/**/*
       - src/intel/**/*
       when: on_success
-    - when: never
 
 .crocus-rules:
   stage: intel
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.gl-rules, rules]
     - changes:
       - src/gallium/drivers/crocus/**/*
       - src/gallium/winsys/crocus/**/*
       - src/intel/**/*
       when: on_success
-    - when: never
 
 .iris-rules:
   stage: intel
   rules:
-    - *ignore_scheduled_pipelines
-    - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
-      when: never
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.no_scheduled_pipelines-rules, rules]
+    - !reference [.collabora-farm-rules, rules]
+    - !reference [.gl-rules, rules]
     - changes: &iris_file_list
       - src/gallium/drivers/iris/**/*
       - src/gallium/winsys/iris/**/*
       - src/intel/**/*
       when: on_success
-    - when: never
 
-# Unfortunately YAML doesn't let us concatenate arrays, so we have to do the
-# rules duplication manually
+# Unfortunately we can't sed the on_success from another rules set, so we have
+# to do duplicate the files lists to set the job to manual (see
+# .gl-rules-performance)
 .iris-rules-performance:
   stage: intel
   rules:
-    - *ignore_scheduled_pipelines
-    - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
-      when: never
-    # Run only on pre-merge pipelines from Marge
-    - if: '$GITLAB_USER_LOGIN != "marge-bot" || $CI_COMMIT_BRANCH'
-      when: never
-    - changes:
-        *mesa_core_file_list
-      when: manual
-    - changes:
-        *gallium_core_file_list
-      when: manual
+    - !reference [.collabora-farm-rules, rules]
+    - !reference [.gl-rules-performance, rules]
     - changes:
         *iris_file_list
       when: manual
-    - when: never
 
 .anv-rules:
   stage: intel
   rules:
-    - *ignore_scheduled_pipelines
-    - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
-      when: never
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *vulkan_file_list
-      when: on_success
+    - !reference [.no_scheduled_pipelines-rules, rules]
+    - !reference [.collabora-farm-rules, rules]
+    - !reference [.vulkan-rules, rules]
     - changes:
       - src/intel/**/*
       when: on_success
-    - when: never
 
-.zink-rules:
-  stage: layered-backends
+.intel-rules:
+  stage: intel
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
+    - !reference [.collabora-farm-rules, rules]
+    # Note that we trigger on changes both anv and iris, because piglit and skqp jobs test both.
+    - !reference [.vulkan-rules, rules]
+    - !reference [.gl-rules, rules]
+    - changes: &iris_file_list
+      - src/gallium/drivers/iris/**/*
+      - src/gallium/winsys/iris/**/*
+      - src/intel/**/*
       when: on_success
+
+.zink-common-rules:
+  rules:
+    - !reference [.gl-rules, rules]
     - changes:
-        *lavapipe_file_list
-      when: on_success
-    - changes: &zink_file_list
       - src/gallium/drivers/zink/**/*
       when: on_success
-    - when: never
+
+.zink-lvp-rules:
+  stage: layered-backends
+  rules:
+    - !reference [.zink-common-rules, rules]
+    - !reference [.lavapipe-rules, rules]
+
+.zink-anv-rules:
+  stage: layered-backends
+  rules:
+    - !reference [.zink-common-rules, rules]
+    - !reference [.anv-rules, rules]
+
+.zink-turnip-rules:
+  stage: layered-backends
+  rules:
+    - !reference [.zink-common-rules, rules]
+    - !reference [.turnip-rules, rules]
 
 # Unfortunately YAML doesn't let us concatenate arrays, so we have to do the
 # rules duplication manually
@@ -589,69 +489,67 @@
   rules:
     - if: '$MICROSOFT_FARM == "offline"'
       when: never
-    - *ignore_scheduled_pipelines
-    - changes: 
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.zink-common-rules, rules]
+    - !reference [.vulkan-rules, rules]
     - changes:
         *softpipe_file_list
       when: on_success
     - changes:
         *lavapipe_file_list
       when: on_success
-    - changes:
-        *vulkan_file_list
-      when: on_success
     - changes: &d3d12_file_list
       - src/gallium/drivers/d3d12/**/*
-      - src/microsoft/**/*
       - src/gallium/frontends/wgl/*
       - src/gallium/winsys/d3d12/wgl/*
       - src/gallium/targets/libgl-gdi/*
       - src/gallium/targets/libgl-d3d12/*
       when: on_success
     - changes:
-        *zink_file_list
+      - src/microsoft/**/*
       when: on_success
     - changes:
         *radv_file_list
       when: on_success
-    - when: never
 
-.windows-test-rules:
+.glon12-test-rules:
   rules:
     - if: '$MICROSOFT_FARM == "offline"'
       when: never
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
+    - !reference [.gl-rules, rules]
+    - changes: *d3d12_file_list
       when: on_success
     - changes:
-        *gallium_core_file_list
+      - src/microsoft/compiler/*
       when: on_success
-    - changes:
-        *lavapipe_file_list
+
+.spirv2dxil-test-rules:
+  rules:
+    - if: '$MICROSOFT_FARM == "offline"'
+      when: never
+    - !reference [.no_scheduled_pipelines-rules, rules]
+    - !reference [.core-rules, rules]
+    - changes: &spirv2dxil_file_list
+      - src/microsoft/ci/*
+      - src/microsoft/compiler/*
+      - src/microsoft/spirv_to_dxil/*
       when: on_success
+
+.dozen-test-rules:
+  rules:
+    - if: '$MICROSOFT_FARM == "offline"'
+      when: never
+    - !reference [.vulkan-rules, rules]
     - changes:
-        *vulkan_file_list
+        *spirv2dxil_file_list
       when: on_success
-    - changes: *d3d12_file_list
+    - changes:
+      - src/microsoft/vulkan/*
       when: on_success
-    - when: never
 
 .etnaviv-rules:
   stage: etnaviv
   rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.gl-rules, rules]
     - changes:
       - src/etnaviv/**/*
       - src/gallium/drivers/etnaviv/**/*
@@ -660,18 +558,12 @@
       - src/gallium/winsys/kmsro/**/*
       - src/gallium/winsys/etnaviv/**/*
       when: on_success
-    - when: never
 
 # Rules for unusual architectures that only build a subset of drivers
 .ppc64el-rules:
    rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.no_scheduled_pipelines-rules, rules]
+    - !reference [.zink-common-rules, rules]
     - changes:
         *softpipe_file_list
       when: on_success
@@ -688,26 +580,17 @@
         *radeonsi_file_list
       when: on_success
     - changes:
-        *zink_file_list
-      when: on_success
-    - changes:
         *virgl_file_list
       when: on_success
     - changes:
       - src/gallium/drivers/nouveau/**/*
       - src/gallium/winsys/nouveau/**/*
       when: on_success
-    - when: never
 
 .s390x-rules:
    rules:
-    - *ignore_scheduled_pipelines
-    - changes:
-        *mesa_core_file_list
-      when: on_success
-    - changes:
-        *gallium_core_file_list
-      when: on_success
+    - !reference [.no_scheduled_pipelines-rules, rules]
+    - !reference [.zink-common-rules, rules]
     - changes:
         *softpipe_file_list
       when: on_success
@@ -717,7 +600,3 @@
     - changes:
         *lavapipe_file_list
       when: on_success
-    - changes:
-        *zink_file_list
-      when: on_success
-    - when: never
diff -pruN 22.1.3-1/.gitlab-ci/valve/b2c.yml.jinja2.jinja2 22.2.0~rc1-1/.gitlab-ci/valve/b2c.yml.jinja2.jinja2
--- 22.1.3-1/.gitlab-ci/valve/b2c.yml.jinja2.jinja2	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/valve/b2c.yml.jinja2.jinja2	1970-01-01 00:00:00.000000000 +0000
@@ -1,63 +0,0 @@
-version: 1
-
-# Rules to match for a machine to qualify
-target:
-{% if tags %}
-{% set b2ctags = tags.split(',') %}
-  tags:
-{% for tag in b2ctags %}
-    - '{{ tag | trim }}'
-{% endfor %}
-{% endif %}
-
-timeouts:
-  first_console_activity:  # This limits the time it can take to receive the first console log
-    minutes: {{ timeout_first_minutes }}
-    retries: {{ timeout_first_retries }}
-  console_activity:        # Reset every time we receive a message from the logs
-    minutes: {{ timeout_minutes }}
-    retries: {{ timeout_retries }}
-  boot_cycle:
-    minutes: {{ timeout_boot_minutes }}
-    retries: {{ timeout_boot_retries }}
-  overall:                 # Maximum time the job can take, not overrideable by the "continue" deployment
-    minutes: {{ timeout_overall_minutes }}
-    retries: 0
-    # no retries possible here
-
-console_patterns:
-    session_end:
-        regex: >-
-          {{ session_end_regex }}
-    session_reboot:
-        regex: >-
-          {{ session_reboot_regex }}
-    job_success:
-        regex: >-
-          {{ job_success_regex }}
-
-# Environment to deploy
-deployment:
-  # Initial boot
-  start:
-    kernel:
-      url: '{{ kernel_url }}'
-      cmdline: >
-        SALAD.machine_id={{ '{{' }} machine_id }}
-        console={{ '{{' }} local_tty_device }},115200 earlyprintk=vga,keep
-        loglevel={{ log_level }} amdgpu.gpu_recovery=0 no_hash_pointers
-        b2c.container="-ti --tls-verify=false docker://{{ '{{' }} fdo_proxy_registry }}/mupuf/valve-infra/machine_registration:latest check"
-        b2c.ntp_peer=10.42.0.1 b2c.pipefail b2c.cache_device=auto b2c.poweroff_delay={{ poweroff_delay }}
-        b2c.minio="gateway,{{ '{{' }} minio_url }},{{ '{{' }} job_bucket_access_key }},{{ '{{' }} job_bucket_secret_key }}"
-        b2c.volume="{{ '{{' }} job_bucket }}-results,mirror=gateway/{{ '{{' }} job_bucket }},pull_on=pipeline_start,push_on=changes,overwrite{% for excl in job_volume_exclusions %},exclude={{ excl }}{% endfor %},expiration=pipeline_end,preserve"
-{% for volume in volumes %}
-        b2c.volume={{ volume }}
-{% endfor %}
-        b2c.container="-v {{ '{{' }} job_bucket }}-results:{{ working_dir }} -w {{ working_dir }} {% for mount_volume in mount_volumes %} -v {{ mount_volume }}{% endfor %} --tls-verify=false docker://{{ local_container }} {{ container_cmd }}"
-        {% if cmdline_extras is defined %}
-        {{ cmdline_extras }}
-        {% endif %}
-
-    initramfs:
-      url: '{{ initramfs_url }}'
-
diff -pruN 22.1.3-1/.gitlab-ci/valve/generate_b2c.py 22.2.0~rc1-1/.gitlab-ci/valve/generate_b2c.py
--- 22.1.3-1/.gitlab-ci/valve/generate_b2c.py	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/valve/generate_b2c.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,101 +0,0 @@
-#!/usr/bin/env python3
-
-# Copyright © 2022 Valve Corporation
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from jinja2 import Environment, FileSystemLoader
-from argparse import ArgumentParser
-from os import environ, path
-
-
-parser = ArgumentParser()
-parser.add_argument('--ci-job-id')
-parser.add_argument('--container-cmd')
-parser.add_argument('--initramfs-url')
-parser.add_argument('--job-success-regex')
-parser.add_argument('--job-warn-regex')
-parser.add_argument('--kernel-url')
-parser.add_argument('--log-level', type=int)
-parser.add_argument('--poweroff-delay', type=int)
-parser.add_argument('--session-end-regex')
-parser.add_argument('--session-reboot-regex')
-parser.add_argument('--tags', nargs='?', default='')
-parser.add_argument('--template', default='b2c.yml.jinja2.jinja2')
-parser.add_argument('--timeout-boot-minutes', type=int)
-parser.add_argument('--timeout-boot-retries', type=int)
-parser.add_argument('--timeout-first-minutes', type=int)
-parser.add_argument('--timeout-first-retries', type=int)
-parser.add_argument('--timeout-minutes', type=int)
-parser.add_argument('--timeout-overall-minutes', type=int)
-parser.add_argument('--timeout-retries', type=int)
-parser.add_argument('--job-volume-exclusions', nargs='?', default='')
-parser.add_argument('--volume', action='append')
-parser.add_argument('--mount-volume', action='append')
-parser.add_argument('--local-container', default=environ.get('B2C_LOCAL_CONTAINER', 'alpine:latest'))
-parser.add_argument('--working-dir')
-args = parser.parse_args()
-
-env = Environment(loader=FileSystemLoader(path.dirname(args.template)),
-                  trim_blocks=True, lstrip_blocks=True)
-
-template = env.get_template(path.basename(args.template))
-
-values = {}
-values['ci_job_id'] = args.ci_job_id
-values['container_cmd'] = args.container_cmd
-values['initramfs_url'] = args.initramfs_url
-values['job_success_regex'] = args.job_success_regex
-values['job_warn_regex'] = args.job_warn_regex
-values['kernel_url'] = args.kernel_url
-values['log_level'] = args.log_level
-values['poweroff_delay'] = args.poweroff_delay
-values['session_end_regex'] = args.session_end_regex
-values['session_reboot_regex'] = args.session_reboot_regex
-values['tags'] = args.tags
-values['template'] = args.template
-values['timeout_boot_minutes'] = args.timeout_boot_minutes
-values['timeout_boot_retries'] = args.timeout_boot_retries
-values['timeout_first_minutes'] = args.timeout_first_minutes
-values['timeout_first_retries'] = args.timeout_first_retries
-values['timeout_minutes'] = args.timeout_minutes
-values['timeout_overall_minutes'] = args.timeout_overall_minutes
-values['timeout_retries'] = args.timeout_retries
-if len(args.job_volume_exclusions) > 0:
-    exclusions = args.job_volume_exclusions.split(",")
-    values['job_volume_exclusions'] = [excl for excl in exclusions if len(excl) > 0]
-if args.volume is not None:
-    values['volumes'] = args.volume
-if args.mount_volume is not None:
-    values['mount_volumes'] = args.mount_volume
-values['working_dir'] = args.working_dir
-
-assert(len(args.local_container) > 0)
-values['local_container'] = args.local_container.replace(
-    # Use the gateway's pull-through registry cache to reduce load on fd.o.
-    'registry.freedesktop.org', '{{ fdo_proxy_registry }}'
-)
-
-if 'B2C_KERNEL_CMDLINE_EXTRAS' in environ:
-    values['cmdline_extras'] = environ['B2C_KERNEL_CMDLINE_EXTRAS']
-
-f = open(path.splitext(path.basename(args.template))[0], "w")
-f.write(template.render(values))
-f.close()
diff -pruN 22.1.3-1/.gitlab-ci/valve/traces-runner.sh 22.2.0~rc1-1/.gitlab-ci/valve/traces-runner.sh
--- 22.1.3-1/.gitlab-ci/valve/traces-runner.sh	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/valve/traces-runner.sh	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,87 @@
+#!/bin/sh
+
+set -ex
+
+if [ "x$VK_DRIVER" = "x" ]; then
+    exit 1
+fi
+
+# Useful debug output, you rarely know what envirnoment you'll be
+# running in within container-land, this can be a landmark.
+ls -l
+
+INSTALL=$(realpath -s "$PWD"/install)
+RESULTS=$(realpath -s "$PWD"/results)
+
+# Set up the driver environment.
+# Modifiying here directly LD_LIBRARY_PATH may cause problems when
+# using a command wrapper. Hence, we will just set it when running the
+# command.
+export __LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$INSTALL/lib/"
+
+# Sanity check to ensure that our environment is sufficient to make our tests
+# run against the Mesa built by CI, rather than any installed distro version.
+MESA_VERSION=$(cat "$INSTALL/VERSION" | sed 's/\./\\./g')
+
+# Force the stdout and stderr streams to be unbuffered in python.
+export PYTHONUNBUFFERED=1
+
+# Set the Vulkan driver to use.
+export VK_ICD_FILENAMES="$INSTALL/share/vulkan/icd.d/${VK_DRIVER}_icd.x86_64.json"
+if [ ${VK_DRIVER} = "radeon" ]; then
+    # Disable vsync
+    export MESA_VK_WSI_PRESENT_MODE=mailbox
+    export vblank_mode=0
+fi
+
+# Set environment for Wine.
+export WINEDEBUG="-all"
+export WINEPREFIX="/dxvk-wine64"
+export WINEESYNC=1
+
+# Wait for amdgpu to be fully loaded
+sleep 1
+
+# Avoid having to perform nasty command pre-processing to insert the
+# wine executable in front of the test executables. Instead, use the
+# kernel's binfmt support to automatically use Wine as an interpreter
+# when asked to load PE executables.
+# TODO: Have boot2container mount this filesystem for all jobs?
+mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
+echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register
+
+# Set environment for DXVK.
+export DXVK_LOG_LEVEL="info"
+export DXVK_LOG="$RESULTS/dxvk"
+[ -d "$DXVK_LOG" ] || mkdir -pv "$DXVK_LOG"
+export DXVK_STATE_CACHE=0
+
+# Set environment for replaying traces.
+export PATH="/apitrace-msvc-win64/bin:/gfxreconstruct/build/bin:$PATH"
+
+SANITY_MESA_VERSION_CMD="vulkaninfo"
+
+# Set up the Window System Interface (WSI)
+# TODO: Can we get away with GBM?
+if [ ${TEST_START_XORG:-0} -eq 1 ]; then
+    "$INSTALL"/common/start-x.sh "$INSTALL"
+    export DISPLAY=:0
+fi
+
+wine --version
+
+SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD | tee /tmp/version.txt | grep \"Mesa $MESA_VERSION\(\s\|$\)\""
+
+RUN_CMD="export LD_LIBRARY_PATH=$__LD_LIBRARY_PATH; $SANITY_MESA_VERSION_CMD"
+
+set +e
+eval $RUN_CMD
+
+if [ $? -ne 0 ]; then
+    printf "%s\n" "Found $(cat /tmp/version.txt), expected $MESA_VERSION"
+fi
+set -e
+
+# Just to be sure...
+chmod +x ./valvetraces-run.sh
+./valvetraces-run.sh
diff -pruN 22.1.3-1/.gitlab-ci/vkd3d-proton/run.sh 22.2.0~rc1-1/.gitlab-ci/vkd3d-proton/run.sh
--- 22.1.3-1/.gitlab-ci/vkd3d-proton/run.sh	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/vkd3d-proton/run.sh	2022-08-03 18:11:03.000000000 +0000
@@ -14,7 +14,7 @@ RESULTS=$(realpath -s "$PWD"/results)
 # Modifiying here directly LD_LIBRARY_PATH may cause problems when
 # using a command wrapper. Hence, we will just set it when running the
 # command.
-export __LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$INSTALL/lib/"
+export __LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$INSTALL/lib/:/vkd3d-proton-tests/x64/"
 
 
 # Sanity check to ensure that our environment is sufficient to make our tests
@@ -64,7 +64,7 @@ else
     mkdir "$RESULTS"
 fi
 
-VKD3D_PROTON_TESTSUITE_CMD="wine /vkd3d-proton-tests/x64/bin/d3d12.exe >$RESULTS/vkd3d-proton.log 2>&1"
+VKD3D_PROTON_TESTSUITE_CMD="/vkd3d-proton-tests/x64/bin/d3d12 >$RESULTS/vkd3d-proton.log"
 
 quiet printf "%s\n" "Running vkd3d-proton testsuite..."
 RUN_CMD="export LD_LIBRARY_PATH=$__LD_LIBRARY_PATH; $HANG_DETECTION_CMD $VKD3D_PROTON_TESTSUITE_CMD"
@@ -72,7 +72,7 @@ RUN_CMD="export LD_LIBRARY_PATH=$__LD_LI
 set +e
 eval $RUN_CMD
 
-VKD3D_PROTON_RESULTS="vkd3d-proton-${VKD3D_PROTON_RESULTS:-results}"
+VKD3D_PROTON_RESULTS="${VKD3D_PROTON_RESULTS:-vkd3d-proton-results}"
 RESULTSFILE="$RESULTS/$VKD3D_PROTON_RESULTS.txt"
 mkdir -p .gitlab-ci/vkd3d-proton
 grep "Test failed" "$RESULTS"/vkd3d-proton.log > "$RESULTSFILE"
@@ -85,6 +85,7 @@ else
 fi
 
 if diff -q ".gitlab-ci/vkd3d-proton/$VKD3D_PROTON_RESULTS.txt.baseline" "$RESULTSFILE"; then
+    echo "SUCCESS: No changes found!"
     exit 0
 fi
 
diff -pruN 22.1.3-1/.gitlab-ci/windows/deqp_runner_run.ps1 22.2.0~rc1-1/.gitlab-ci/windows/deqp_runner_run.ps1
--- 22.1.3-1/.gitlab-ci/windows/deqp_runner_run.ps1	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/windows/deqp_runner_run.ps1	2022-08-03 18:11:03.000000000 +0000
@@ -13,18 +13,18 @@ New-Item -Path $hkey_path -force
 New-ItemProperty -Path $hkey_path -Name $hkey_name -Value 0 -PropertyType DWORD
 
 $results = New-Item -ItemType Directory results
-$deqp_options = @("--deqp-surface-width", 256, "--deqp-surface-height", 256, "--deqp-surface-type", "pbuffer", "--deqp-gl-config-name", "rgba8888d24s8ms0", "--deqp-visibility", "hidden")
-$deqp_module = "C:\deqp\external\vulkancts\modules\vulkan\deqp-vk.exe"
-$caselist = "C:\deqp\mustpass\vk-master.txt"
 $baseline = ".\_install\warp-fails.txt"
-$includes = @("-t", "dEQP-VK.api.*", "-t", "dEQP-VK.info.*", "-t", "dEQP-VK.draw.*", "-t", "dEQP-VK.query_pool.*", "-t", "dEQP-VK.memory.*")
+$suite = ".\_install\deqp-dozen.toml"
 
 $env:DZN_DEBUG = "warp"
-deqp-runner run --deqp $($deqp_module) --output $($results) --caselist $($caselist) --baseline $($baseline) $($includes) --testlog-to-xml C:\deqp\executor\testlog-to-xml.exe --jobs 4 -- $($deqp_options)
+$env:MESA_VK_IGNORE_CONFORMANCE_WARNING = "true"
+deqp-runner suite --suite $($suite) --output $($results) --baseline $($baseline) --testlog-to-xml C:\deqp\executor\testlog-to-xml.exe --jobs 4 --fraction 3
 $deqpstatus = $?
 
 $template = "See https://$($env:CI_PROJECT_ROOT_NAMESPACE).pages.freedesktop.org/-/$($env:CI_PROJECT_NAME)/-/jobs/$($env:CI_JOB_ID)/artifacts/results/{{testcase}}.xml"
 deqp-runner junit --testsuite dEQP --results "$($results)/failures.csv" --output "$($results)/junit.xml" --limit 50 --template $template
+Copy-Item -Path "C:\deqp\testlog.css" -Destination $($results)
+Copy-Item -Path "C:\deqp\testlog.xsl" -Destination $($results)
 
 if (!$deqpstatus) {
     Exit 1
diff -pruN 22.1.3-1/.gitlab-ci/windows/Dockerfile_build 22.2.0~rc1-1/.gitlab-ci/windows/Dockerfile_build
--- 22.1.3-1/.gitlab-ci/windows/Dockerfile_build	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/windows/Dockerfile_build	2022-08-03 18:11:03.000000000 +0000
@@ -1,13 +1,11 @@
 # escape=`
 
-FROM mcr.microsoft.com/windows:1809
-
-# Make sure any failure in PowerShell scripts is fatal
-SHELL ["powershell", "-ExecutionPolicy", "RemoteSigned", "-Command", "$ErrorActionPreference = 'Stop';"]
-ENV ErrorActionPreference='Stop'
-
-COPY mesa_deps_vs2019.ps1 C:\
-RUN C:\mesa_deps_vs2019.ps1
+ARG base_image
+FROM ${base_image}
 
 COPY mesa_deps_build.ps1 C:\
 RUN C:\mesa_deps_build.ps1
+
+# When building, `--isolation=process` can leverage all cores and memory
+# docker build --isolation=process -f .\Dockerfile_build -t mesa_dep --build-arg base_image=mesa_vs .
+
diff -pruN 22.1.3-1/.gitlab-ci/windows/Dockerfile_vs 22.2.0~rc1-1/.gitlab-ci/windows/Dockerfile_vs
--- 22.1.3-1/.gitlab-ci/windows/Dockerfile_vs	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/windows/Dockerfile_vs	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,29 @@
+# escape=`
+
+ARG base_image
+FROM ${base_image}
+
+# https://www.thomasmaurer.ch/2019/07/how-to-install-and-update-powershell-7/
+# Wrapping the following command in cmd.exe
+# iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Quiet"
+RUN powershell -ExecutionPolicy RemoteSigned -Command "$ErrorActionPreference = 'Stop'; iex ""& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Quiet"""
+
+# Make sure any failure in PowerShell scripts is fatal
+SHELL ["pwsh", "-ExecutionPolicy", "RemoteSigned", "-Command", "$ErrorActionPreference = 'Stop';"]
+RUN Write-Output $PSVersionTable $ErrorActionPreference
+
+COPY mesa_deps_vs2019.ps1 C:\
+RUN C:\mesa_deps_vs2019.ps1
+COPY mesa_vs_init.ps1 C:\
+
+ENV VULKAN_SDK_VERSION='1.3.211.0'
+COPY mesa_deps_choco.ps1 C:\
+RUN C:\mesa_deps_choco.ps1
+
+# Example usage:
+# `base_image` should use windows image that can be run with `--isolation=process` option,
+# since the resulting container will want to be used that way be later containers in the build process.
+# Only --isolation=hyperv can succeed building this container locally,
+#   --isolation=process have network issue when installing Visual Studio and choco will crash
+# docker build --isolation=hyperv -f .\Dockerfile_vs -t mesa_vs --build-arg base_image="mcr.microsoft.com/windows:10.0.19041.1415" .
+
diff -pruN 22.1.3-1/.gitlab-ci/windows/mesa_build.ps1 22.2.0~rc1-1/.gitlab-ci/windows/mesa_build.ps1
--- 22.1.3-1/.gitlab-ci/windows/mesa_build.ps1	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/windows/mesa_build.ps1	2022-08-03 18:11:03.000000000 +0000
@@ -1,3 +1,8 @@
+# Clear CI_COMMIT_MESSAGE and CI_COMMIT_DESCRIPTION for please meson
+# when the commit message is complicated
+$env:CI_COMMIT_MESSAGE=""
+$env:CI_COMMIT_DESCRIPTION=""
+
 # force the CA cert cache to be rebuilt, in case Meson tries to access anything
 Write-Host "Refreshing Windows TLS CA cache"
 (New-Object System.Net.WebClient).DownloadString("https://github.com") >$null
@@ -17,36 +22,46 @@ Remove-Item -Recurse -Force $installdir
 New-Item -ItemType Directory -Path $builddir
 New-Item -ItemType Directory -Path $installdir
 
+Write-Output "*" > $builddir\.gitignore
+Write-Output "*" > $installdir\.gitignore
+
 Write-Output builddir:$builddir
 Write-Output installdir:$installdir
 Write-Output sourcedir:$sourcedir
 
-$installPath=& "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version 16.0  -property installationpath
-Write-Output "vswhere.exe installPath: $installPath"
-$installPath="C:\BuildTools"
-Write-Output "Final installPath: $installPath"
-Import-Module (Join-Path $installPath "Common7\Tools\Microsoft.VisualStudio.DevShell.dll")
-Enter-VsDevShell -VsInstallPath $installPath -SkipAutomaticLocation -DevCmdArguments '-arch=x64 -no_logo -host_arch=amd64'
+$MyPath = $MyInvocation.MyCommand.Path | Split-Path -Parent
+. "$MyPath\mesa_vs_init.ps1"
+
+$depsInstallPath="C:\mesa-deps"
 
 Push-Location $builddir
 
-meson --default-library=shared -Dzlib:default_library=static --buildtype=release -Db_ndebug=false `
--Db_vscrt=mt --cmake-prefix-path="C:\llvm-10" `
---pkg-config-path="C:\llvm-10\lib\pkgconfig;C:\llvm-10\share\pkgconfig;C:\spirv-tools\lib\pkgconfig" `
+meson `
+--default-library=shared `
+-Dzlib:default_library=static `
+--buildtype=release `
+-Db_ndebug=false `
+-Db_vscrt=mt `
+--cmake-prefix-path="$depsInstallPath" `
+--pkg-config-path="$depsInstallPath\lib\pkgconfig;$depsInstallPath\share\pkgconfig" `
 --prefix="$installdir" `
--Dllvm=enabled -Dshared-llvm=disabled `
-"-Dvulkan-drivers=swrast,amd,microsoft-experimental" "-Dgallium-drivers=swrast,d3d12,zink" `
--Dshared-glapi=enabled -Dgles2=enabled -Dmicrosoft-clc=enabled -Dstatic-libclc=all -Dspirv-to-dxil=true `
--Dbuild-tests=true -Dwerror=true -Dwarning_level=2 -Dzlib:warning_level=1 -Dlibelf:warning_level=1 `
-$sourcedir
-
-if ($?) {
-  ninja install -j32
-}
-
-if ($?) {
-  meson test --num-processes 32
-}
+-Dllvm=enabled `
+-Dshared-llvm=disabled `
+-Dvulkan-drivers="swrast,amd,microsoft-experimental" `
+-Dgallium-drivers="swrast,d3d12,zink" `
+-Dshared-glapi=enabled `
+-Dgles2=enabled `
+-Dmicrosoft-clc=enabled `
+-Dstatic-libclc=all `
+-Dspirv-to-dxil=true `
+-Dbuild-tests=true `
+-Dwerror=true `
+-Dwarning_level=2 `
+-Dzlib:warning_level=1 `
+-Dlibelf:warning_level=1 `
+$sourcedir && `
+meson install --skip-subprojects && `
+meson test --num-processes 32 --print-errorlogs
 
 $buildstatus = $?
 Pop-Location
@@ -64,5 +79,6 @@ Copy-Item ".\.gitlab-ci\windows\spirv2dx
 Copy-Item ".\.gitlab-ci\windows\spirv2dxil_run.ps1" -Destination $installdir
 
 Copy-Item ".\.gitlab-ci\windows\deqp_runner_run.ps1" -Destination $installdir
+Copy-Item ".\src\microsoft\ci\deqp-dozen.toml" -Destination $installdir
 
 Get-ChildItem -Recurse -Filter "ci" | Get-ChildItem -Filter "*.txt" | Copy-Item -Destination $installdir
diff -pruN 22.1.3-1/.gitlab-ci/windows/mesa_deps_build.ps1 22.2.0~rc1-1/.gitlab-ci/windows/mesa_deps_build.ps1
--- 22.1.3-1/.gitlab-ci/windows/mesa_deps_build.ps1	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/windows/mesa_deps_build.ps1	2022-08-03 18:11:03.000000000 +0000
@@ -1,62 +1,16 @@
-# Download new TLS certs from Windows Update
-Get-Date
-Write-Host "Updating TLS certificate store"
-$certdir = (New-Item -ItemType Directory -Name "_tlscerts")
-certutil -syncwithWU "$certdir"
-Foreach ($file in (Get-ChildItem -Path "$certdir\*" -Include "*.crt")) {
-  Import-Certificate -FilePath $file -CertStoreLocation Cert:\LocalMachine\Root
-}
-Remove-Item -Recurse -Path $certdir
-
-
-Get-Date
-Write-Host "Installing Chocolatey"
-Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
-Import-Module "$env:ProgramData\chocolatey\helpers\chocolateyProfile.psm1"
-Update-SessionEnvironment
-Write-Host "Installing Chocolatey packages"
-
-# Chocolatey tries to download winflexbison from SourceForge, which is not super reliable, and has no retry
-# loop of its own - so we give it a helping hand here
-For ($i = 0; $i -lt 5; $i++) {
-  choco install -y python3 --params="/InstallDir:C:\python3"
-  $python_install = $?
-  choco install --allow-empty-checksums -y cmake git git-lfs ninja pkgconfiglite winflexbison vulkan-sdk --installargs "ADD_CMAKE_TO_PATH=System"
-  $other_install = $?
-  $choco_installed = $other_install -and $python_install
-  if ($choco_installed) {
-    Break
-  }
-}
-
-if (!$choco_installed) {
-  Write-Host "Couldn't install dependencies from Chocolatey"
-  Exit 1
-}
-
-# Add Chocolatey's native install path
-Update-SessionEnvironment
-# Python and CMake add themselves to the system environment path, which doesn't get refreshed
-# until we start a new shell
-$env:PATH = "C:\python3;C:\python3\scripts;C:\Program Files\CMake\bin;$env:PATH"
 
-Start-Process -NoNewWindow -Wait git -ArgumentList 'config --global core.autocrlf false'
-
-Get-Date
-Write-Host "Installing Meson, Mako and numpy"
-pip3 install meson mako numpy
-if (!$?) {
-  Write-Host "Failed to install dependencies from pip"
-  Exit 1
-}
+$MyPath = $MyInvocation.MyCommand.Path | Split-Path -Parent
+. "$MyPath\mesa_vs_init.ps1"
 
 # we want more secure TLS 1.2 for most things, but it breaks SourceForge
 # downloads so must be done after Chocolatey use
 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13;
 
+Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "deps" | Out-Null
+
 Get-Date
 Write-Host "Cloning LLVM release/12.x"
-git clone -b release/12.x --depth=1 https://github.com/llvm/llvm-project llvm-project
+git clone -b release/12.x --depth=1 https://github.com/llvm/llvm-project deps/llvm-project
 if (!$?) {
   Write-Host "Failed to clone LLVM repository"
   Exit 1
@@ -67,21 +21,44 @@ if (!$?) {
 # a tag matching LLVM 12.0.0
 Get-Date
 Write-Host "Cloning SPIRV-LLVM-Translator"
-git clone https://github.com/KhronosGroup/SPIRV-LLVM-Translator llvm-project/llvm/projects/SPIRV-LLVM-Translator
+git clone https://github.com/KhronosGroup/SPIRV-LLVM-Translator deps/llvm-project/llvm/projects/SPIRV-LLVM-Translator
 if (!$?) {
   Write-Host "Failed to clone SPIRV-LLVM-Translator repository"
   Exit 1
 }
-Push-Location llvm-project/llvm/projects/SPIRV-LLVM-Translator
+Push-Location deps/llvm-project/llvm/projects/SPIRV-LLVM-Translator
 git checkout 5b641633b3bcc3251a52260eee11db13a79d7258
 Pop-Location
 
+$depsInstallPath="C:\mesa-deps"
+
 Get-Date
 # slightly convoluted syntax but avoids the CWD being under the PS filesystem meta-path
-$llvm_build = New-Item -ItemType Directory -Path ".\llvm-project" -Name "build"
+$llvm_build = New-Item -ItemType Directory -ErrorAction SilentlyContinue -Force -Path ".\deps\llvm-project" -Name "build"
 Push-Location -Path $llvm_build.FullName
 Write-Host "Compiling LLVM and Clang"
-cmd.exe /C 'C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=amd64 && cmake ../llvm -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_USE_CRT_RELEASE=MT -DCMAKE_INSTALL_PREFIX="C:\llvm-10" -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_TARGETS_TO_BUILD=AMDGPU;X86 -DLLVM_OPTIMIZED_TABLEGEN=TRUE -DLLVM_ENABLE_ASSERTIONS=TRUE -DLLVM_INCLUDE_UTILS=OFF -DLLVM_INCLUDE_RUNTIMES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_GO_TESTS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_BUILD_LLVM_C_DYLIB=OFF -DLLVM_ENABLE_DIA_SDK=OFF -DCLANG_BUILD_TOOLS=ON -DLLVM_SPIRV_INCLUDE_TESTS=OFF && ninja -j32 install'
+cmake ../llvm `
+-GNinja `
+-DCMAKE_BUILD_TYPE=Release `
+-DLLVM_USE_CRT_RELEASE=MT `
+-DCMAKE_PREFIX_PATH="$depsInstallPath" `
+-DCMAKE_INSTALL_PREFIX="$depsInstallPath" `
+-DLLVM_ENABLE_PROJECTS="clang" `
+-DLLVM_TARGETS_TO_BUILD="AMDGPU;X86" `
+-DLLVM_OPTIMIZED_TABLEGEN=TRUE `
+-DLLVM_ENABLE_ASSERTIONS=TRUE `
+-DLLVM_INCLUDE_UTILS=OFF `
+-DLLVM_INCLUDE_RUNTIMES=OFF `
+-DLLVM_INCLUDE_TESTS=OFF `
+-DLLVM_INCLUDE_EXAMPLES=OFF `
+-DLLVM_INCLUDE_GO_TESTS=OFF `
+-DLLVM_INCLUDE_BENCHMARKS=OFF `
+-DLLVM_BUILD_LLVM_C_DYLIB=OFF `
+-DLLVM_ENABLE_DIA_SDK=OFF `
+-DCLANG_BUILD_TOOLS=ON `
+-DLLVM_SPIRV_INCLUDE_TESTS=OFF `
+-Wno-dev && `
+ninja -j32 install
 $buildstatus = $?
 Pop-Location
 if (!$buildstatus) {
@@ -90,57 +67,64 @@ if (!$buildstatus) {
 }
 
 Get-Date
-$libclc_build = New-Item -ItemType Directory -Path ".\llvm-project" -Name "build-libclc"
+$libclc_build = New-Item -ItemType Directory -Path ".\deps\llvm-project" -Name "build-libclc"
 Push-Location -Path $libclc_build.FullName
 Write-Host "Compiling libclc"
 # libclc can only be built with Ninja, because CMake's VS backend doesn't know how to compile new language types
-cmd.exe /C 'C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=amd64 && cmake ../libclc -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64" -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -DCMAKE_INSTALL_PREFIX="C:\llvm-10" -DLIBCLC_TARGETS_TO_BUILD="spirv-mesa3d-;spirv64-mesa3d-" && ninja -j32 install'
+cmake ../libclc `
+-GNinja `
+-DCMAKE_BUILD_TYPE=Release `
+-DCMAKE_CXX_FLAGS="-m64" `
+-DCMAKE_POLICY_DEFAULT_CMP0091=NEW `
+-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded `
+-DCMAKE_INSTALL_PREFIX="$depsInstallPath" `
+-DLIBCLC_TARGETS_TO_BUILD="spirv-mesa3d-;spirv64-mesa3d-" && `
+ninja -j32 install
 $buildstatus = $?
 Pop-Location
-Remove-Item -Recurse -Path $libclc_build
+Remove-Item -Recurse -Force -ErrorAction SilentlyContinue -Path $libclc_build
 if (!$buildstatus) {
   Write-Host "Failed to compile libclc"
   Exit 1
 }
-Remove-Item -Recurse -Path $llvm_build
+Remove-Item -Recurse -Force -ErrorAction SilentlyContinue -Path $llvm_build
 
 Get-Date
 Write-Host "Cloning SPIRV-Tools"
-git clone https://github.com/KhronosGroup/SPIRV-Tools
+git clone -b "sdk-$env:VULKAN_SDK_VERSION" --depth=1 https://github.com/KhronosGroup/SPIRV-Tools deps/SPIRV-Tools
 if (!$?) {
   Write-Host "Failed to clone SPIRV-Tools repository"
   Exit 1
 }
-git clone https://github.com/KhronosGroup/SPIRV-Headers SPIRV-Tools/external/SPIRV-Headers
+git clone -b "sdk-$env:VULKAN_SDK_VERSION" --depth=1 https://github.com/KhronosGroup/SPIRV-Headers deps/SPIRV-Tools/external/SPIRV-Headers
 if (!$?) {
   Write-Host "Failed to clone SPIRV-Headers repository"
   Exit 1
 }
 Write-Host "Building SPIRV-Tools"
-$spv_build = New-Item -ItemType Directory -Path ".\SPIRV-Tools" -Name "build"
+$spv_build = New-Item -ItemType Directory -Path ".\deps\SPIRV-Tools" -Name "build"
 Push-Location -Path $spv_build.FullName
 # SPIRV-Tools doesn't use multi-threaded MSVCRT, but we need it to
-cmd.exe /C 'C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=amd64 && cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -DCMAKE_INSTALL_PREFIX="C:\spirv-tools" && ninja -j32 install'
+cmake .. `
+-GNinja `
+-DCMAKE_BUILD_TYPE=Release `
+-DCMAKE_POLICY_DEFAULT_CMP0091=NEW `
+-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded `
+-DCMAKE_INSTALL_PREFIX="$depsInstallPath" && `
+ninja -j32 install
 $buildstatus = $?
 Pop-Location
-Remove-Item -Recurse -Path $spv_build
+Remove-Item -Recurse -Force -ErrorAction SilentlyContinue -Path $spv_build
 if (!$buildstatus) {
   Write-Host "Failed to compile SPIRV-Tools"
   Exit 1
 }
 
-# See https://gitlab.freedesktop.org/mesa/mesa/-/issues/3855
-# Until that's resolved, we need the vulkan-runtime as a build dependency to be able to run any unit tests on GL
-Get-Date
-Write-Host "Downloading Vulkan-Runtime"
-Invoke-WebRequest -Uri 'https://sdk.lunarg.com/sdk/download/latest/windows/vulkan-runtime.exe' -OutFile 'C:\vulkan-runtime.exe' | Out-Null
-Write-Host "Installing Vulkan-Runtime"
-Start-Process -NoNewWindow -Wait C:\vulkan-runtime.exe -ArgumentList '/S'
-if (!$?) {
-  Write-Host "Failed to install Vulkan-Runtime"
-  Exit 1
+function Remove-Symlinks {
+  Get-ChildItem -Force -ErrorAction SilentlyContinue @Args | Where-Object { if($_.Attributes -match "ReparsePoint"){$_.Delete()} }
 }
-Remove-Item C:\vulkan-runtime.exe -Force
+Remove-Symlinks -Path "deps" -Recurse
+Remove-Item -Recurse -Force -ErrorAction SilentlyContinue -Path "deps" | Out-Null
 
 Get-Date
 Write-Host "Complete"
diff -pruN 22.1.3-1/.gitlab-ci/windows/mesa_deps_choco.ps1 22.2.0~rc1-1/.gitlab-ci/windows/mesa_deps_choco.ps1
--- 22.1.3-1/.gitlab-ci/windows/mesa_deps_choco.ps1	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/windows/mesa_deps_choco.ps1	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,73 @@
+# Download new TLS certs from Windows Update
+Get-Date
+Write-Host "Updating TLS certificate store"
+Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "_tlscerts" | Out-Null
+$certdir = (New-Item -ItemType Directory -Name "_tlscerts")
+certutil -syncwithWU "$certdir"
+Foreach ($file in (Get-ChildItem -Path "$certdir\*" -Include "*.crt")) {
+  Import-Certificate -FilePath $file -CertStoreLocation Cert:\LocalMachine\Root | Out-Null
+}
+Remove-Item -Recurse -Path $certdir
+
+
+Get-Date
+Write-Host "Installing Chocolatey"
+Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+Import-Module "$env:ProgramData\chocolatey\helpers\chocolateyProfile.psm1"
+Update-SessionEnvironment
+Write-Host "Installing Chocolatey packages"
+
+# Chocolatey tries to download winflexbison from SourceForge, which is not super reliable, and has no retry
+# loop of its own - so we give it a helping hand here
+For ($i = 0; $i -lt 5; $i++) {
+  choco install --no-progress -y python3 --params="/InstallDir:C:\python3"
+  $python_install = $?
+  choco install --allow-empty-checksums --no-progress -y cmake git git-lfs ninja pkgconfiglite winflexbison --installargs "ADD_CMAKE_TO_PATH=System"
+  $other_install = $?
+  $choco_installed = $other_install -and $python_install
+  if ($choco_installed) {
+    Break
+  }
+}
+
+if (!$choco_installed) {
+  Write-Host "Couldn't install dependencies from Chocolatey"
+  Exit 1
+}
+
+# Add Chocolatey's native install path
+Update-SessionEnvironment
+# Python and CMake add themselves to the system environment path, which doesn't get refreshed
+# until we start a new shell
+$env:PATH = "C:\python3;C:\python3\scripts;C:\Program Files\CMake\bin;$env:PATH"
+
+Start-Process -NoNewWindow -Wait git -ArgumentList 'config --global core.autocrlf false'
+
+Get-Date
+Write-Host "Installing Meson, Mako and numpy"
+pip3 install meson mako numpy --progress-bar off
+if (!$?) {
+  Write-Host "Failed to install dependencies from pip"
+  Exit 1
+}
+
+Get-Date
+Write-Host "Downloading Vulkan-SDK"
+Invoke-WebRequest -Uri "https://sdk.lunarg.com/sdk/download/$env:VULKAN_SDK_VERSION/windows/VulkanSDK-$env:VULKAN_SDK_VERSION-Installer.exe" -OutFile 'C:\vulkan_sdk.exe'
+C:\vulkan_sdk.exe --am --al -c in
+if (!$?) {
+    Write-Host "Failed to install Vulkan SDK"
+    Exit 1
+}
+Remove-Item C:\vulkan_sdk.exe -Force
+
+Get-Date
+Write-Host "Downloading Vulkan-Runtime"
+Invoke-WebRequest -Uri "https://sdk.lunarg.com/sdk/download/$env:VULKAN_SDK_VERSION/windows/VulkanRT-$env:VULKAN_SDK_VERSION-Installer.exe" -OutFile 'C:\vulkan-runtime.exe' | Out-Null
+Write-Host "Installing Vulkan-Runtime"
+Start-Process -NoNewWindow -Wait C:\vulkan-runtime.exe -ArgumentList '/S'
+if (!$?) {
+  Write-Host "Failed to install Vulkan-Runtime"
+  Exit 1
+}
+Remove-Item C:\vulkan-runtime.exe -Force
diff -pruN 22.1.3-1/.gitlab-ci/windows/mesa_deps_test.ps1 22.2.0~rc1-1/.gitlab-ci/windows/mesa_deps_test.ps1
--- 22.1.3-1/.gitlab-ci/windows/mesa_deps_test.ps1	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/windows/mesa_deps_test.ps1	2022-08-03 18:11:03.000000000 +0000
@@ -25,6 +25,9 @@ if (!$?) {
   Exit 1
 }
 
+$MyPath = $MyInvocation.MyCommand.Path | Split-Path -Parent
+. "$MyPath\mesa_vs_init.ps1"
+
 Get-Date
 Write-Host "Downloading glext.h"
 New-Item -ItemType Directory -Path ".\glext" -Name "GL"
@@ -46,7 +49,14 @@ Get-Date
 $piglit_build = New-Item -ItemType Directory -Path "C:\src\piglit" -Name "build"
 Push-Location -Path $piglit_build.FullName
 Write-Host "Compiling Piglit"
-cmd.exe /C 'C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=amd64 && cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="C:\Piglit" -DGLUT_INCLUDE_DIR=C:\freeglut\include -DGLUT_glut_LIBRARY_RELEASE=C:\freeglut\lib\x64\freeglut.lib -DGLEXT_INCLUDE_DIR=.\glext && ninja -j32'
+cmake .. `
+-GNinja `
+-DCMAKE_BUILD_TYPE=Release `
+-DCMAKE_INSTALL_PREFIX="C:\Piglit" `
+-DGLUT_INCLUDE_DIR=C:\freeglut\include `
+-DGLUT_glut_LIBRARY_RELEASE=C:\freeglut\lib\x64\freeglut.lib `
+-DGLEXT_INCLUDE_DIR=.\glext && `
+ninja -j32
 $buildstatus = $?
 ninja -j32 install | Out-Null
 $installstatus = $?
@@ -63,7 +73,7 @@ Get-Date
 Write-Host "Cloning spirv-samples"
 git clone --no-progress --single-branch --no-checkout https://github.com/dneto0/spirv-samples.git  C:\spirv-samples\
 Push-Location -Path C:\spirv-samples\
-git checkout 7ac0ad5a7fe0ec884faba1dc2916028d0268eeef
+git checkout 36372636df06a24c4e2de1551beee055db01b91d
 Pop-Location
 
 Get-Date
@@ -86,7 +96,12 @@ Get-Date
 $deqp_build = New-Item -ItemType Directory -Path "C:\deqp"
 Push-Location -Path $deqp_build.FullName
 Write-Host "Compiling deqp"
-cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=amd64 && cmake -S $($deqp_source) -B . -GNinja -DCMAKE_BUILD_TYPE=Release -DDEQP_TARGET=default && ninja -j32"
+cmake -S $($deqp_source) `
+-B . `
+-GNinja `
+-DCMAKE_BUILD_TYPE=Release `
+-DDEQP_TARGET=default && `
+ninja -j32
 $buildstatus = $?
 Pop-Location
 if (!$buildstatus -Or !$installstatus) {
diff -pruN 22.1.3-1/.gitlab-ci/windows/mesa_deps_vs2019.ps1 22.2.0~rc1-1/.gitlab-ci/windows/mesa_deps_vs2019.ps1
--- 22.1.3-1/.gitlab-ci/windows/mesa_deps_vs2019.ps1	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/windows/mesa_deps_vs2019.ps1	2022-08-03 18:11:03.000000000 +0000
@@ -10,9 +10,29 @@ Invoke-WebRequest -Uri $msvc_2019_url -O
 
 Get-Date
 Write-Host "Installing Visual Studio 2019"
-Start-Process -NoNewWindow -Wait C:\vs_buildtools.exe -ArgumentList '--wait --quiet --norestart --nocache --installPath C:\BuildTools --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Component.VC.ATL --add Microsoft.VisualStudio.Component.VC.ATLMFC --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.VisualStudio.Component.Graphics.Tools --add Microsoft.VisualStudio.Component.Windows10SDK.18362 --includeRecommended'
+# Command line
+# https://docs.microsoft.com/en-us/visualstudio/install/command-line-parameter-examples?view=vs-2019
+# Component ids
+# https://docs.microsoft.com/en-us/visualstudio/install/workload-component-id-vs-build-tools?view=vs-2019
+# https://docs.microsoft.com/en-us/visualstudio/install/workload-component-id-vs-community?view=vs-2019
+Start-Process -NoNewWindow -Wait -FilePath C:\vs_buildtools.exe `
+-ArgumentList `
+"--wait", `
+"--quiet", `
+"--norestart", `
+"--nocache", `
+"--installPath", "C:\BuildTools", `
+"--add", "Microsoft.VisualStudio.Component.VC.ASAN", `
+"--add", "Microsoft.VisualStudio.Component.VC.Redist.14.Latest", `
+"--add", "Microsoft.VisualStudio.Component.VC.ATL", `
+"--add", "Microsoft.VisualStudio.Component.VC.ATLMFC", `
+"--add", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", `
+"--add", "Microsoft.VisualStudio.Component.Graphics.Tools", `
+"--add", "Microsoft.VisualStudio.Component.Windows10SDK.20348"
+
 if (!$?) {
   Write-Host "Failed to install Visual Studio tools"
   Exit 1
 }
 Remove-Item C:\vs_buildtools.exe -Force
+Get-Date
diff -pruN 22.1.3-1/.gitlab-ci/windows/mesa_vs_init.ps1 22.2.0~rc1-1/.gitlab-ci/windows/mesa_vs_init.ps1
--- 22.1.3-1/.gitlab-ci/windows/mesa_vs_init.ps1	1970-01-01 00:00:00.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/windows/mesa_vs_init.ps1	2022-08-03 18:11:03.000000000 +0000
@@ -0,0 +1,11 @@
+$vsInstallPath=& "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version 16.0  -property installationpath
+Write-Output "vswhere.exe installPath: $vsInstallPath"
+$vsInstallPath =  if ("$vsInstallPath" -eq "" ) { "C:\BuildTools" } else { "$vsInstallPath" }
+Write-Output "Final installPath: $vsInstallPath"
+Import-Module (Join-Path $vsInstallPath "Common7\Tools\Microsoft.VisualStudio.DevShell.dll")
+# https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B
+# VS2015 14.0
+# VS2017 14.16
+# VS2019 14.29
+# VS2022 14.32
+Enter-VsDevShell -VsInstallPath $vsInstallPath -SkipAutomaticLocation -DevCmdArguments '-vcvars_ver=14.29 -arch=x64 -no_logo -host_arch=amd64'
diff -pruN 22.1.3-1/.gitlab-ci/windows/README.md 22.2.0~rc1-1/.gitlab-ci/windows/README.md
--- 22.1.3-1/.gitlab-ci/windows/README.md	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/windows/README.md	2022-08-03 18:11:03.000000000 +0000
@@ -30,3 +30,7 @@ host, without Docker.
 The Mesa build runs inside the base container, executing `mesa_build.ps1`.
 This simply compiles Mesa using Meson and Ninja, executing the build and
 unit tests. Currently, no build artifacts are captured.
+
+## Using build scripts locally
+
+`*.ps1` scripts for building dockers are using PowerShell 7 to run
diff -pruN 22.1.3-1/.gitlab-ci/windows/spirv2dxil_check.ps1 22.2.0~rc1-1/.gitlab-ci/windows/spirv2dxil_check.ps1
--- 22.1.3-1/.gitlab-ci/windows/spirv2dxil_check.ps1	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/windows/spirv2dxil_check.ps1	2022-08-03 18:11:03.000000000 +0000
@@ -18,7 +18,7 @@ foreach ($spvasm in $spvasm_files) {
         $spv_version = $Matches[1]
     }
     
-    $as_output = C:\spirv-tools\bin\spirv-as.exe --target-env spv$spv_version --preserve-numeric-ids -o $spvfile $spvasm 2>&1 | % { if ($_ -is [System.Management.Automation.ErrorRecord]) { $_.Exception.Message } else { $_ } }  | Out-String
+    $as_output = . "$env:VULKAN_SDK\Bin\spirv-as.exe" --target-env spv$spv_version --preserve-numeric-ids -o $spvfile $spvasm 2>&1 | % { if ($_ -is [System.Management.Automation.ErrorRecord]) { $_.Exception.Message } else { $_ } }  | Out-String
     if ($LASTEXITCODE -ne 0) {
         Write-Output "$test_name Skip: Unable to assemble shader"
         Write-Output "$as_output`n"
diff -pruN 22.1.3-1/.gitlab-ci/x86_64-w64-mingw32 22.2.0~rc1-1/.gitlab-ci/x86_64-w64-mingw32
--- 22.1.3-1/.gitlab-ci/x86_64-w64-mingw32	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci/x86_64-w64-mingw32	2022-08-03 18:11:03.000000000 +0000
@@ -1,9 +1,10 @@
 [binaries]
-c = ['ccache', 'x86_64-w64-mingw32-gcc']
-cpp = ['ccache', 'x86_64-w64-mingw32-g++']
+c = ['ccache', 'x86_64-w64-mingw32-gcc-posix']
+cpp = ['ccache', 'x86_64-w64-mingw32-g++-posix']
 ar = 'x86_64-w64-mingw32-ar'
 strip = 'x86_64-w64-mingw32-strip'
-pkgconfig = '/usr/local/bin/x86_64-w64-mingw32-pkg-config'
+pkgconfig = '/usr/x86_64-w64-mingw32/bin/pkg-config'
+llvm-config = '/usr/x86_64-w64-mingw32/bin/llvm-config'
 windres = 'x86_64-w64-mingw32-windres'
 exe_wrapper = ['wine64']
 
diff -pruN 22.1.3-1/.gitlab-ci.yml 22.2.0~rc1-1/.gitlab-ci.yml
--- 22.1.3-1/.gitlab-ci.yml	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.gitlab-ci.yml	2022-08-03 18:11:03.000000000 +0000
@@ -18,8 +18,10 @@ variables:
   # Individual CI farm status, set to "offline" to disable jobs
   # running on a particular CI farm (ie. for outages, etc):
   FD_FARM: "online"
-  COLLABORA_FARM: "offline"
-  MICROSOFT_FARM: "offline"
+  COLLABORA_FARM: "online"
+  MICROSOFT_FARM: "online"
+  LIMA_FARM: "online"
+  IGALIA_FARM: "online"
 
 default:
   before_script:
@@ -36,6 +38,12 @@ default:
       export CI_JOB_JWT="$(<${CI_JOB_JWT_FILE})" &&
       rm "${CI_JOB_JWT_FILE}"
 
+  # Retry build or test jobs up to twice when the gitlab-runner itself fails somehow.
+  retry:
+    max: 2
+    when:
+      - runner_system_failure
+
 include:
   - project: 'freedesktop/ci-templates'
     ref: 34f4ade99434043f88e164933f570301fd18b125
@@ -59,7 +67,6 @@ include:
   - local: 'src/gallium/drivers/crocus/ci/gitlab-ci.yml'
   - local: 'src/gallium/drivers/d3d12/ci/gitlab-ci.yml'
   - local: 'src/gallium/drivers/i915/ci/gitlab-ci.yml'
-  - local: 'src/gallium/drivers/iris/ci/gitlab-ci.yml'
   - local: 'src/gallium/drivers/lima/ci/gitlab-ci.yml'
   - local: 'src/gallium/drivers/llvmpipe/ci/gitlab-ci.yml'
   - local: 'src/gallium/drivers/nouveau/ci/gitlab-ci.yml'
@@ -89,12 +96,6 @@ stages:
   - layered-backends
   - deploy
 
-# Generic rule to not run the job during scheduled pipelines
-# ----------------------------------------------------------
-.scheduled_pipelines-rules:
-  rules: &ignore_scheduled_pipelines
-    if: &is-scheduled-pipeline '$CI_PIPELINE_SOURCE == "schedule"'
-    when: never
 
 # YAML anchors for rule conditions
 # --------------------------------
@@ -126,7 +127,7 @@ stages:
 .docs-base:
   extends:
     - .fdo.ci-fairy
-    - .ci-run-policy
+    - .build-rules
   script:
   - apk --no-cache add graphviz doxygen
   - pip3 install sphinx breathe mako sphinx_rtd_theme
@@ -141,7 +142,7 @@ pages:
     - public
   needs: []
   rules:
-    - *ignore_scheduled_pipelines
+    - !reference [.no_scheduled_pipelines-rules, rules]
     - if: *is-mesa-main
       changes: &docs-or-ci
       - docs/**/*
@@ -156,7 +157,7 @@ test-docs:
   stage: deploy
   needs: []
   rules:
-    - *ignore_scheduled_pipelines
+    - !reference [.no_scheduled_pipelines-rules, rules]
     - if: *is-forked-branch
       changes: *docs-or-ci
       when: manual
@@ -177,10 +178,10 @@ test-docs-mr:
       when: on_success
     # Other cases default to never
 
-# When to automatically run the CI
-.ci-run-policy:
+# When to automatically run the CI for build jobs
+.build-rules:
   rules:
-    - *ignore_scheduled_pipelines
+    - !reference [.no_scheduled_pipelines-rules, rules]
     # If any files affecting the pipeline are changed, build/test jobs run
     # automatically once all dependency jobs have passed
     - changes: &all_paths
@@ -200,12 +201,7 @@ test-docs-mr:
       - include/**/*
       - src/**/*
       when: on_success
-    # Otherwise, build/test jobs won't run
-    - when: never
-  retry:
-    max: 2
-    when:
-      - runner_system_failure
+    # Otherwise, build/test jobs won't run because no rule matched.
 
 
 .ci-deqp-artifacts:
@@ -221,10 +217,8 @@ test-docs-mr:
       - _build/meson-logs/strace
 
 .container-rules:
-  extends:
-    - .ci-run-policy
   rules:
-    - *ignore_scheduled_pipelines
+    - !reference [.no_scheduled_pipelines-rules, rules]
     # Run pipeline by default in the main project if any CI pipeline
     # configuration files were changed, to ensure docker images are up to date
     - if: *is-post-merge
@@ -249,8 +243,7 @@ test-docs-mr:
     - changes:
         *all_paths
       when: manual
-    # Otherwise, container jobs won't run
-    - when: never
+    # Otherwise, container jobs won't run because no rule matched.
 
 # Git archive
 
@@ -259,8 +252,7 @@ make git archive:
     - .fdo.ci-fairy
   stage: git-archive
   rules:
-    - if: *is-scheduled-pipeline
-      when: on_success
+    - !reference [.scheduled_pipeline-rules, rules]
   # ensure we are running on packet
   tags:
     - packet.net
@@ -294,34 +286,17 @@ sanity:
     reports:
       junit: check-*.xml
 
-# Rules for tests that should not be present in MRs or the main
-# project's pipeline (don't block marge or report red on
-# mesa/mesa main) but should be present on pipelines in personal
-# branches (so you can opt in to running the flaky test when you want
-# to).
-.test-manual:
-  rules:
-    - *ignore_scheduled_pipelines
-    - if: *is-forked-branch
-      changes:
-        *all_paths
-      when: manual
-    - when: never
-  variables:
-    GIT_STRATEGY: none
-    JOB_TIMEOUT: 80
-
-# The above .test-manual rules doesn't allow the jobs to be available for MRs
-# but we should have an option to have manual jobs in MRs as well.
+# Rules for tests that should not block merging, but should be available to
+# optionally run with the "play" button in the UI in pre-merge non-marge
+# pipelines.  This should appear in "extends:" after any includes of
+# test-source-dep.yml rules, so that these rules replace those.
 .test-manual-mr:
   rules:
-    - *ignore_scheduled_pipelines
+    - !reference [.no_scheduled_pipelines-rules, rules]
     - if: *is-forked-branch-or-pre-merge-not-for-marge
       changes:
         *all_paths
       when: manual
-    - when: never
   variables:
-    GIT_STRATEGY: none
     JOB_TIMEOUT: 80
 
diff -pruN 22.1.3-1/include/c11/.editorconfig 22.2.0~rc1-1/include/c11/.editorconfig
--- 22.1.3-1/include/c11/.editorconfig	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/c11/.editorconfig	1970-01-01 00:00:00.000000000 +0000
@@ -1,3 +0,0 @@
-[*.h]
-indent_style = space
-indent_size = 4
diff -pruN 22.1.3-1/include/c11/threads.h 22.2.0~rc1-1/include/c11/threads.h
--- 22.1.3-1/include/c11/threads.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/c11/threads.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,73 +0,0 @@
-/*
- * C11 <threads.h> emulation library
- *
- * (C) Copyright yohhoy 2012.
- * Distributed under the Boost Software License, Version 1.0.
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare [[derivative work]]s of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-#ifndef EMULATED_THREADS_H_INCLUDED_
-#define EMULATED_THREADS_H_INCLUDED_
-
-#include <time.h>
-
-#ifndef TIME_UTC
-#define TIME_UTC 1
-#endif
-
-#include "c99_compat.h" /* for `inline` */
-
-/*---------------------------- types ----------------------------*/
-typedef void (*tss_dtor_t)(void*);
-typedef int (*thrd_start_t)(void*);
-
-
-/*-------------------- enumeration constants --------------------*/
-enum {
-    mtx_plain     = 0,
-    mtx_try       = 1,
-    mtx_timed     = 2,
-    mtx_recursive = 4
-};
-
-enum {
-    thrd_success = 0, // succeeded
-    thrd_timedout,    // timed out
-    thrd_error,       // failed
-    thrd_busy,        // resource busy
-    thrd_nomem        // out of memory
-};
-
-/*-------------------------- functions --------------------------*/
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
-#include "threads_win32.h"
-#elif defined(HAVE_PTHREAD)
-#include "threads_posix.h"
-#else
-#error Not supported on this platform.
-#endif
-
-
-
-#endif /* EMULATED_THREADS_H_INCLUDED_ */
diff -pruN 22.1.3-1/include/c11/threads_posix.h 22.2.0~rc1-1/include/c11/threads_posix.h
--- 22.1.3-1/include/c11/threads_posix.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/c11/threads_posix.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,396 +0,0 @@
-/*
- * C11 <threads.h> emulation library
- *
- * (C) Copyright yohhoy 2012.
- * Distributed under the Boost Software License, Version 1.0.
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare [[derivative work]]s of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-#include <stdlib.h>
-#ifndef assert
-#include <assert.h>
-#endif
-#include <limits.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sched.h>
-#include <stdint.h> /* for intptr_t */
-
-/*
-Configuration macro:
-
-  EMULATED_THREADS_USE_NATIVE_TIMEDLOCK
-    Use pthread_mutex_timedlock() for `mtx_timedlock()'
-    Otherwise use mtx_trylock() + *busy loop* emulation.
-*/
-#if !defined(__CYGWIN__) && !defined(__APPLE__) && !defined(__NetBSD__)
-#define EMULATED_THREADS_USE_NATIVE_TIMEDLOCK
-#endif
-
-
-#include <pthread.h>
-
-/*---------------------------- macros ----------------------------*/
-#define ONCE_FLAG_INIT PTHREAD_ONCE_INIT
-#ifdef INIT_ONCE_STATIC_INIT
-#define TSS_DTOR_ITERATIONS PTHREAD_DESTRUCTOR_ITERATIONS
-#else
-#define TSS_DTOR_ITERATIONS 1  // assume TSS dtor MAY be called at least once.
-#endif
-
-// FIXME: temporary non-standard hack to ease transition
-#define _MTX_INITIALIZER_NP PTHREAD_MUTEX_INITIALIZER
-
-/*---------------------------- types ----------------------------*/
-typedef pthread_cond_t  cnd_t;
-typedef pthread_t       thrd_t;
-typedef pthread_key_t   tss_t;
-typedef pthread_mutex_t mtx_t;
-typedef pthread_once_t  once_flag;
-
-
-/*
-Implementation limits:
-  - Conditionally emulation for "mutex with timeout"
-    (see EMULATED_THREADS_USE_NATIVE_TIMEDLOCK macro)
-*/
-struct impl_thrd_param {
-    thrd_start_t func;
-    void *arg;
-};
-
-static inline void *
-impl_thrd_routine(void *p)
-{
-    struct impl_thrd_param pack = *((struct impl_thrd_param *)p);
-    free(p);
-    return (void*)(intptr_t)pack.func(pack.arg);
-}
-
-
-/*--------------- 7.25.2 Initialization functions ---------------*/
-// 7.25.2.1
-static inline void
-call_once(once_flag *flag, void (*func)(void))
-{
-    pthread_once(flag, func);
-}
-
-
-/*------------- 7.25.3 Condition variable functions -------------*/
-// 7.25.3.1
-static inline int
-cnd_broadcast(cnd_t *cond)
-{
-    assert(cond != NULL);
-    return (pthread_cond_broadcast(cond) == 0) ? thrd_success : thrd_error;
-}
-
-// 7.25.3.2
-static inline void
-cnd_destroy(cnd_t *cond)
-{
-    assert(cond);
-    pthread_cond_destroy(cond);
-}
-
-// 7.25.3.3
-static inline int
-cnd_init(cnd_t *cond)
-{
-    assert(cond != NULL);
-    return (pthread_cond_init(cond, NULL) == 0) ? thrd_success : thrd_error;
-}
-
-// 7.25.3.4
-static inline int
-cnd_signal(cnd_t *cond)
-{
-    assert(cond != NULL);
-    return (pthread_cond_signal(cond) == 0) ? thrd_success : thrd_error;
-}
-
-// 7.25.3.5
-static inline int
-cnd_timedwait(cnd_t *cond, mtx_t *mtx, const struct timespec *abs_time)
-{
-    int rt;
-
-    assert(mtx != NULL);
-    assert(cond != NULL);
-    assert(abs_time != NULL);
-
-    rt = pthread_cond_timedwait(cond, mtx, abs_time);
-    if (rt == ETIMEDOUT)
-        return thrd_timedout;
-    return (rt == 0) ? thrd_success : thrd_error;
-}
-
-// 7.25.3.6
-static inline int
-cnd_wait(cnd_t *cond, mtx_t *mtx)
-{
-    assert(mtx != NULL);
-    assert(cond != NULL);
-    return (pthread_cond_wait(cond, mtx) == 0) ? thrd_success : thrd_error;
-}
-
-
-/*-------------------- 7.25.4 Mutex functions --------------------*/
-// 7.25.4.1
-static inline void
-mtx_destroy(mtx_t *mtx)
-{
-    assert(mtx != NULL);
-    pthread_mutex_destroy(mtx);
-}
-
-/*
- * XXX: Workaround when building with -O0 and without pthreads link.
- *
- * In such cases constant folding and dead code elimination won't be
- * available, thus the compiler will always add the pthread_mutexattr*
- * functions into the binary. As we try to link, we'll fail as the
- * symbols are unresolved.
- *
- * Ideally we'll enable the optimisations locally, yet that does not
- * seem to work.
- *
- * So the alternative workaround is to annotate the symbols as weak.
- * Thus the linker will be happy and things don't clash when building
- * with -O1 or greater.
- */
-#if defined(HAVE_FUNC_ATTRIBUTE_WEAK) && !defined(__CYGWIN__)
-__attribute__((weak))
-int pthread_mutexattr_init(pthread_mutexattr_t *attr);
-
-__attribute__((weak))
-int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
-
-__attribute__((weak))
-int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);
-#endif
-
-// 7.25.4.2
-static inline int
-mtx_init(mtx_t *mtx, int type)
-{
-    pthread_mutexattr_t attr;
-    assert(mtx != NULL);
-    if (type != mtx_plain && type != mtx_timed && type != mtx_try
-      && type != (mtx_plain|mtx_recursive)
-      && type != (mtx_timed|mtx_recursive)
-      && type != (mtx_try|mtx_recursive))
-        return thrd_error;
-
-    if ((type & mtx_recursive) == 0) {
-        pthread_mutex_init(mtx, NULL);
-        return thrd_success;
-    }
-
-    pthread_mutexattr_init(&attr);
-    pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
-    pthread_mutex_init(mtx, &attr);
-    pthread_mutexattr_destroy(&attr);
-    return thrd_success;
-}
-
-// 7.25.4.3
-static inline int
-mtx_lock(mtx_t *mtx)
-{
-    assert(mtx != NULL);
-    return (pthread_mutex_lock(mtx) == 0) ? thrd_success : thrd_error;
-}
-
-static inline int
-mtx_trylock(mtx_t *mtx);
-
-static inline void
-thrd_yield(void);
-
-// 7.25.4.4
-static inline int
-mtx_timedlock(mtx_t *mtx, const struct timespec *ts)
-{
-    assert(mtx != NULL);
-    assert(ts != NULL);
-
-    {
-#ifdef EMULATED_THREADS_USE_NATIVE_TIMEDLOCK
-    int rt;
-    rt = pthread_mutex_timedlock(mtx, ts);
-    if (rt == 0)
-        return thrd_success;
-    return (rt == ETIMEDOUT) ? thrd_timedout : thrd_error;
-#else
-    time_t expire = time(NULL);
-    expire += ts->tv_sec;
-    while (mtx_trylock(mtx) != thrd_success) {
-        time_t now = time(NULL);
-        if (expire < now)
-            return thrd_timedout;
-        // busy loop!
-        thrd_yield();
-    }
-    return thrd_success;
-#endif
-    }
-}
-
-// 7.25.4.5
-static inline int
-mtx_trylock(mtx_t *mtx)
-{
-    assert(mtx != NULL);
-    return (pthread_mutex_trylock(mtx) == 0) ? thrd_success : thrd_busy;
-}
-
-// 7.25.4.6
-static inline int
-mtx_unlock(mtx_t *mtx)
-{
-    assert(mtx != NULL);
-    return (pthread_mutex_unlock(mtx) == 0) ? thrd_success : thrd_error;
-}
-
-
-/*------------------- 7.25.5 Thread functions -------------------*/
-// 7.25.5.1
-static inline int
-thrd_create(thrd_t *thr, thrd_start_t func, void *arg)
-{
-    struct impl_thrd_param *pack;
-    assert(thr != NULL);
-    pack = (struct impl_thrd_param *)malloc(sizeof(struct impl_thrd_param));
-    if (!pack) return thrd_nomem;
-    pack->func = func;
-    pack->arg = arg;
-    if (pthread_create(thr, NULL, impl_thrd_routine, pack) != 0) {
-        free(pack);
-        return thrd_error;
-    }
-    return thrd_success;
-}
-
-// 7.25.5.2
-static inline thrd_t
-thrd_current(void)
-{
-    return pthread_self();
-}
-
-// 7.25.5.3
-static inline int
-thrd_detach(thrd_t thr)
-{
-    return (pthread_detach(thr) == 0) ? thrd_success : thrd_error;
-}
-
-// 7.25.5.4
-static inline int
-thrd_equal(thrd_t thr0, thrd_t thr1)
-{
-    return pthread_equal(thr0, thr1);
-}
-
-// 7.25.5.5
-static inline void
-thrd_exit(int res)
-{
-    pthread_exit((void*)(intptr_t)res);
-}
-
-// 7.25.5.6
-static inline int
-thrd_join(thrd_t thr, int *res)
-{
-    void *code;
-    if (pthread_join(thr, &code) != 0)
-        return thrd_error;
-    if (res)
-        *res = (int)(intptr_t)code;
-    return thrd_success;
-}
-
-// 7.25.5.7
-static inline void
-thrd_sleep(const struct timespec *time_point, struct timespec *remaining)
-{
-    assert(time_point != NULL);
-    nanosleep(time_point, remaining);
-}
-
-// 7.25.5.8
-static inline void
-thrd_yield(void)
-{
-    sched_yield();
-}
-
-
-/*----------- 7.25.6 Thread-specific storage functions -----------*/
-// 7.25.6.1
-static inline int
-tss_create(tss_t *key, tss_dtor_t dtor)
-{
-    assert(key != NULL);
-    return (pthread_key_create(key, dtor) == 0) ? thrd_success : thrd_error;
-}
-
-// 7.25.6.2
-static inline void
-tss_delete(tss_t key)
-{
-    pthread_key_delete(key);
-}
-
-// 7.25.6.3
-static inline void *
-tss_get(tss_t key)
-{
-    return pthread_getspecific(key);
-}
-
-// 7.25.6.4
-static inline int
-tss_set(tss_t key, void *val)
-{
-    return (pthread_setspecific(key, val) == 0) ? thrd_success : thrd_error;
-}
-
-
-/*-------------------- 7.25.7 Time functions --------------------*/
-// 7.25.6.1
-#ifndef HAVE_TIMESPEC_GET
-static inline int
-timespec_get(struct timespec *ts, int base)
-{
-    if (!ts) return 0;
-    if (base == TIME_UTC) {
-        clock_gettime(CLOCK_REALTIME, ts);
-        return base;
-    }
-    return 0;
-}
-#endif
diff -pruN 22.1.3-1/include/c11/threads_win32.h 22.2.0~rc1-1/include/c11/threads_win32.h
--- 22.1.3-1/include/c11/threads_win32.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/c11/threads_win32.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,526 +0,0 @@
-/*
- * C11 <threads.h> emulation library
- *
- * (C) Copyright yohhoy 2012.
- * Distributed under the Boost Software License, Version 1.0.
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare [[derivative work]]s of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-#ifndef assert
-#include <assert.h>
-#endif
-#include <limits.h>
-#include <errno.h>
-#include <process.h>  // MSVCRT
-#include <stdlib.h>
-
-/*
-Configuration macro:
-
-  EMULATED_THREADS_USE_NATIVE_CALL_ONCE
-    Use native WindowsAPI one-time initialization function.
-    (requires WinVista or later)
-    Otherwise emulate by mtx_trylock() + *busy loop* for WinXP.
-
-  EMULATED_THREADS_TSS_DTOR_SLOTNUM
-    Max registerable TSS dtor number.
-*/
-
-#if _WIN32_WINNT >= 0x0600
-// Prefer native WindowsAPI on newer environment.
-#if !defined(__MINGW32__)
-#define EMULATED_THREADS_USE_NATIVE_CALL_ONCE
-#endif
-#endif
-#define EMULATED_THREADS_TSS_DTOR_SLOTNUM 64  // see TLS_MINIMUM_AVAILABLE
-
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN 1
-#endif
-#include <windows.h>
-
-// check configuration
-#if defined(EMULATED_THREADS_USE_NATIVE_CALL_ONCE) && (_WIN32_WINNT < 0x0600)
-#error EMULATED_THREADS_USE_NATIVE_CALL_ONCE requires _WIN32_WINNT>=0x0600
-#endif
-
-/* Visual Studio 2015 and later */
-#ifdef _MSC_VER
-#define HAVE_TIMESPEC_GET
-#endif
-
-/*---------------------------- macros ----------------------------*/
-#ifdef EMULATED_THREADS_USE_NATIVE_CALL_ONCE
-#define ONCE_FLAG_INIT INIT_ONCE_STATIC_INIT
-#else
-#define ONCE_FLAG_INIT {0}
-#endif
-#define TSS_DTOR_ITERATIONS 1
-
-// FIXME: temporary non-standard hack to ease transition
-#define _MTX_INITIALIZER_NP {(PCRITICAL_SECTION_DEBUG)-1, -1, 0, 0, 0, 0}
-
-/*---------------------------- types ----------------------------*/
-typedef CONDITION_VARIABLE cnd_t;
-
-typedef HANDLE thrd_t;
-
-typedef DWORD tss_t;
-
-typedef CRITICAL_SECTION mtx_t;
-
-#ifdef EMULATED_THREADS_USE_NATIVE_CALL_ONCE
-typedef INIT_ONCE once_flag;
-#else
-typedef struct once_flag_t {
-    volatile LONG status;
-} once_flag;
-#endif
-
-
-static inline void * tss_get(tss_t key);
-static inline void thrd_yield(void);
-static inline int mtx_trylock(mtx_t *mtx);
-static inline int mtx_lock(mtx_t *mtx);
-static inline int mtx_unlock(mtx_t *mtx);
-
-/*
-Implementation limits:
-  - Conditionally emulation for "Initialization functions"
-    (see EMULATED_THREADS_USE_NATIVE_CALL_ONCE macro)
-  - Emulated `mtx_timelock()' with mtx_trylock() + *busy loop*
-*/
-static void impl_tss_dtor_invoke(void);  // forward decl.
-
-struct impl_thrd_param {
-    thrd_start_t func;
-    void *arg;
-};
-
-static unsigned __stdcall impl_thrd_routine(void *p)
-{
-    struct impl_thrd_param pack;
-    int code;
-    memcpy(&pack, p, sizeof(struct impl_thrd_param));
-    free(p);
-    code = pack.func(pack.arg);
-    impl_tss_dtor_invoke();
-    return (unsigned)code;
-}
-
-static time_t impl_timespec2msec(const struct timespec *ts)
-{
-    return (ts->tv_sec * 1000U) + (ts->tv_nsec / 1000000L);
-}
-
-#ifdef HAVE_TIMESPEC_GET
-static DWORD impl_abs2relmsec(const struct timespec *abs_time)
-{
-    const time_t abs_ms = impl_timespec2msec(abs_time);
-    struct timespec now;
-    timespec_get(&now, TIME_UTC);
-    const time_t now_ms = impl_timespec2msec(&now);
-    const DWORD rel_ms = (abs_ms > now_ms) ? (DWORD)(abs_ms - now_ms) : 0;
-    return rel_ms;
-}
-#endif
-
-#ifdef EMULATED_THREADS_USE_NATIVE_CALL_ONCE
-struct impl_call_once_param { void (*func)(void); };
-static BOOL CALLBACK impl_call_once_callback(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context)
-{
-    struct impl_call_once_param *param = (struct impl_call_once_param*)Parameter;
-    (param->func)();
-    ((void)InitOnce); ((void)Context);  // suppress warning
-    return TRUE;
-}
-#endif  // ifdef EMULATED_THREADS_USE_NATIVE_CALL_ONCE
-
-static struct impl_tss_dtor_entry {
-    tss_t key;
-    tss_dtor_t dtor;
-} impl_tss_dtor_tbl[EMULATED_THREADS_TSS_DTOR_SLOTNUM];
-
-static int impl_tss_dtor_register(tss_t key, tss_dtor_t dtor)
-{
-    int i;
-    for (i = 0; i < EMULATED_THREADS_TSS_DTOR_SLOTNUM; i++) {
-        if (!impl_tss_dtor_tbl[i].dtor)
-            break;
-    }
-    if (i == EMULATED_THREADS_TSS_DTOR_SLOTNUM)
-        return 1;
-    impl_tss_dtor_tbl[i].key = key;
-    impl_tss_dtor_tbl[i].dtor = dtor;
-    return 0;
-}
-
-static void impl_tss_dtor_invoke()
-{
-    int i;
-    for (i = 0; i < EMULATED_THREADS_TSS_DTOR_SLOTNUM; i++) {
-        if (impl_tss_dtor_tbl[i].dtor) {
-            void* val = tss_get(impl_tss_dtor_tbl[i].key);
-            if (val)
-                (impl_tss_dtor_tbl[i].dtor)(val);
-        }
-    }
-}
-
-
-/*--------------- 7.25.2 Initialization functions ---------------*/
-// 7.25.2.1
-static inline void
-call_once(once_flag *flag, void (*func)(void))
-{
-    assert(flag && func);
-#ifdef EMULATED_THREADS_USE_NATIVE_CALL_ONCE
-    {
-    struct impl_call_once_param param;
-    param.func = func;
-    InitOnceExecuteOnce(flag, impl_call_once_callback, (PVOID)&param, NULL);
-    }
-#else
-    if (InterlockedCompareExchange(&flag->status, 1, 0) == 0) {
-        (func)();
-        InterlockedExchange(&flag->status, 2);
-    } else {
-        while (flag->status == 1) {
-            // busy loop!
-            thrd_yield();
-        }
-    }
-#endif
-}
-
-
-/*------------- 7.25.3 Condition variable functions -------------*/
-// 7.25.3.1
-static inline int
-cnd_broadcast(cnd_t *cond)
-{
-    assert(cond != NULL);
-    WakeAllConditionVariable(cond);
-    return thrd_success;
-}
-
-// 7.25.3.2
-static inline void
-cnd_destroy(cnd_t *cond)
-{
-    (void)cond;
-    assert(cond != NULL);
-    // do nothing
-}
-
-// 7.25.3.3
-static inline int
-cnd_init(cnd_t *cond)
-{
-    assert(cond != NULL);
-    InitializeConditionVariable(cond);
-    return thrd_success;
-}
-
-// 7.25.3.4
-static inline int
-cnd_signal(cnd_t *cond)
-{
-    assert(cond != NULL);
-    WakeConditionVariable(cond);
-    return thrd_success;
-}
-
-// 7.25.3.5
-static inline int
-cnd_timedwait(cnd_t *cond, mtx_t *mtx, const struct timespec *abs_time)
-{
-    assert(cond != NULL);
-    assert(mtx != NULL);
-    assert(abs_time != NULL);
-#ifdef HAVE_TIMESPEC_GET
-    const DWORD timeout = impl_abs2relmsec(abs_time);
-    if (SleepConditionVariableCS(cond, mtx, timeout))
-        return thrd_success;
-    return (GetLastError() == ERROR_TIMEOUT) ? thrd_timedout : thrd_error;
-#else
-    return thrd_error;
-#endif
-}
-
-// 7.25.3.6
-static inline int
-cnd_wait(cnd_t *cond, mtx_t *mtx)
-{
-    assert(cond != NULL);
-    assert(mtx != NULL);
-    SleepConditionVariableCS(cond, mtx, INFINITE);
-    return thrd_success;
-}
-
-
-/*-------------------- 7.25.4 Mutex functions --------------------*/
-// 7.25.4.1
-static inline void
-mtx_destroy(mtx_t *mtx)
-{
-    assert(mtx);
-    DeleteCriticalSection(mtx);
-}
-
-// 7.25.4.2
-static inline int
-mtx_init(mtx_t *mtx, int type)
-{
-    assert(mtx != NULL);
-    if (type != mtx_plain && type != mtx_timed && type != mtx_try
-      && type != (mtx_plain|mtx_recursive)
-      && type != (mtx_timed|mtx_recursive)
-      && type != (mtx_try|mtx_recursive))
-        return thrd_error;
-    InitializeCriticalSection(mtx);
-    return thrd_success;
-}
-
-// 7.25.4.3
-static inline int
-mtx_lock(mtx_t *mtx)
-{
-    assert(mtx != NULL);
-    EnterCriticalSection(mtx);
-    return thrd_success;
-}
-
-// 7.25.4.4
-static inline int
-mtx_timedlock(mtx_t *mtx, const struct timespec *ts)
-{
-    assert(mtx != NULL);
-    assert(ts != NULL);
-#ifdef HAVE_TIMESPEC_GET
-    while (mtx_trylock(mtx) != thrd_success) {
-        if (impl_abs2relmsec(ts) == 0)
-            return thrd_timedout;
-        // busy loop!
-        thrd_yield();
-    }
-    return thrd_success;
-#else
-    return thrd_error;
-#endif
-}
-
-// 7.25.4.5
-static inline int
-mtx_trylock(mtx_t *mtx)
-{
-    assert(mtx != NULL);
-    return TryEnterCriticalSection(mtx) ? thrd_success : thrd_busy;
-}
-
-// 7.25.4.6
-static inline int
-mtx_unlock(mtx_t *mtx)
-{
-    assert(mtx != NULL);
-    LeaveCriticalSection(mtx);
-    return thrd_success;
-}
-
-
-/*------------------- 7.25.5 Thread functions -------------------*/
-// 7.25.5.1
-static inline int
-thrd_create(thrd_t *thr, thrd_start_t func, void *arg)
-{
-    struct impl_thrd_param *pack;
-    uintptr_t handle;
-    assert(thr != NULL);
-    pack = (struct impl_thrd_param *)malloc(sizeof(struct impl_thrd_param));
-    if (!pack) return thrd_nomem;
-    pack->func = func;
-    pack->arg = arg;
-    handle = _beginthreadex(NULL, 0, impl_thrd_routine, pack, 0, NULL);
-    if (handle == 0) {
-        if (errno == EAGAIN || errno == EACCES)
-            return thrd_nomem;
-        return thrd_error;
-    }
-    *thr = (thrd_t)handle;
-    return thrd_success;
-}
-
-#if 0
-// 7.25.5.2
-static inline thrd_t
-thrd_current(void)
-{
-    HANDLE hCurrentThread;
-    BOOL bRet;
-
-    /* GetCurrentThread() returns a pseudo-handle, which we need
-     * to pass to DuplicateHandle(). Only the resulting handle can be used
-     * from other threads.
-     *
-     * Note that neither handle can be compared to the one by thread_create.
-     * Only the thread IDs - as returned by GetThreadId() and GetCurrentThreadId()
-     * can be compared directly.
-     *
-     * Other potential solutions would be:
-     * - define thrd_t as a thread Ids, but this would mean we'd need to OpenThread for many operations
-     * - use malloc'ed memory for thrd_t. This would imply using TLS for current thread.
-     *
-     * Neither is particularly nice.
-     *
-     * Life would be much easier if C11 threads had different abstractions for
-     * threads and thread IDs, just like C++11 threads does...
-     */
-
-    bRet = DuplicateHandle(GetCurrentProcess(), // source process (pseudo) handle
-                           GetCurrentThread(), // source (pseudo) handle
-                           GetCurrentProcess(), // target process
-                           &hCurrentThread, // target handle
-                           0,
-                           FALSE,
-                           DUPLICATE_SAME_ACCESS);
-    assert(bRet);
-    if (!bRet) {
-	hCurrentThread = GetCurrentThread();
-    }
-    return hCurrentThread;
-}
-#endif
-
-// 7.25.5.3
-static inline int
-thrd_detach(thrd_t thr)
-{
-    CloseHandle(thr);
-    return thrd_success;
-}
-
-// 7.25.5.4
-static inline int
-thrd_equal(thrd_t thr0, thrd_t thr1)
-{
-    return GetThreadId(thr0) == GetThreadId(thr1);
-}
-
-// 7.25.5.5
-static inline void
-thrd_exit(int res)
-{
-    impl_tss_dtor_invoke();
-    _endthreadex((unsigned)res);
-}
-
-// 7.25.5.6
-static inline int
-thrd_join(thrd_t thr, int *res)
-{
-    DWORD w, code;
-    w = WaitForSingleObject(thr, INFINITE);
-    if (w != WAIT_OBJECT_0)
-        return thrd_error;
-    if (res) {
-        if (!GetExitCodeThread(thr, &code)) {
-            CloseHandle(thr);
-            return thrd_error;
-        }
-        *res = (int)code;
-    }
-    CloseHandle(thr);
-    return thrd_success;
-}
-
-// 7.25.5.7
-static inline void
-thrd_sleep(const struct timespec *time_point, struct timespec *remaining)
-{
-    (void)remaining;
-    assert(time_point);
-    assert(!remaining); /* not implemented */
-    Sleep((DWORD)impl_timespec2msec(time_point));
-}
-
-// 7.25.5.8
-static inline void
-thrd_yield(void)
-{
-    SwitchToThread();
-}
-
-
-/*----------- 7.25.6 Thread-specific storage functions -----------*/
-// 7.25.6.1
-static inline int
-tss_create(tss_t *key, tss_dtor_t dtor)
-{
-    assert(key != NULL);
-    *key = TlsAlloc();
-    if (dtor) {
-        if (impl_tss_dtor_register(*key, dtor)) {
-            TlsFree(*key);
-            return thrd_error;
-        }
-    }
-    return (*key != 0xFFFFFFFF) ? thrd_success : thrd_error;
-}
-
-// 7.25.6.2
-static inline void
-tss_delete(tss_t key)
-{
-    TlsFree(key);
-}
-
-// 7.25.6.3
-static inline void *
-tss_get(tss_t key)
-{
-    return TlsGetValue(key);
-}
-
-// 7.25.6.4
-static inline int
-tss_set(tss_t key, void *val)
-{
-    return TlsSetValue(key, val) ? thrd_success : thrd_error;
-}
-
-
-/*-------------------- 7.25.7 Time functions --------------------*/
-// 7.25.6.1
-#ifndef HAVE_TIMESPEC_GET
-static inline int
-timespec_get(struct timespec *ts, int base)
-{
-    assert(ts != NULL);
-    if (base == TIME_UTC) {
-        ts->tv_sec = time(NULL);
-        ts->tv_nsec = 0;
-        return base;
-    }
-    return 0;
-}
-#endif
diff -pruN 22.1.3-1/include/c11_compat.h 22.2.0~rc1-1/include/c11_compat.h
--- 22.1.3-1/include/c11_compat.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/c11_compat.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,27 +0,0 @@
-/* Copyright 2019 Intel Corporation */
-/* SPDX-License-Identifier: MIT */
-
-#include "no_extern_c.h"
-
-#ifndef _C11_COMPAT_H_
-#define _C11_COMPAT_H_
-
-#if defined(__cplusplus)
-   /* This is C++ code, not C */
-#elif (__STDC_VERSION__ >= 201112L)
-   /* Already C11 */
-#else
-
-
-/*
- * C11 static_assert() macro
- * assert.h only defines that name for C11 and above
- */
-#ifndef static_assert
-#define static_assert _Static_assert
-#endif
-
-
-#endif /* !C++ && !C11 */
-
-#endif /* _C11_COMPAT_H_ */
diff -pruN 22.1.3-1/include/c99_compat.h 22.2.0~rc1-1/include/c99_compat.h
--- 22.1.3-1/include/c99_compat.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/c99_compat.h	2022-08-03 18:11:03.000000000 +0000
@@ -41,16 +41,6 @@
 #  endif
 
    /*
-    * Visual Studio will complain if we define the `inline` keyword, but
-    * actually it only supports the keyword on C++.
-    *
-    * To avoid this the _ALLOW_KEYWORD_MACROS must be set.
-    */
-#  if !defined(_ALLOW_KEYWORD_MACROS)
-#    define _ALLOW_KEYWORD_MACROS
-#  endif
-
-   /*
     * XXX: MSVC has a `__restrict` keyword, but it also has a
     * `__declspec(restrict)` modifier, so it is impossible to define a
     * `restrict` macro without interfering with the latter.  Furthermore the
@@ -66,38 +56,14 @@
 
 
 /*
- * C99 inline keyword
- */
-#ifndef inline
-#  ifdef __cplusplus
-     /* C++ supports inline keyword */
-#  elif defined(__GNUC__)
-#    define inline __inline__
-#  elif defined(_MSC_VER)
-#    define inline __inline
-#  elif defined(__ICL)
-#    define inline __inline
-#  elif defined(__INTEL_COMPILER)
-     /* Intel compiler supports inline keyword */
-#  elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100)
-#    define inline __inline
-#  elif (__STDC_VERSION__ >= 199901L)
-     /* C99 supports inline keyword */
-#  else
-#    define inline
-#  endif
-#endif
-
-
-/*
  * C99 restrict keyword
  *
  * See also:
  * - http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html
  */
 #ifndef restrict
-#  if (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus)
-     /* C99 */
+#  ifndef __cplusplus
+     /* Use C99 restrict keyword */
 #  elif defined(__GNUC__)
 #    define restrict __restrict__
 #  elif defined(_MSC_VER)
@@ -107,22 +73,6 @@
 #  endif
 #endif
 
-
-/*
- * C99 __func__ macro
- */
-#ifndef __func__
-#  if (__STDC_VERSION__ >= 199901L)
-     /* C99 */
-#  elif defined(__GNUC__)
-#    define __func__ __FUNCTION__
-#  elif defined(_MSC_VER)
-#    define __func__ __FUNCTION__
-#  else
-#    define __func__ "<unknown>"
-#  endif
-#endif
-
 
 /* Simple test case for debugging */
 #if 0
diff -pruN 22.1.3-1/include/c99_math.h 22.2.0~rc1-1/include/c99_math.h
--- 22.1.3-1/include/c99_math.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/c99_math.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,211 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2007-2015 VMware, Inc.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-/**
- * Wrapper for math.h which makes sure we have definitions of all the c99
- * functions.
- */
-
-
-#ifndef _C99_MATH_H_
-#define _C99_MATH_H_
-
-#include <math.h>
-#include "c99_compat.h"
-
-
-/* This is to ensure that we get M_PI, etc. definitions */
-#if defined(_MSC_VER) && !defined(_USE_MATH_DEFINES)
-#error _USE_MATH_DEFINES define required when building with MSVC
-#endif 
-
-
-#if !defined(_MSC_VER) && \
-    __STDC_VERSION__ < 199901L && \
-    (!defined(_XOPEN_SOURCE) || _XOPEN_SOURCE < 600) && \
-    !defined(__cplusplus)
-
-static inline long int
-lrint(double d)
-{
-   long int rounded = (long int)(d + 0.5);
-
-   if (d - floor(d) == 0.5) {
-      if (rounded % 2 != 0)
-         rounded += (d > 0) ? -1 : 1;
-   }
-
-   return rounded;
-}
-
-static inline long int
-lrintf(float f)
-{
-   long int rounded = (long int)(f + 0.5f);
-
-   if (f - floorf(f) == 0.5f) {
-      if (rounded % 2 != 0)
-         rounded += (f > 0) ? -1 : 1;
-   }
-
-   return rounded;
-}
-
-static inline long long int
-llrint(double d)
-{
-   long long int rounded = (long long int)(d + 0.5);
-
-   if (d - floor(d) == 0.5) {
-      if (rounded % 2 != 0)
-         rounded += (d > 0) ? -1 : 1;
-   }
-
-   return rounded;
-}
-
-static inline long long int
-llrintf(float f)
-{
-   long long int rounded = (long long int)(f + 0.5f);
-
-   if (f - floorf(f) == 0.5f) {
-      if (rounded % 2 != 0)
-         rounded += (f > 0) ? -1 : 1;
-   }
-
-   return rounded;
-}
-
-static inline float
-exp2f(float f)
-{
-   return powf(2.0f, f);
-}
-
-static inline double
-exp2(double d)
-{
-   return pow(2.0, d);
-}
-
-#endif /* C99 */
-
-
-/*
- * signbit() is a macro on Linux.  Not available on Windows.
- */
-#ifndef signbit
-#define signbit(x) ((x) < 0.0f)
-#endif
-
-
-#ifndef M_PI
-#define M_PI (3.14159265358979323846)
-#endif
-
-#ifndef M_E
-#define M_E (2.7182818284590452354)
-#endif
-
-#ifndef M_LOG2E
-#define M_LOG2E (1.4426950408889634074)
-#endif
-
-#ifndef FLT_MAX_EXP
-#define FLT_MAX_EXP 128
-#endif
-
-
-#if defined(fpclassify)
-/* ISO C99 says that fpclassify is a macro.  Assume that any implementation
- * of fpclassify, whether it's in a C99 compiler or not, will be a macro.
- */
-#elif defined(__cplusplus)
-/* For C++, fpclassify() should be defined in <cmath> */
-#elif defined(_MSC_VER)
-/* Not required on VS2013 and above.  Oddly, the fpclassify() function
- * doesn't exist in such a form on MSVC.  This is an implementation using
- * slightly different lower-level Windows functions.
- */
-#include <float.h>
-
-static inline enum {FP_NAN, FP_INFINITE, FP_ZERO, FP_SUBNORMAL, FP_NORMAL}
-fpclassify(double x)
-{
-   switch(_fpclass(x)) {
-   case _FPCLASS_SNAN: /* signaling NaN */
-   case _FPCLASS_QNAN: /* quiet NaN */
-      return FP_NAN;
-   case _FPCLASS_NINF: /* negative infinity */
-   case _FPCLASS_PINF: /* positive infinity */
-      return FP_INFINITE;
-   case _FPCLASS_NN:   /* negative normal */
-   case _FPCLASS_PN:   /* positive normal */
-      return FP_NORMAL;
-   case _FPCLASS_ND:   /* negative denormalized */
-   case _FPCLASS_PD:   /* positive denormalized */
-      return FP_SUBNORMAL;
-   case _FPCLASS_NZ:   /* negative zero */
-   case _FPCLASS_PZ:   /* positive zero */
-      return FP_ZERO;
-   default:
-      /* Should never get here; but if we do, this will guarantee
-       * that the pattern is not treated like a number.
-       */
-      return FP_NAN;
-   }
-}
-#else
-#error "Need to include or define an fpclassify function"
-#endif
-
-
-/* Since C++11, the following functions are part of the std namespace. Their C
- * counteparts should still exist in the global namespace, however cmath
- * undefines those functions, which in glibc 2.23, are defined as macros rather
- * than functions as in glibc 2.22.
- */
-#if __cplusplus >= 201103L && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 23))
-#include <cmath>
-
-using std::fpclassify;
-using std::isfinite;
-using std::isinf;
-using std::isnan;
-using std::isnormal;
-using std::signbit;
-using std::isgreater;
-using std::isgreaterequal;
-using std::isless;
-using std::islessequal;
-using std::islessgreater;
-using std::isunordered;
-#endif
-
-
-#endif /* #define _C99_MATH_H_ */
diff -pruN 22.1.3-1/include/drm-uapi/amdgpu_drm.h 22.2.0~rc1-1/include/drm-uapi/amdgpu_drm.h
--- 22.1.3-1/include/drm-uapi/amdgpu_drm.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/drm-uapi/amdgpu_drm.h	2022-08-03 18:11:03.000000000 +0000
@@ -140,6 +140,10 @@ extern "C" {
  * not require GTT memory accounting
  */
 #define AMDGPU_GEM_CREATE_PREEMPTIBLE		(1 << 11)
+/* Flag that BO can be discarded under memory pressure without keeping the
+ * content.
+ */
+#define AMDGPU_GEM_CREATE_DISCARDABLE		(1 << 12)
 
 struct drm_amdgpu_gem_create_in  {
 	/** the requested memory size */
@@ -529,6 +533,8 @@ struct drm_amdgpu_gem_op {
 #define AMDGPU_VM_MTYPE_UC		(4 << 5)
 /* Use Read Write MTYPE instead of default MTYPE */
 #define AMDGPU_VM_MTYPE_RW		(5 << 5)
+/* don't allocate MALL */
+#define AMDGPU_VM_PAGE_NOALLOC		(1 << 9)
 
 struct drm_amdgpu_gem_va {
 	/** GEM object handle */
@@ -743,6 +749,8 @@ struct drm_amdgpu_cs_chunk_data {
 	#define AMDGPU_INFO_FW_DMCUB		0x14
 	/* Subquery id: Query TOC firmware version */
 	#define AMDGPU_INFO_FW_TOC		0x15
+	/* Subquery id: Query CAP firmware version */
+	#define AMDGPU_INFO_FW_CAP		0x16
 
 /* number of bytes moved for TTM migration */
 #define AMDGPU_INFO_NUM_BYTES_MOVED		0x0f
@@ -1083,7 +1091,8 @@ struct drm_amdgpu_info_hw_ip {
 	__u32  ib_size_alignment;
 	/** Bitmask of available rings. Bit 0 means ring 0, etc. */
 	__u32  available_rings;
-	__u32  _pad;
+	/** version info: bits 23:16 major, 15:8 minor, 7:0 revision */
+	__u32  ip_discovery_version;
 };
 
 struct drm_amdgpu_info_num_handles {
@@ -1148,7 +1157,11 @@ struct drm_amdgpu_info_video_caps {
 #define AMDGPU_FAMILY_RV			142 /* Raven */
 #define AMDGPU_FAMILY_NV			143 /* Navi10 */
 #define AMDGPU_FAMILY_VGH			144 /* Van Gogh */
+#define AMDGPU_FAMILY_GC_11_0_0			145 /* GC 11.0.0 */
 #define AMDGPU_FAMILY_YC			146 /* Yellow Carp */
+#define AMDGPU_FAMILY_GC_11_0_1			148 /* GC 11.0.1 */
+#define AMDGPU_FAMILY_GC_10_3_6			149 /* GC 10.3.6 */
+#define AMDGPU_FAMILY_GC_10_3_7			151 /* GC 10.3.7 */
 
 #if defined(__cplusplus)
 }
diff -pruN 22.1.3-1/include/drm-uapi/drm_fourcc.h 22.2.0~rc1-1/include/drm-uapi/drm_fourcc.h
--- 22.1.3-1/include/drm-uapi/drm_fourcc.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/drm-uapi/drm_fourcc.h	2022-08-03 18:11:03.000000000 +0000
@@ -1341,6 +1341,7 @@ drm_fourcc_canonicalize_nvidia_format_mo
 #define AMD_FMT_MOD_TILE_VER_GFX9 1
 #define AMD_FMT_MOD_TILE_VER_GFX10 2
 #define AMD_FMT_MOD_TILE_VER_GFX10_RBPLUS 3
+#define AMD_FMT_MOD_TILE_VER_GFX11 4
 
 /*
  * 64K_S is the same for GFX9/GFX10/GFX10_RBPLUS and hence has GFX9 as canonical
@@ -1356,6 +1357,7 @@ drm_fourcc_canonicalize_nvidia_format_mo
 #define AMD_FMT_MOD_TILE_GFX9_64K_S_X 25
 #define AMD_FMT_MOD_TILE_GFX9_64K_D_X 26
 #define AMD_FMT_MOD_TILE_GFX9_64K_R_X 27
+#define AMD_FMT_MOD_TILE_GFX11_256K_R_X 31
 
 #define AMD_FMT_MOD_DCC_BLOCK_64B 0
 #define AMD_FMT_MOD_DCC_BLOCK_128B 1
diff -pruN 22.1.3-1/include/drm-uapi/i915_drm.h 22.2.0~rc1-1/include/drm-uapi/i915_drm.h
--- 22.1.3-1/include/drm-uapi/i915_drm.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/drm-uapi/i915_drm.h	2022-08-03 18:11:03.000000000 +0000
@@ -154,21 +154,71 @@ enum i915_mocs_table_index {
 	I915_MOCS_CACHED,
 };
 
-/*
+/**
+ * enum drm_i915_gem_engine_class - uapi engine type enumeration
+ *
  * Different engines serve different roles, and there may be more than one
- * engine serving each role. enum drm_i915_gem_engine_class provides a
- * classification of the role of the engine, which may be used when requesting
- * operations to be performed on a certain subset of engines, or for providing
- * information about that group.
+ * engine serving each role.  This enum provides a classification of the role
+ * of the engine, which may be used when requesting operations to be performed
+ * on a certain subset of engines, or for providing information about that
+ * group.
  */
 enum drm_i915_gem_engine_class {
+	/**
+	 * @I915_ENGINE_CLASS_RENDER:
+	 *
+	 * Render engines support instructions used for 3D, Compute (GPGPU),
+	 * and programmable media workloads.  These instructions fetch data and
+	 * dispatch individual work items to threads that operate in parallel.
+	 * The threads run small programs (called "kernels" or "shaders") on
+	 * the GPU's execution units (EUs).
+	 */
 	I915_ENGINE_CLASS_RENDER	= 0,
+
+	/**
+	 * @I915_ENGINE_CLASS_COPY:
+	 *
+	 * Copy engines (also referred to as "blitters") support instructions
+	 * that move blocks of data from one location in memory to another,
+	 * or that fill a specified location of memory with fixed data.
+	 * Copy engines can perform pre-defined logical or bitwise operations
+	 * on the source, destination, or pattern data.
+	 */
 	I915_ENGINE_CLASS_COPY		= 1,
+
+	/**
+	 * @I915_ENGINE_CLASS_VIDEO:
+	 *
+	 * Video engines (also referred to as "bit stream decode" (BSD) or
+	 * "vdbox") support instructions that perform fixed-function media
+	 * decode and encode.
+	 */
 	I915_ENGINE_CLASS_VIDEO		= 2,
+
+	/**
+	 * @I915_ENGINE_CLASS_VIDEO_ENHANCE:
+	 *
+	 * Video enhancement engines (also referred to as "vebox") support
+	 * instructions related to image enhancement.
+	 */
 	I915_ENGINE_CLASS_VIDEO_ENHANCE	= 3,
 
-	/* should be kept compact */
+	/**
+	 * @I915_ENGINE_CLASS_COMPUTE:
+	 *
+	 * Compute engines support a subset of the instructions available
+	 * on render engines:  compute engines support Compute (GPGPU) and
+	 * programmable media workloads, but do not support the 3D pipeline.
+	 */
+	I915_ENGINE_CLASS_COMPUTE	= 4,
+
+	/* Values in this enum should be kept compact. */
 
+	/**
+	 * @I915_ENGINE_CLASS_INVALID:
+	 *
+	 * Placeholder value to represent an invalid engine class assignment.
+	 */
 	I915_ENGINE_CLASS_INVALID	= -1
 };
 
@@ -701,14 +751,27 @@ typedef struct drm_i915_irq_wait {
 
 /* Must be kept compact -- no holes and well documented */
 
-typedef struct drm_i915_getparam {
+/**
+ * struct drm_i915_getparam - Driver parameter query structure.
+ */
+struct drm_i915_getparam {
+	/** @param: Driver parameter to query. */
 	__s32 param;
-	/*
+
+	/**
+	 * @value: Address of memory where queried value should be put.
+	 *
 	 * WARNING: Using pointers instead of fixed-size u64 means we need to write
 	 * compat32 code. Don't repeat this mistake.
 	 */
 	int *value;
-} drm_i915_getparam_t;
+};
+
+/**
+ * typedef drm_i915_getparam_t - Driver parameter query structure.
+ * See struct drm_i915_getparam.
+ */
+typedef struct drm_i915_getparam drm_i915_getparam_t;
 
 /* Ioctl to set kernel params:
  */
@@ -1189,76 +1252,119 @@ struct drm_i915_gem_exec_object2 {
 	__u64 rsvd2;
 };
 
+/**
+ * struct drm_i915_gem_exec_fence - An input or output fence for the execbuf
+ * ioctl.
+ *
+ * The request will wait for input fence to signal before submission.
+ *
+ * The returned output fence will be signaled after the completion of the
+ * request.
+ */
 struct drm_i915_gem_exec_fence {
-	/**
-	 * User's handle for a drm_syncobj to wait on or signal.
-	 */
+	/** @handle: User's handle for a drm_syncobj to wait on or signal. */
 	__u32 handle;
 
+	/**
+	 * @flags: Supported flags are:
+	 *
+	 * I915_EXEC_FENCE_WAIT:
+	 * Wait for the input fence before request submission.
+	 *
+	 * I915_EXEC_FENCE_SIGNAL:
+	 * Return request completion fence as output
+	 */
+	__u32 flags;
 #define I915_EXEC_FENCE_WAIT            (1<<0)
 #define I915_EXEC_FENCE_SIGNAL          (1<<1)
 #define __I915_EXEC_FENCE_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SIGNAL << 1))
-	__u32 flags;
 };
 
-/*
- * See drm_i915_gem_execbuffer_ext_timeline_fences.
- */
-#define DRM_I915_GEM_EXECBUFFER_EXT_TIMELINE_FENCES 0
-
-/*
+/**
+ * struct drm_i915_gem_execbuffer_ext_timeline_fences - Timeline fences
+ * for execbuf ioctl.
+ *
  * This structure describes an array of drm_syncobj and associated points for
  * timeline variants of drm_syncobj. It is invalid to append this structure to
  * the execbuf if I915_EXEC_FENCE_ARRAY is set.
  */
 struct drm_i915_gem_execbuffer_ext_timeline_fences {
+#define DRM_I915_GEM_EXECBUFFER_EXT_TIMELINE_FENCES 0
+	/** @base: Extension link. See struct i915_user_extension. */
 	struct i915_user_extension base;
 
 	/**
-	 * Number of element in the handles_ptr & value_ptr arrays.
+	 * @fence_count: Number of elements in the @handles_ptr & @value_ptr
+	 * arrays.
 	 */
 	__u64 fence_count;
 
 	/**
-	 * Pointer to an array of struct drm_i915_gem_exec_fence of length
-	 * fence_count.
+	 * @handles_ptr: Pointer to an array of struct drm_i915_gem_exec_fence
+	 * of length @fence_count.
 	 */
 	__u64 handles_ptr;
 
 	/**
-	 * Pointer to an array of u64 values of length fence_count. Values
-	 * must be 0 for a binary drm_syncobj. A Value of 0 for a timeline
-	 * drm_syncobj is invalid as it turns a drm_syncobj into a binary one.
+	 * @values_ptr: Pointer to an array of u64 values of length
+	 * @fence_count.
+	 * Values must be 0 for a binary drm_syncobj. A Value of 0 for a
+	 * timeline drm_syncobj is invalid as it turns a drm_syncobj into a
+	 * binary one.
 	 */
 	__u64 values_ptr;
 };
 
+/**
+ * struct drm_i915_gem_execbuffer2 - Structure for DRM_I915_GEM_EXECBUFFER2
+ * ioctl.
+ */
 struct drm_i915_gem_execbuffer2 {
-	/**
-	 * List of gem_exec_object2 structs
-	 */
+	/** @buffers_ptr: Pointer to a list of gem_exec_object2 structs */
 	__u64 buffers_ptr;
+
+	/** @buffer_count: Number of elements in @buffers_ptr array */
 	__u32 buffer_count;
 
-	/** Offset in the batchbuffer to start execution from. */
+	/**
+	 * @batch_start_offset: Offset in the batchbuffer to start execution
+	 * from.
+	 */
 	__u32 batch_start_offset;
-	/** Bytes used in batchbuffer from batch_start_offset */
+
+	/**
+	 * @batch_len: Length in bytes of the batch buffer, starting from the
+	 * @batch_start_offset. If 0, length is assumed to be the batch buffer
+	 * object size.
+	 */
 	__u32 batch_len;
+
+	/** @DR1: deprecated */
 	__u32 DR1;
+
+	/** @DR4: deprecated */
 	__u32 DR4;
+
+	/** @num_cliprects: See @cliprects_ptr */
 	__u32 num_cliprects;
+
 	/**
-	 * This is a struct drm_clip_rect *cliprects if I915_EXEC_FENCE_ARRAY
-	 * & I915_EXEC_USE_EXTENSIONS are not set.
+	 * @cliprects_ptr: Kernel clipping was a DRI1 misfeature.
+	 *
+	 * It is invalid to use this field if I915_EXEC_FENCE_ARRAY or
+	 * I915_EXEC_USE_EXTENSIONS flags are not set.
 	 *
 	 * If I915_EXEC_FENCE_ARRAY is set, then this is a pointer to an array
-	 * of struct drm_i915_gem_exec_fence and num_cliprects is the length
-	 * of the array.
+	 * of &drm_i915_gem_exec_fence and @num_cliprects is the length of the
+	 * array.
 	 *
 	 * If I915_EXEC_USE_EXTENSIONS is set, then this is a pointer to a
-	 * single struct i915_user_extension and num_cliprects is 0.
+	 * single &i915_user_extension and num_cliprects is 0.
 	 */
 	__u64 cliprects_ptr;
+
+	/** @flags: Execbuf flags */
+	__u64 flags;
 #define I915_EXEC_RING_MASK              (0x3f)
 #define I915_EXEC_DEFAULT                (0<<0)
 #define I915_EXEC_RENDER                 (1<<0)
@@ -1276,10 +1382,6 @@ struct drm_i915_gem_execbuffer2 {
 #define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) /* default */
 #define I915_EXEC_CONSTANTS_ABSOLUTE 	(1<<6)
 #define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) /* gen4/5 only */
-	__u64 flags;
-	__u64 rsvd1; /* now used for context info */
-	__u64 rsvd2;
-};
 
 /** Resets the SO write offset registers for transform feedback on gen7. */
 #define I915_EXEC_GEN7_SOL_RESET	(1<<8)
@@ -1382,9 +1484,23 @@ struct drm_i915_gem_execbuffer2 {
  * drm_i915_gem_execbuffer_ext enum.
  */
 #define I915_EXEC_USE_EXTENSIONS	(1 << 21)
-
 #define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_USE_EXTENSIONS << 1))
 
+	/** @rsvd1: Context id */
+	__u64 rsvd1;
+
+	/**
+	 * @rsvd2: in and out sync_file file descriptors.
+	 *
+	 * When I915_EXEC_FENCE_IN or I915_EXEC_FENCE_SUBMIT flag is set, the
+	 * lower 32 bits of this field will have the in sync_file fd (input).
+	 *
+	 * When I915_EXEC_FENCE_OUT flag is set, the upper 32 bits of this
+	 * field will have the out sync_file fd (output).
+	 */
+	__u64 rsvd2;
+};
+
 #define I915_EXEC_CONTEXT_ID_MASK	(0xffffffff)
 #define i915_execbuffer2_set_context_id(eb2, context) \
 	(eb2).rsvd1 = context & I915_EXEC_CONTEXT_ID_MASK
@@ -1764,19 +1880,58 @@ struct drm_i915_gem_context_create {
 	__u32 pad;
 };
 
+/**
+ * struct drm_i915_gem_context_create_ext - Structure for creating contexts.
+ */
 struct drm_i915_gem_context_create_ext {
-	__u32 ctx_id; /* output: id of new context*/
+	/** @ctx_id: Id of the created context (output) */
+	__u32 ctx_id;
+
+	/**
+	 * @flags: Supported flags are:
+	 *
+	 * I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS:
+	 *
+	 * Extensions may be appended to this structure and driver must check
+	 * for those. See @extensions.
+	 *
+	 * I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE
+	 *
+	 * Created context will have single timeline.
+	 */
 	__u32 flags;
 #define I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS	(1u << 0)
 #define I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE	(1u << 1)
 #define I915_CONTEXT_CREATE_FLAGS_UNKNOWN \
 	(-(I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE << 1))
+
+	/**
+	 * @extensions: Zero-terminated chain of extensions.
+	 *
+	 * I915_CONTEXT_CREATE_EXT_SETPARAM:
+	 * Context parameter to set or query during context creation.
+	 * See struct drm_i915_gem_context_create_ext_setparam.
+	 *
+	 * I915_CONTEXT_CREATE_EXT_CLONE:
+	 * This extension has been removed. On the off chance someone somewhere
+	 * has attempted to use it, never re-use this extension number.
+	 */
 	__u64 extensions;
+#define I915_CONTEXT_CREATE_EXT_SETPARAM 0
+#define I915_CONTEXT_CREATE_EXT_CLONE 1
 };
 
+/**
+ * struct drm_i915_gem_context_param - Context parameter to set or query.
+ */
 struct drm_i915_gem_context_param {
+	/** @ctx_id: Context id */
 	__u32 ctx_id;
+
+	/** @size: Size of the parameter @value */
 	__u32 size;
+
+	/** @param: Parameter to set or query */
 	__u64 param;
 #define I915_CONTEXT_PARAM_BAN_PERIOD	0x1
 /* I915_CONTEXT_PARAM_NO_ZEROMAP has been removed.  On the off chance
@@ -1923,6 +2078,7 @@ struct drm_i915_gem_context_param {
 #define I915_CONTEXT_PARAM_PROTECTED_CONTENT    0xd
 /* Must be kept compact -- no holes and well documented */
 
+	/** @value: Context parameter value to be set or queried */
 	__u64 value;
 };
 
@@ -2321,23 +2477,29 @@ struct i915_context_param_engines {
 	struct i915_engine_class_instance engines[N__]; \
 } __attribute__((packed)) name__
 
+/**
+ * struct drm_i915_gem_context_create_ext_setparam - Context parameter
+ * to set or query during context creation.
+ */
 struct drm_i915_gem_context_create_ext_setparam {
-#define I915_CONTEXT_CREATE_EXT_SETPARAM 0
+	/** @base: Extension link. See struct i915_user_extension. */
 	struct i915_user_extension base;
+
+	/**
+	 * @param: Context parameter to set or query.
+	 * See struct drm_i915_gem_context_param.
+	 */
 	struct drm_i915_gem_context_param param;
 };
 
-/* This API has been removed.  On the off chance someone somewhere has
- * attempted to use it, never re-use this extension number.
- */
-#define I915_CONTEXT_CREATE_EXT_CLONE 1
-
 struct drm_i915_gem_context_destroy {
 	__u32 ctx_id;
 	__u32 pad;
 };
 
-/*
+/**
+ * struct drm_i915_gem_vm_control - Structure to create or destroy VM.
+ *
  * DRM_I915_GEM_VM_CREATE -
  *
  * Create a new virtual memory address space (ppGTT) for use within a context
@@ -2347,20 +2509,23 @@ struct drm_i915_gem_context_destroy {
  * The id of new VM (bound to the fd) for use with I915_CONTEXT_PARAM_VM is
  * returned in the outparam @id.
  *
- * No flags are defined, with all bits reserved and must be zero.
- *
  * An extension chain maybe provided, starting with @extensions, and terminated
  * by the @next_extension being 0. Currently, no extensions are defined.
  *
  * DRM_I915_GEM_VM_DESTROY -
  *
- * Destroys a previously created VM id, specified in @id.
+ * Destroys a previously created VM id, specified in @vm_id.
  *
  * No extensions or flags are allowed currently, and so must be zero.
  */
 struct drm_i915_gem_vm_control {
+	/** @extensions: Zero-terminated chain of extensions. */
 	__u64 extensions;
+
+	/** @flags: reserved for future usage, currently MBZ */
 	__u32 flags;
+
+	/** @vm_id: Id of the VM created or to be destroyed */
 	__u32 vm_id;
 };
 
@@ -3157,36 +3322,6 @@ struct drm_i915_gem_memory_class_instanc
  * struct drm_i915_memory_region_info - Describes one region as known to the
  * driver.
  *
- * Note that we reserve some stuff here for potential future work. As an example
- * we might want expose the capabilities for a given region, which could include
- * things like if the region is CPU mappable/accessible, what are the supported
- * mapping types etc.
- *
- * Note that to extend struct drm_i915_memory_region_info and struct
- * drm_i915_query_memory_regions in the future the plan is to do the following:
- *
- * .. code-block:: C
- *
- *	struct drm_i915_memory_region_info {
- *		struct drm_i915_gem_memory_class_instance region;
- *		union {
- *			__u32 rsvd0;
- *			__u32 new_thing1;
- *		};
- *		...
- *		union {
- *			__u64 rsvd1[8];
- *			struct {
- *				__u64 new_thing2;
- *				__u64 new_thing3;
- *				...
- *			};
- *		};
- *	};
- *
- * With this things should remain source compatible between versions for
- * userspace, even as we add new fields.
- *
  * Note this is using both struct drm_i915_query_item and struct drm_i915_query.
  * For this new query we are adding the new query id DRM_I915_QUERY_MEMORY_REGIONS
  * at &drm_i915_query_item.query_id.
@@ -3198,14 +3333,81 @@ struct drm_i915_memory_region_info {
 	/** @rsvd0: MBZ */
 	__u32 rsvd0;
 
-	/** @probed_size: Memory probed by the driver (-1 = unknown) */
+	/**
+	 * @probed_size: Memory probed by the driver
+	 *
+	 * Note that it should not be possible to ever encounter a zero value
+	 * here, also note that no current region type will ever return -1 here.
+	 * Although for future region types, this might be a possibility. The
+	 * same applies to the other size fields.
+	 */
 	__u64 probed_size;
 
-	/** @unallocated_size: Estimate of memory remaining (-1 = unknown) */
+	/**
+	 * @unallocated_size: Estimate of memory remaining
+	 *
+	 * Requires CAP_PERFMON or CAP_SYS_ADMIN to get reliable accounting.
+	 * Without this (or if this is an older kernel) the value here will
+	 * always equal the @probed_size. Note this is only currently tracked
+	 * for I915_MEMORY_CLASS_DEVICE regions (for other types the value here
+	 * will always equal the @probed_size).
+	 */
 	__u64 unallocated_size;
 
-	/** @rsvd1: MBZ */
-	__u64 rsvd1[8];
+	union {
+		/** @rsvd1: MBZ */
+		__u64 rsvd1[8];
+		struct {
+			/**
+			 * @probed_cpu_visible_size: Memory probed by the driver
+			 * that is CPU accessible.
+			 *
+			 * This will be always be <= @probed_size, and the
+			 * remainder (if there is any) will not be CPU
+			 * accessible.
+			 *
+			 * On systems without small BAR, the @probed_size will
+			 * always equal the @probed_cpu_visible_size, since all
+			 * of it will be CPU accessible.
+			 *
+			 * Note this is only tracked for
+			 * I915_MEMORY_CLASS_DEVICE regions (for other types the
+			 * value here will always equal the @probed_size).
+			 *
+			 * Note that if the value returned here is zero, then
+			 * this must be an old kernel which lacks the relevant
+			 * small-bar uAPI support (including
+			 * I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS), but on
+			 * such systems we should never actually end up with a
+			 * small BAR configuration, assuming we are able to load
+			 * the kernel module. Hence it should be safe to treat
+			 * this the same as when @probed_cpu_visible_size ==
+			 * @probed_size.
+			 */
+			__u64 probed_cpu_visible_size;
+
+			/**
+			 * @unallocated_cpu_visible_size: Estimate of CPU
+			 * visible memory remaining.
+			 *
+			 * Note this is only tracked for
+			 * I915_MEMORY_CLASS_DEVICE regions (for other types the
+			 * value here will always equal the
+			 * @probed_cpu_visible_size).
+			 *
+			 * Requires CAP_PERFMON or CAP_SYS_ADMIN to get reliable
+			 * accounting.  Without this the value here will always
+			 * equal the @probed_cpu_visible_size. Note this is only
+			 * currently tracked for I915_MEMORY_CLASS_DEVICE
+			 * regions (for other types the value here will also
+			 * always equal the @probed_cpu_visible_size).
+			 *
+			 * If this is an older kernel the value here will be
+			 * zero, see also @probed_cpu_visible_size.
+			 */
+			__u64 unallocated_cpu_visible_size;
+		};
+	};
 };
 
 /**
@@ -3279,11 +3481,11 @@ struct drm_i915_query_memory_regions {
  * struct drm_i915_gem_create_ext - Existing gem_create behaviour, with added
  * extension support using struct i915_user_extension.
  *
- * Note that in the future we want to have our buffer flags here, at least for
- * the stuff that is immutable. Previously we would have two ioctls, one to
- * create the object with gem_create, and another to apply various parameters,
- * however this creates some ambiguity for the params which are considered
- * immutable. Also in general we're phasing out the various SET/GET ioctls.
+ * Note that new buffer flags should be added here, at least for the stuff that
+ * is immutable. Previously we would have two ioctls, one to create the object
+ * with gem_create, and another to apply various parameters, however this
+ * creates some ambiguity for the params which are considered immutable. Also in
+ * general we're phasing out the various SET/GET ioctls.
  */
 struct drm_i915_gem_create_ext {
 	/**
@@ -3291,7 +3493,6 @@ struct drm_i915_gem_create_ext {
 	 *
 	 * The (page-aligned) allocated size for the object will be returned.
 	 *
-	 *
 	 * DG2 64K min page size implications:
 	 *
 	 * On discrete platforms, starting from DG2, we have to contend with GTT
@@ -3303,7 +3504,9 @@ struct drm_i915_gem_create_ext {
 	 *
 	 * Note that the returned size here will always reflect any required
 	 * rounding up done by the kernel, i.e 4K will now become 64K on devices
-	 * such as DG2.
+	 * such as DG2. The kernel will always select the largest minimum
+	 * page-size for the set of possible placements as the value to use when
+	 * rounding up the @size.
 	 *
 	 * Special DG2 GTT address alignment requirement:
 	 *
@@ -3327,14 +3530,58 @@ struct drm_i915_gem_create_ext {
 	 * is deemed to be a good compromise.
 	 */
 	__u64 size;
+
 	/**
 	 * @handle: Returned handle for the object.
 	 *
 	 * Object handles are nonzero.
 	 */
 	__u32 handle;
-	/** @flags: MBZ */
+
+	/**
+	 * @flags: Optional flags.
+	 *
+	 * Supported values:
+	 *
+	 * I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS - Signal to the kernel that
+	 * the object will need to be accessed via the CPU.
+	 *
+	 * Only valid when placing objects in I915_MEMORY_CLASS_DEVICE, and only
+	 * strictly required on configurations where some subset of the device
+	 * memory is directly visible/mappable through the CPU (which we also
+	 * call small BAR), like on some DG2+ systems. Note that this is quite
+	 * undesirable, but due to various factors like the client CPU, BIOS etc
+	 * it's something we can expect to see in the wild. See
+	 * &drm_i915_memory_region_info.probed_cpu_visible_size for how to
+	 * determine if this system applies.
+	 *
+	 * Note that one of the placements MUST be I915_MEMORY_CLASS_SYSTEM, to
+	 * ensure the kernel can always spill the allocation to system memory,
+	 * if the object can't be allocated in the mappable part of
+	 * I915_MEMORY_CLASS_DEVICE.
+	 *
+	 * Also note that since the kernel only supports flat-CCS on objects
+	 * that can *only* be placed in I915_MEMORY_CLASS_DEVICE, we therefore
+	 * don't support I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS together with
+	 * flat-CCS.
+	 *
+	 * Without this hint, the kernel will assume that non-mappable
+	 * I915_MEMORY_CLASS_DEVICE is preferred for this object. Note that the
+	 * kernel can still migrate the object to the mappable part, as a last
+	 * resort, if userspace ever CPU faults this object, but this might be
+	 * expensive, and so ideally should be avoided.
+	 *
+	 * On older kernels which lack the relevant small-bar uAPI support (see
+	 * also &drm_i915_memory_region_info.probed_cpu_visible_size),
+	 * usage of the flag will result in an error, but it should NEVER be
+	 * possible to end up with a small BAR configuration, assuming we can
+	 * also successfully load the i915 kernel module. In such cases the
+	 * entire I915_MEMORY_CLASS_DEVICE region will be CPU accessible, and as
+	 * such there are zero restrictions on where the object can be placed.
+	 */
+#define I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS (1 << 0)
 	__u32 flags;
+
 	/**
 	 * @extensions: The chain of extensions to apply to this object.
 	 *
@@ -3393,6 +3640,22 @@ struct drm_i915_gem_create_ext {
  * At which point we get the object handle in &drm_i915_gem_create_ext.handle,
  * along with the final object size in &drm_i915_gem_create_ext.size, which
  * should account for any rounding up, if required.
+ *
+ * Note that userspace has no means of knowing the current backing region
+ * for objects where @num_regions is larger than one. The kernel will only
+ * ensure that the priority order of the @regions array is honoured, either
+ * when initially placing the object, or when moving memory around due to
+ * memory pressure
+ *
+ * On Flat-CCS capable HW, compression is supported for the objects residing
+ * in I915_MEMORY_CLASS_DEVICE. When such objects (compressed) have other
+ * memory class in @regions and migrated (by i915, due to memory
+ * constraints) to the non I915_MEMORY_CLASS_DEVICE region, then i915 needs to
+ * decompress the content. But i915 doesn't have the required information to
+ * decompress the userspace compressed objects.
+ *
+ * So i915 supports Flat-CCS, on the objects which can reside only on
+ * I915_MEMORY_CLASS_DEVICE regions.
  */
 struct drm_i915_gem_create_ext_memory_regions {
 	/** @base: Extension link. See struct i915_user_extension. */
diff -pruN 22.1.3-1/include/drm-uapi/msm_drm.h 22.2.0~rc1-1/include/drm-uapi/msm_drm.h
--- 22.1.3-1/include/drm-uapi/msm_drm.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/drm-uapi/msm_drm.h	2022-08-03 18:11:03.000000000 +0000
@@ -82,6 +82,10 @@ struct drm_msm_timespec {
 #define MSM_PARAM_FAULTS     0x09  /* RO */
 #define MSM_PARAM_SUSPENDS   0x0a  /* RO */
 #define MSM_PARAM_SYSPROF    0x0b  /* WO: 1 preserves perfcntrs, 2 also disables suspend */
+#define MSM_PARAM_COMM       0x0c  /* WO: override for task->comm */
+#define MSM_PARAM_CMDLINE    0x0d  /* WO: override for task cmdline */
+#define MSM_PARAM_VA_START   0x0e  /* RO: start of valid GPU iova range */
+#define MSM_PARAM_VA_SIZE    0x0f  /* RO: size of valid GPU iova range (bytes) */
 
 /* For backwards compat.  The original support for preemption was based on
  * a single ring per priority level so # of priority levels equals the #
@@ -95,6 +99,8 @@ struct drm_msm_param {
 	__u32 pipe;           /* in, MSM_PIPE_x */
 	__u32 param;          /* in, MSM_PARAM_x */
 	__u64 value;          /* out (get_param) or in (set_param) */
+	__u32 len;            /* zero for non-pointer params */
+	__u32 pad;            /* must be zero */
 };
 
 /*
@@ -131,6 +137,7 @@ struct drm_msm_gem_new {
 #define MSM_INFO_GET_IOVA	0x01   /* get iova, returned by value */
 #define MSM_INFO_SET_NAME	0x02   /* set the debug name (by pointer) */
 #define MSM_INFO_GET_NAME	0x03   /* get debug name, returned by pointer */
+#define MSM_INFO_SET_IOVA	0x04   /* set the iova, passed by value */
 
 struct drm_msm_gem_info {
 	__u32 handle;         /* in */
diff -pruN 22.1.3-1/include/drm-uapi/virtgpu_drm.h 22.2.0~rc1-1/include/drm-uapi/virtgpu_drm.h
--- 22.1.3-1/include/drm-uapi/virtgpu_drm.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/drm-uapi/virtgpu_drm.h	2022-08-03 18:11:03.000000000 +0000
@@ -163,7 +163,6 @@ struct drm_virtgpu_resource_create_blob
 #define VIRTGPU_BLOB_FLAG_USE_MAPPABLE     0x0001
 #define VIRTGPU_BLOB_FLAG_USE_SHAREABLE    0x0002
 #define VIRTGPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004
-#define VIRTGPU_BLOB_FLAG_USE_INTERNAL     0x0008   /* not-mappable, not-shareable */
 	/* zero is invalid blob_mem */
 	__u32 blob_mem;
 	__u32 blob_flags;
diff -pruN 22.1.3-1/include/GL/internal/dri_interface.h 22.2.0~rc1-1/include/GL/internal/dri_interface.h
--- 22.1.3-1/include/GL/internal/dri_interface.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/GL/internal/dri_interface.h	2022-08-03 18:11:03.000000000 +0000
@@ -1211,6 +1211,7 @@ struct __DRIdri2ExtensionRec {
 #define __DRI_IMAGE_FORMAT_ABGR16161616F 0x1015
 #define __DRI_IMAGE_FORMAT_SXRGB8       0x1016
 #define __DRI_IMAGE_FORMAT_ABGR16161616 0x1017
+#define __DRI_IMAGE_FORMAT_XBGR16161616 0x1018
 
 #define __DRI_IMAGE_USE_SHARE		0x0001
 #define __DRI_IMAGE_USE_SCANOUT		0x0002
@@ -1241,7 +1242,6 @@ struct __DRIdri2ExtensionRec {
 #define __DRI_IMAGE_FOURCC_SARGB8888	0x83324258
 #define __DRI_IMAGE_FOURCC_SABGR8888	0x84324258
 #define __DRI_IMAGE_FOURCC_SXRGB8888	0x85324258
-#define __DRI_IMAGE_FOURCC_RGBA16161616 0x38344152  /* fourcc_code('R', 'A', '4', '8' ) */
 
 /**
  * Queryable on images created by createImageFromNames.
diff -pruN 22.1.3-1/include/kopper_interface.h 22.2.0~rc1-1/include/kopper_interface.h
--- 22.1.3-1/include/kopper_interface.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/kopper_interface.h	2022-08-03 18:11:03.000000000 +0000
@@ -75,6 +75,7 @@ struct __DRIkopperExtensionRec {
                                         int pixmap);
     int64_t (*swapBuffers)(__DRIdrawable *draw);
     void (*setSwapInterval)(__DRIdrawable *drawable, int interval);
+    int (*queryBufferAge)(__DRIdrawable *drawable);
 };
 
 /**
@@ -95,6 +96,7 @@ struct kopper_loader_info {
 #endif
    };
    int has_alpha;
+   int initial_swap_interval;
 };
 
 #define __DRI_KOPPER_LOADER "DRI_KopperLoader"
diff -pruN 22.1.3-1/include/pci_ids/iris_pci_ids.h 22.2.0~rc1-1/include/pci_ids/iris_pci_ids.h
--- 22.1.3-1/include/pci_ids/iris_pci_ids.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/pci_ids/iris_pci_ids.h	2022-08-03 18:11:03.000000000 +0000
@@ -221,14 +221,13 @@ CHIPSET(0x4907, sg1, "SG1", "Intel(R) Gr
 CHIPSET(0x4908, dg1, "DG1", "Intel(R) Graphics")
 CHIPSET(0x4909, dg1, "DG1", "Intel(R) Graphics")
 
-/* Commented devices are waiting on i915 upstream support */
-/* CHIPSET(0x4f80, dg2_g10, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x4f81, dg2_g10, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x4f82, dg2_g10, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x4f83, dg2_g10, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x4f84, dg2_g10, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x4f87, dg2_g11, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x4f88, dg2_g11, "DG2", "Intel(R) Graphics") */
+CHIPSET(0x4f80, dg2_g10, "DG2", "Intel(R) Graphics")
+CHIPSET(0x4f81, dg2_g10, "DG2", "Intel(R) Graphics")
+CHIPSET(0x4f82, dg2_g10, "DG2", "Intel(R) Graphics")
+CHIPSET(0x4f83, dg2_g10, "DG2", "Intel(R) Graphics")
+CHIPSET(0x4f84, dg2_g10, "DG2", "Intel(R) Graphics")
+CHIPSET(0x4f87, dg2_g11, "DG2", "Intel(R) Graphics")
+CHIPSET(0x4f88, dg2_g11, "DG2", "Intel(R) Graphics")
 CHIPSET(0x5690, dg2_g10, "DG2", "Intel(R) Graphics")
 CHIPSET(0x5691, dg2_g10, "DG2", "Intel(R) Graphics")
 CHIPSET(0x5692, dg2_g10, "DG2", "Intel(R) Graphics")
@@ -237,16 +236,16 @@ CHIPSET(0x5694, dg2_g11, "DG2", "Intel(R
 CHIPSET(0x5695, dg2_g11, "DG2", "Intel(R) Graphics")
 CHIPSET(0x5696, dg2_g12, "DG2", "Intel(R) Graphics")
 CHIPSET(0x5697, dg2_g12, "DG2", "Intel(R) Graphics")
-/* CHIPSET(0x56a0, dg2_g10, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x56a1, dg2_g10, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x56a2, dg2_g10, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x56a3, dg2_g12, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x56a4, dg2_g12, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x56a5, dg2_g11, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x56a6, dg2_g11, "DG2", "Intel(R) Graphics") */
+CHIPSET(0x56a0, dg2_g10, "DG2", "Intel(R) Graphics")
+CHIPSET(0x56a1, dg2_g10, "DG2", "Intel(R) Graphics")
+CHIPSET(0x56a2, dg2_g10, "DG2", "Intel(R) Graphics")
+CHIPSET(0x56a3, dg2_g12, "DG2", "Intel(R) Graphics")
+CHIPSET(0x56a4, dg2_g12, "DG2", "Intel(R) Graphics")
+CHIPSET(0x56a5, dg2_g11, "DG2", "Intel(R) Graphics")
+CHIPSET(0x56a6, dg2_g11, "DG2", "Intel(R) Graphics")
 CHIPSET(0x56b0, dg2_g11, "DG2", "Intel(R) Graphics")
-/* CHIPSET(0x56b1, dg2_g11, "DG2", "Intel(R) Graphics") */
+CHIPSET(0x56b1, dg2_g11, "DG2", "Intel(R) Graphics")
 CHIPSET(0x56b2, dg2_g12, "DG2", "Intel(R) Graphics")
-/* CHIPSET(0x56b3, dg2_g12, "DG2", "Intel(R) Graphics") */
-/* CHIPSET(0x56c0, dg2_g10, "ATS-M", "Intel(R) Graphics") */
-/* CHIPSET(0x56c1, dg2_g11, "ATS-M", "Intel(R) Graphics") */
+CHIPSET(0x56b3, dg2_g12, "DG2", "Intel(R) Graphics")
+CHIPSET(0x56c0, dg2_g10, "ATS-M", "Intel(R) Graphics")
+CHIPSET(0x56c1, dg2_g11, "ATS-M", "Intel(R) Graphics")
diff -pruN 22.1.3-1/include/vulkan/vulkan_beta.h 22.2.0~rc1-1/include/vulkan/vulkan_beta.h
--- 22.1.3-1/include/vulkan/vulkan_beta.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/vulkan/vulkan_beta.h	2022-08-03 18:11:03.000000000 +0000
@@ -480,33 +480,35 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVi
 #define VK_EXT_video_encode_h264 1
 #include "vk_video/vulkan_video_codec_h264std.h"
 #include "vk_video/vulkan_video_codec_h264std_encode.h"
-#define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 6
+#define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 7
 #define VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_EXT_video_encode_h264"
 
 typedef enum VkVideoEncodeH264CapabilityFlagBitsEXT {
-    VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_BIT_EXT = 0x00000001,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT = 0x00000002,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT = 0x00000004,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT = 0x00000008,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT = 0x00000010,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT = 0x00000020,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT = 0x00000040,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_PIC_INIT_QP_MINUS26_BIT_EXT = 0x00000080,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_BIT_EXT = 0x00000100,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_EXPLICIT_BIT_EXT = 0x00000200,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_IMPLICIT_BIT_EXT = 0x00000400,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT = 0x00000800,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT = 0x00001000,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT = 0x00002000,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT = 0x00004000,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT = 0x00008000,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT = 0x00010000,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT = 0x00020000,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_DISABLE_DIRECT_SPATIAL_MV_PRED_BIT_EXT = 0x00040000,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT = 0x00080000,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT = 0x00100000,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT = 0x00200000,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT = 0x00400000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_ENABLED_BIT_EXT = 0x00000001,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_DISABLED_BIT_EXT = 0x00000002,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT = 0x00000004,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT = 0x00000008,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT = 0x00000010,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT = 0x00000020,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT = 0x00000040,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT = 0x00000080,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_PIC_INIT_QP_MINUS26_BIT_EXT = 0x00000100,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_BIT_EXT = 0x00000200,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_EXPLICIT_BIT_EXT = 0x00000400,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_IMPLICIT_BIT_EXT = 0x00000800,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT = 0x00001000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT = 0x00002000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT = 0x00004000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT = 0x00008000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT = 0x00010000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT = 0x00020000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT = 0x00040000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_DISABLE_DIRECT_SPATIAL_MV_PRED_BIT_EXT = 0x00080000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT = 0x00100000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT = 0x00200000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT = 0x00400000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT = 0x00800000,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT = 0x01000000,
     VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
 } VkVideoEncodeH264CapabilityFlagBitsEXT;
 typedef VkFlags VkVideoEncodeH264CapabilityFlagsEXT;
diff -pruN 22.1.3-1/include/vulkan/vulkan_core.h 22.2.0~rc1-1/include/vulkan/vulkan_core.h
--- 22.1.3-1/include/vulkan/vulkan_core.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/vulkan/vulkan_core.h	2022-08-03 18:11:03.000000000 +0000
@@ -72,7 +72,7 @@ extern "C" {
 #define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0
 
 // Version of this file
-#define VK_HEADER_VERSION 211
+#define VK_HEADER_VERSION 219
 
 // Complete version of this file
 #define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 3, VK_HEADER_VERSION)
@@ -120,7 +120,6 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDesc
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool)
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
-#define VK_UUID_SIZE                      16U
 #define VK_ATTACHMENT_UNUSED              (~0U)
 #define VK_FALSE                          0U
 #define VK_LOD_CLAMP_NONE                 1000.0F
@@ -131,10 +130,11 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkComm
 #define VK_TRUE                           1U
 #define VK_WHOLE_SIZE                     (~0ULL)
 #define VK_MAX_MEMORY_TYPES               32U
-#define VK_MAX_MEMORY_HEAPS               16U
 #define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE  256U
+#define VK_UUID_SIZE                      16U
 #define VK_MAX_EXTENSION_NAME_SIZE        256U
 #define VK_MAX_DESCRIPTION_SIZE           256U
+#define VK_MAX_MEMORY_HEAPS               16U
 
 typedef enum VkResult {
     VK_SUCCESS = 0,
@@ -168,6 +168,24 @@ typedef enum VkResult {
     VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
     VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
     VK_ERROR_INVALID_SHADER_NV = -1000012000,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR = -1000023000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR = -1000023001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR = -1000023002,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR = -1000023003,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR = -1000023004,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR = -1000023005,
+#endif
     VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158000,
     VK_ERROR_NOT_PERMITTED_KHR = -1000174001,
     VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = -1000255000,
@@ -175,6 +193,7 @@ typedef enum VkResult {
     VK_THREAD_DONE_KHR = 1000268001,
     VK_OPERATION_DEFERRED_KHR = 1000268002,
     VK_OPERATION_NOT_DEFERRED_KHR = 1000268003,
+    VK_ERROR_COMPRESSION_EXHAUSTED_EXT = -1000338000,
     VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY,
     VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE,
     VK_ERROR_FRAGMENTATION_EXT = VK_ERROR_FRAGMENTATION,
@@ -767,7 +786,6 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV = 1000201000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV = 1000202000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV = 1000202001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV = 1000203000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV = 1000204000,
     VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV = 1000205000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = 1000205002,
@@ -871,11 +889,26 @@ typedef enum VkStructureType {
 #endif
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV = 1000300000,
     VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV = 1000300001,
+    VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT = 1000311000,
+    VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT = 1000311001,
+    VK_STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT = 1000311002,
+    VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT = 1000311003,
+    VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT = 1000311004,
+    VK_STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT = 1000311005,
+    VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT = 1000311006,
+    VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT = 1000311007,
+    VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT = 1000311008,
+    VK_STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT = 1000311009,
+    VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT = 1000311010,
+    VK_STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT = 1000311011,
     VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV = 1000314008,
     VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV = 1000314009,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT = 1000320000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT = 1000320001,
     VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT = 1000320002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD = 1000321000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR = 1000203000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR = 1000322000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR = 1000323000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = 1000326000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV = 1000326001,
@@ -888,6 +921,11 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = 1000332001,
     VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM = 1000333000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR = 1000336000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT = 1000338000,
+    VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT = 1000338001,
+    VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT = 1000338002,
+    VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT = 1000338003,
+    VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT = 1000338004,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT = 1000340000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM = 1000342000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT = 1000344000,
@@ -922,11 +960,17 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI = 1000370000,
     VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV = 1000371000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV = 1000371001,
+    VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT = 1000372000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT = 1000372001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT = 1000376000,
+    VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT = 1000376001,
+    VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT = 1000376002,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT = 1000377000,
     VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX = 1000378000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT = 1000381000,
     VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT = 1000381001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT = 1000382000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR = 1000386000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT = 1000391000,
     VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT = 1000391001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT = 1000392000,
@@ -938,10 +982,20 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE = 1000420000,
     VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE = 1000420001,
     VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE = 1000420002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT = 1000422000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM = 1000425000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM = 1000425001,
     VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM = 1000425002,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV = 1000430000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT = 1000437000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT = 1000458000,
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT = 1000458001,
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT = 1000458002,
+    VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT = 1000458003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT = 1000462000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT = 1000462001,
+    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT = 1000462002,
+    VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT = 1000462003,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
     VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
@@ -1047,6 +1101,7 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES,
     VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES,
     VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO,
@@ -1104,6 +1159,7 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2,
     VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2,
     VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3,
+    VK_STRUCTURE_TYPE_PIPELINE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR,
     VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES,
@@ -1113,6 +1169,11 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
 } VkStructureType;
 
+typedef enum VkPipelineCacheHeaderVersion {
+    VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
+    VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineCacheHeaderVersion;
+
 typedef enum VkImageLayout {
     VK_IMAGE_LAYOUT_UNDEFINED = 0,
     VK_IMAGE_LAYOUT_GENERAL = 1,
@@ -1222,11 +1283,6 @@ typedef enum VkObjectType {
     VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF
 } VkObjectType;
 
-typedef enum VkPipelineCacheHeaderVersion {
-    VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
-    VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF
-} VkPipelineCacheHeaderVersion;
-
 typedef enum VkVendorId {
     VK_VENDOR_ID_VIV = 0x10001,
     VK_VENDOR_ID_VSI = 0x10002,
@@ -1596,6 +1652,8 @@ typedef enum VkQueryType {
     VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR = 1000299000,
 #endif
     VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT = 1000382000,
+    VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR = 1000386000,
+    VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR = 1000386001,
     VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
 } VkQueryType;
 
@@ -2074,6 +2132,7 @@ typedef enum VkImageCreateFlagBits {
     VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV = 0x00002000,
     VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000,
     VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT = 0x00004000,
+    VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT = 0x00040000,
     VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT = 0x00020000,
     VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM = 0x00008000,
     VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT,
@@ -2462,6 +2521,7 @@ typedef VkFlags VkShaderStageFlags;
 typedef enum VkSamplerCreateFlagBits {
     VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT = 0x00000001,
     VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT = 0x00000002,
+    VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT = 0x00000004,
     VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
 } VkSamplerCreateFlagBits;
 typedef VkFlags VkSamplerCreateFlags;
@@ -5524,6 +5584,7 @@ typedef enum VkDriverId {
     VK_DRIVER_ID_MESA_PANVK = 20,
     VK_DRIVER_ID_SAMSUNG_PROPRIETARY = 21,
     VK_DRIVER_ID_MESA_VENUS = 22,
+    VK_DRIVER_ID_MESA_DOZEN = 23,
     VK_DRIVER_ID_AMD_PROPRIETARY_KHR = VK_DRIVER_ID_AMD_PROPRIETARY,
     VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = VK_DRIVER_ID_AMD_OPEN_SOURCE,
     VK_DRIVER_ID_MESA_RADV_KHR = VK_DRIVER_ID_MESA_RADV,
@@ -6356,6 +6417,7 @@ static const VkPipelineStageFlagBits2 VK
 static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000ULL;
 static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI = 0x8000000000ULL;
 static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI = 0x10000000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR = 0x10000000ULL;
 
 typedef VkFlags64 VkAccessFlags2;
 
@@ -6430,6 +6492,7 @@ static const VkAccessFlagBits2 VK_ACCESS
 static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000ULL;
 static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000ULL;
 static const VkAccessFlagBits2 VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI = 0x8000000000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR = 0x10000000000ULL;
 
 
 typedef enum VkSubmitFlagBits {
@@ -9382,6 +9445,23 @@ VKAPI_ATTR void VKAPI_CALL vkGetQueueChe
 #endif
 
 
+#define VK_KHR_fragment_shader_barycentric 1
+#define VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1
+#define VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_KHR_fragment_shader_barycentric"
+typedef struct VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           fragmentShaderBarycentric;
+} VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR;
+
+typedef struct VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           triStripVertexOrderIndependentOfProvokingVertex;
+} VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR;
+
+
+
 #define VK_KHR_shader_subgroup_uniform_control_flow 1
 #define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION 1
 #define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME "VK_KHR_shader_subgroup_uniform_control_flow"
@@ -9484,6 +9564,42 @@ typedef VkFormatProperties3 VkFormatProp
 
 
 
+#define VK_KHR_ray_tracing_maintenance1 1
+#define VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION 1
+#define VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_ray_tracing_maintenance1"
+typedef struct VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           rayTracingMaintenance1;
+    VkBool32           rayTracingPipelineTraceRaysIndirect2;
+} VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR;
+
+typedef struct VkTraceRaysIndirectCommand2KHR {
+    VkDeviceAddress    raygenShaderRecordAddress;
+    VkDeviceSize       raygenShaderRecordSize;
+    VkDeviceAddress    missShaderBindingTableAddress;
+    VkDeviceSize       missShaderBindingTableSize;
+    VkDeviceSize       missShaderBindingTableStride;
+    VkDeviceAddress    hitShaderBindingTableAddress;
+    VkDeviceSize       hitShaderBindingTableSize;
+    VkDeviceSize       hitShaderBindingTableStride;
+    VkDeviceAddress    callableShaderBindingTableAddress;
+    VkDeviceSize       callableShaderBindingTableSize;
+    VkDeviceSize       callableShaderBindingTableStride;
+    uint32_t           width;
+    uint32_t           height;
+    uint32_t           depth;
+} VkTraceRaysIndirectCommand2KHR;
+
+typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysIndirect2KHR)(VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirect2KHR(
+    VkCommandBuffer                             commandBuffer,
+    VkDeviceAddress                             indirectDeviceAddress);
+#endif
+
+
 #define VK_KHR_portability_enumeration 1
 #define VK_KHR_PORTABILITY_ENUMERATION_SPEC_VERSION 1
 #define VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME "VK_KHR_portability_enumeration"
@@ -11904,11 +12020,7 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawMesh
 #define VK_NV_fragment_shader_barycentric 1
 #define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1
 #define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_NV_fragment_shader_barycentric"
-typedef struct VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           fragmentShaderBarycentric;
-} VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV;
+typedef VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV;
 
 
 
@@ -13195,13 +13307,14 @@ typedef VkPhysicalDevicePipelineCreation
 
 
 #define VK_NV_device_diagnostics_config 1
-#define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION 1
+#define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION 2
 #define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME "VK_NV_device_diagnostics_config"
 
 typedef enum VkDeviceDiagnosticsConfigFlagBitsNV {
     VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV = 0x00000001,
     VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV = 0x00000002,
     VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV = 0x00000004,
+    VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV = 0x00000008,
     VK_DEVICE_DIAGNOSTICS_CONFIG_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
 } VkDeviceDiagnosticsConfigFlagBitsNV;
 typedef VkFlags VkDeviceDiagnosticsConfigFlagsNV;
@@ -13257,6 +13370,17 @@ typedef struct VkGraphicsPipelineLibrary
 
 
 
+#define VK_AMD_shader_early_and_late_fragment_tests 1
+#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_SPEC_VERSION 1
+#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_EXTENSION_NAME "VK_AMD_shader_early_and_late_fragment_tests"
+typedef struct VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderEarlyAndLateFragmentTests;
+} VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD;
+
+
+
 #define VK_NV_fragment_shading_rate_enums 1
 #define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION 1
 #define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME "VK_NV_fragment_shading_rate_enums"
@@ -13453,6 +13577,92 @@ typedef VkPhysicalDeviceImageRobustnessF
 
 
 
+#define VK_EXT_image_compression_control 1
+#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION 1
+#define VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME "VK_EXT_image_compression_control"
+
+typedef enum VkImageCompressionFlagBitsEXT {
+    VK_IMAGE_COMPRESSION_DEFAULT_EXT = 0,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT = 0x00000001,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT = 0x00000002,
+    VK_IMAGE_COMPRESSION_DISABLED_EXT = 0x00000004,
+    VK_IMAGE_COMPRESSION_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkImageCompressionFlagBitsEXT;
+typedef VkFlags VkImageCompressionFlagsEXT;
+
+typedef enum VkImageCompressionFixedRateFlagBitsEXT {
+    VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT = 0,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT = 0x00000001,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT = 0x00000002,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT = 0x00000004,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT = 0x00000008,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT = 0x00000010,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT = 0x00000020,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT = 0x00000040,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT = 0x00000080,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT = 0x00000100,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT = 0x00000200,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT = 0x00000400,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT = 0x00000800,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT = 0x00001000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT = 0x00002000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT = 0x00004000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT = 0x00008000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT = 0x00010000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT = 0x00020000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT = 0x00040000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT = 0x00080000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT = 0x00100000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT = 0x00200000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT = 0x00400000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT = 0x00800000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkImageCompressionFixedRateFlagBitsEXT;
+typedef VkFlags VkImageCompressionFixedRateFlagsEXT;
+typedef struct VkPhysicalDeviceImageCompressionControlFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           imageCompressionControl;
+} VkPhysicalDeviceImageCompressionControlFeaturesEXT;
+
+typedef struct VkImageCompressionControlEXT {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    VkImageCompressionFlagsEXT              flags;
+    uint32_t                                compressionControlPlaneCount;
+    VkImageCompressionFixedRateFlagsEXT*    pFixedRateFlags;
+} VkImageCompressionControlEXT;
+
+typedef struct VkSubresourceLayout2EXT {
+    VkStructureType        sType;
+    void*                  pNext;
+    VkSubresourceLayout    subresourceLayout;
+} VkSubresourceLayout2EXT;
+
+typedef struct VkImageSubresource2EXT {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkImageSubresource    imageSubresource;
+} VkImageSubresource2EXT;
+
+typedef struct VkImageCompressionPropertiesEXT {
+    VkStructureType                        sType;
+    void*                                  pNext;
+    VkImageCompressionFlagsEXT             imageCompressionFlags;
+    VkImageCompressionFixedRateFlagsEXT    imageCompressionFixedRateFlags;
+} VkImageCompressionPropertiesEXT;
+
+typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2EXT)(VkDevice device, VkImage image, const VkImageSubresource2EXT* pSubresource, VkSubresourceLayout2EXT* pLayout);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2EXT(
+    VkDevice                                    device,
+    VkImage                                     image,
+    const VkImageSubresource2EXT*               pSubresource,
+    VkSubresourceLayout2EXT*                    pLayout);
+#endif
+
+
 #define VK_EXT_4444_formats 1
 #define VK_EXT_4444_FORMATS_SPEC_VERSION  1
 #define VK_EXT_4444_FORMATS_EXTENSION_NAME "VK_EXT_4444_formats"
@@ -13696,6 +13906,57 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemo
 #endif
 
 
+#define VK_EXT_pipeline_properties 1
+#define VK_EXT_PIPELINE_PROPERTIES_SPEC_VERSION 1
+#define VK_EXT_PIPELINE_PROPERTIES_EXTENSION_NAME "VK_EXT_pipeline_properties"
+typedef VkPipelineInfoKHR VkPipelineInfoEXT;
+
+typedef struct VkPipelinePropertiesIdentifierEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint8_t            pipelineIdentifier[VK_UUID_SIZE];
+} VkPipelinePropertiesIdentifierEXT;
+
+typedef struct VkPhysicalDevicePipelinePropertiesFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           pipelinePropertiesIdentifier;
+} VkPhysicalDevicePipelinePropertiesFeaturesEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelinePropertiesEXT)(VkDevice device, const VkPipelineInfoEXT* pPipelineInfo, VkBaseOutStructure* pPipelineProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelinePropertiesEXT(
+    VkDevice                                    device,
+    const VkPipelineInfoEXT*                    pPipelineInfo,
+    VkBaseOutStructure*                         pPipelineProperties);
+#endif
+
+
+#define VK_EXT_multisampled_render_to_single_sampled 1
+#define VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_SPEC_VERSION 1
+#define VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_EXTENSION_NAME "VK_EXT_multisampled_render_to_single_sampled"
+typedef struct VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           multisampledRenderToSingleSampled;
+} VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT;
+
+typedef struct VkSubpassResolvePerformanceQueryEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           optimal;
+} VkSubpassResolvePerformanceQueryEXT;
+
+typedef struct VkMultisampledRenderToSingleSampledInfoEXT {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkBool32                 multisampledRenderToSingleSampledEnable;
+    VkSampleCountFlagBits    rasterizationSamples;
+} VkMultisampledRenderToSingleSampledInfoEXT;
+
+
+
 #define VK_EXT_extended_dynamic_state2 1
 #define VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION 1
 #define VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME "VK_EXT_extended_dynamic_state2"
@@ -13945,6 +14206,17 @@ VKAPI_ATTR void VKAPI_CALL vkGetDescript
 #endif
 
 
+#define VK_EXT_non_seamless_cube_map 1
+#define VK_EXT_NON_SEAMLESS_CUBE_MAP_SPEC_VERSION 1
+#define VK_EXT_NON_SEAMLESS_CUBE_MAP_EXTENSION_NAME "VK_EXT_non_seamless_cube_map"
+typedef struct VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           nonSeamlessCubeMap;
+} VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT;
+
+
+
 #define VK_QCOM_fragment_density_map_offset 1
 #define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 1
 #define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME "VK_QCOM_fragment_density_map_offset"
@@ -13985,6 +14257,120 @@ typedef struct VkPhysicalDeviceLinearCol
 #define VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME "VK_GOOGLE_surfaceless_query"
 
 
+#define VK_EXT_image_compression_control_swapchain 1
+#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION 1
+#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_EXTENSION_NAME "VK_EXT_image_compression_control_swapchain"
+typedef struct VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           imageCompressionControlSwapchain;
+} VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT;
+
+
+
+#define VK_EXT_subpass_merge_feedback 1
+#define VK_EXT_SUBPASS_MERGE_FEEDBACK_SPEC_VERSION 2
+#define VK_EXT_SUBPASS_MERGE_FEEDBACK_EXTENSION_NAME "VK_EXT_subpass_merge_feedback"
+
+typedef enum VkSubpassMergeStatusEXT {
+    VK_SUBPASS_MERGE_STATUS_MERGED_EXT = 0,
+    VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT = 1,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT = 2,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT = 3,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT = 4,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT = 5,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT = 6,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT = 7,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT = 8,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT = 9,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT = 10,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT = 11,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT = 12,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT = 13,
+    VK_SUBPASS_MERGE_STATUS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkSubpassMergeStatusEXT;
+typedef struct VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           subpassMergeFeedback;
+} VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT;
+
+typedef struct VkRenderPassCreationControlEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkBool32           disallowMerging;
+} VkRenderPassCreationControlEXT;
+
+typedef struct VkRenderPassCreationFeedbackInfoEXT {
+    uint32_t    postMergeSubpassCount;
+} VkRenderPassCreationFeedbackInfoEXT;
+
+typedef struct VkRenderPassCreationFeedbackCreateInfoEXT {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    VkRenderPassCreationFeedbackInfoEXT*    pRenderPassFeedback;
+} VkRenderPassCreationFeedbackCreateInfoEXT;
+
+typedef struct VkRenderPassSubpassFeedbackInfoEXT {
+    VkSubpassMergeStatusEXT    subpassMergeStatus;
+    char                       description[VK_MAX_DESCRIPTION_SIZE];
+    uint32_t                   postMergeIndex;
+} VkRenderPassSubpassFeedbackInfoEXT;
+
+typedef struct VkRenderPassSubpassFeedbackCreateInfoEXT {
+    VkStructureType                        sType;
+    const void*                            pNext;
+    VkRenderPassSubpassFeedbackInfoEXT*    pSubpassFeedback;
+} VkRenderPassSubpassFeedbackCreateInfoEXT;
+
+
+
+#define VK_EXT_shader_module_identifier 1
+#define VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT 32U
+#define VK_EXT_SHADER_MODULE_IDENTIFIER_SPEC_VERSION 1
+#define VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME "VK_EXT_shader_module_identifier"
+typedef struct VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderModuleIdentifier;
+} VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT;
+
+typedef struct VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint8_t            shaderModuleIdentifierAlgorithmUUID[VK_UUID_SIZE];
+} VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT;
+
+typedef struct VkPipelineShaderStageModuleIdentifierCreateInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           identifierSize;
+    const uint8_t*     pIdentifier;
+} VkPipelineShaderStageModuleIdentifierCreateInfoEXT;
+
+typedef struct VkShaderModuleIdentifierEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           identifierSize;
+    uint8_t            identifier[VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT];
+} VkShaderModuleIdentifierEXT;
+
+typedef void (VKAPI_PTR *PFN_vkGetShaderModuleIdentifierEXT)(VkDevice device, VkShaderModule shaderModule, VkShaderModuleIdentifierEXT* pIdentifier);
+typedef void (VKAPI_PTR *PFN_vkGetShaderModuleCreateInfoIdentifierEXT)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModuleIdentifierEXT* pIdentifier);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleIdentifierEXT(
+    VkDevice                                    device,
+    VkShaderModule                              shaderModule,
+    VkShaderModuleIdentifierEXT*                pIdentifier);
+
+VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleCreateInfoIdentifierEXT(
+    VkDevice                                    device,
+    const VkShaderModuleCreateInfo*             pCreateInfo,
+    VkShaderModuleIdentifierEXT*                pIdentifier);
+#endif
+
+
 #define VK_KHR_acceleration_structure 1
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR)
 #define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 13
diff -pruN 22.1.3-1/include/vulkan/vulkan_metal.h 22.2.0~rc1-1/include/vulkan/vulkan_metal.h
--- 22.1.3-1/include/vulkan/vulkan_metal.h	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/include/vulkan/vulkan_metal.h	2022-08-03 18:11:03.000000000 +0000
@@ -20,7 +20,6 @@ extern "C" {
 
 
 #define VK_EXT_metal_surface 1
-
 #ifdef __OBJC__
 @class CAMetalLayer;
 #else
@@ -47,6 +46,146 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateM
     VkSurfaceKHR*                               pSurface);
 #endif
 
+
+#define VK_EXT_metal_objects 1
+#ifdef __OBJC__
+@protocol MTLDevice;
+typedef id<MTLDevice> MTLDevice_id;
+#else
+typedef void* MTLDevice_id;
+#endif
+
+#ifdef __OBJC__
+@protocol MTLCommandQueue;
+typedef id<MTLCommandQueue> MTLCommandQueue_id;
+#else
+typedef void* MTLCommandQueue_id;
+#endif
+
+#ifdef __OBJC__
+@protocol MTLBuffer;
+typedef id<MTLBuffer> MTLBuffer_id;
+#else
+typedef void* MTLBuffer_id;
+#endif
+
+#ifdef __OBJC__
+@protocol MTLTexture;
+typedef id<MTLTexture> MTLTexture_id;
+#else
+typedef void* MTLTexture_id;
+#endif
+
+typedef struct __IOSurface* IOSurfaceRef;
+#ifdef __OBJC__
+@protocol MTLSharedEvent;
+typedef id<MTLSharedEvent> MTLSharedEvent_id;
+#else
+typedef void* MTLSharedEvent_id;
+#endif
+
+#define VK_EXT_METAL_OBJECTS_SPEC_VERSION 1
+#define VK_EXT_METAL_OBJECTS_EXTENSION_NAME "VK_EXT_metal_objects"
+
+typedef enum VkExportMetalObjectTypeFlagBitsEXT {
+    VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT = 0x00000001,
+    VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT = 0x00000002,
+    VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT = 0x00000004,
+    VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT = 0x00000008,
+    VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT = 0x00000010,
+    VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT = 0x00000020,
+    VK_EXPORT_METAL_OBJECT_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkExportMetalObjectTypeFlagBitsEXT;
+typedef VkFlags VkExportMetalObjectTypeFlagsEXT;
+typedef struct VkExportMetalObjectCreateInfoEXT {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExportMetalObjectTypeFlagBitsEXT    exportObjectType;
+} VkExportMetalObjectCreateInfoEXT;
+
+typedef struct VkExportMetalObjectsInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+} VkExportMetalObjectsInfoEXT;
+
+typedef struct VkExportMetalDeviceInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    MTLDevice_id       mtlDevice;
+} VkExportMetalDeviceInfoEXT;
+
+typedef struct VkExportMetalCommandQueueInfoEXT {
+    VkStructureType       sType;
+    const void*           pNext;
+    VkQueue               queue;
+    MTLCommandQueue_id    mtlCommandQueue;
+} VkExportMetalCommandQueueInfoEXT;
+
+typedef struct VkExportMetalBufferInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceMemory     memory;
+    MTLBuffer_id       mtlBuffer;
+} VkExportMetalBufferInfoEXT;
+
+typedef struct VkImportMetalBufferInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    MTLBuffer_id       mtlBuffer;
+} VkImportMetalBufferInfoEXT;
+
+typedef struct VkExportMetalTextureInfoEXT {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkImage                  image;
+    VkImageView              imageView;
+    VkBufferView             bufferView;
+    VkImageAspectFlagBits    plane;
+    MTLTexture_id            mtlTexture;
+} VkExportMetalTextureInfoEXT;
+
+typedef struct VkImportMetalTextureInfoEXT {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkImageAspectFlagBits    plane;
+    MTLTexture_id            mtlTexture;
+} VkImportMetalTextureInfoEXT;
+
+typedef struct VkExportMetalIOSurfaceInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+    IOSurfaceRef       ioSurface;
+} VkExportMetalIOSurfaceInfoEXT;
+
+typedef struct VkImportMetalIOSurfaceInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    IOSurfaceRef       ioSurface;
+} VkImportMetalIOSurfaceInfoEXT;
+
+typedef struct VkExportMetalSharedEventInfoEXT {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkSemaphore          semaphore;
+    VkEvent              event;
+    MTLSharedEvent_id    mtlSharedEvent;
+} VkExportMetalSharedEventInfoEXT;
+
+typedef struct VkImportMetalSharedEventInfoEXT {
+    VkStructureType      sType;
+    const void*          pNext;
+    MTLSharedEvent_id    mtlSharedEvent;
+} VkImportMetalSharedEventInfoEXT;
+
+typedef void (VKAPI_PTR *PFN_vkExportMetalObjectsEXT)(VkDevice device, VkExportMetalObjectsInfoEXT* pMetalObjectsInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkExportMetalObjectsEXT(
+    VkDevice                                    device,
+    VkExportMetalObjectsInfoEXT*                pMetalObjectsInfo);
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff -pruN 22.1.3-1/.mailmap 22.2.0~rc1-1/.mailmap
--- 22.1.3-1/.mailmap	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.mailmap	2022-08-03 18:11:03.000000000 +0000
@@ -65,7 +65,7 @@ Anuj Phogat <anuj.phogat@gmail.com> <anu
 
 Arthur Huillet <arthur.huillet@free.fr> Arthur HUILLET <arthur.huillet@free.fr>
 
-Axel Davy <axel.davy@ens.fr> <davyaxel0@gmail.com>
+Axel Davy <davyaxel0@gmail.com> <axel.davy@ens.fr>
 
 Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> <basni@chromium.org>
 
@@ -220,8 +220,9 @@ Emmanuel Vadot <manu@FreeBSD.org> Emmanu
 Emma Anholt <emma@anholt.net> <anholt@FreeBSD.org>
 Emma Anholt <emma@anholt.net> <eric@anholt.net>
 
-Eric Engestrom <eric@engestrom.ch> <eric.engestrom@imgtec.com>
-Eric Engestrom <eric@engestrom.ch> <eric.engestrom@intel.com>
+Eric Engestrom <eric@igalia.com> <eric@engestrom.ch>
+Eric Engestrom <eric@igalia.com> <eric.engestrom@imgtec.com>
+Eric Engestrom <eric@igalia.com> <eric.engestrom@intel.com>
 
 Erik Faye-Lund <kusmabite@gmail.com> <erik.faye-lund@collabora.com>
 
diff -pruN 22.1.3-1/meson.build 22.2.0~rc1-1/meson.build
--- 22.1.3-1/meson.build	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/meson.build	2022-08-03 18:11:03.000000000 +0000
@@ -320,6 +320,11 @@ if with_vulkan_beta
   pre_args += '-DVK_ENABLE_BETA_EXTENSIONS'
 endif
 
+_codecs = get_option('video-codecs')
+foreach c : ['vc1dec', 'h264dec', 'h264enc', 'h265dec', 'h265enc']
+   pre_args += '-DVIDEO_CODEC_@0@=@1@'.format(c.to_upper(), _codecs.contains(c).to_int())
+endforeach
+
 _platforms = get_option('platforms')
 if _platforms.contains('auto')
   if system_has_kms_drm
@@ -499,9 +504,6 @@ foreach platform : _platforms
   pre_args += '-DHAVE_@0@_PLATFORM'.format(platform.to_upper())
 endforeach
 
-use_elf_tls = true
-pre_args += '-DUSE_ELF_TLS'
-
 if with_platform_android and get_option('platform-sdk-version') >= 29
   # By default the NDK compiler, at least, emits emutls references instead of
   # ELF TLS, even when building targeting newer API levels.  Make it actually do
@@ -545,14 +547,6 @@ if not have_mtls_dialect
   endif
 endif
 
-if with_platform_windows and with_shared_glapi
-  # Windows doesn't support DLL exports/imports being TLS variables. When using shared
-  # glapi, libglapi.dll hosts the TLS, but other DLLs need to use them. Instead of falling
-  # all the way back to using globals and manual per-thread data, keep using TLS but just
-  # put accesses to it behind a function so the variable doesn't need to be exported.
-  pre_args += '-DUSE_TLS_BEHIND_FUNCTIONS'
-endif
-
 if with_glx != 'disabled'
   if not (with_platform_x11 and with_any_opengl)
     error('Cannot build GLX support without X11 platform support and at least one OpenGL API')
@@ -620,6 +614,25 @@ if with_gallium_kmsro and (with_platform
   error('kmsro requires dri3 for X11 support')
 endif
 
+dep_dxheaders = null_dep
+if with_gallium_d3d12 or with_microsoft_clc or with_microsoft_vk
+  dep_dxheaders = dependency('directx-headers', required : false)
+  if not dep_dxheaders.found()
+    dep_dxheaders = dependency('DirectX-Headers',
+      version : '>= 1.602.0',
+      fallback : ['DirectX-Headers', 'dep_dxheaders'],
+      required : with_gallium_d3d12 or with_microsoft_vk
+    )
+  endif
+endif
+
+_with_gallium_d3d12_video = get_option('gallium-d3d12-video')
+with_gallium_d3d12_video = false
+if with_gallium_d3d12 and not _with_gallium_d3d12_video.disabled()
+  with_gallium_d3d12_video = true
+  pre_args += '-DHAVE_GALLIUM_D3D12_VIDEO'
+endif
+
 _vdpau = get_option('gallium-vdpau')
 if _vdpau == 'true'
   _vdpau = 'enabled'
@@ -641,9 +654,9 @@ elif not with_platform_x11
     _vdpau = 'disabled'
   endif
 elif not (with_gallium_r300 or with_gallium_r600 or with_gallium_radeonsi or
-          with_gallium_nouveau)
+          with_gallium_nouveau or with_gallium_d3d12_video)
   if _vdpau == 'enabled'
-    error('VDPAU state tracker requires at least one of the following gallium drivers: r300, r600, radeonsi, nouveau.')
+    error('VDPAU state tracker requires at least one of the following gallium drivers: r300, r600, radeonsi, nouveau, d3d12 (with option gallium-d3d12-video).')
   else
     _vdpau = 'disabled'
   endif
@@ -666,22 +679,13 @@ if vdpau_drivers_path == ''
   vdpau_drivers_path = join_paths(get_option('libdir'), 'vdpau')
 endif
 
-if with_gallium_zink
-  dep_vulkan = dependency('vulkan')
-endif
-
-dep_dxheaders = null_dep
-if with_gallium_d3d12 or with_microsoft_clc or with_microsoft_vk
-  dep_dxheaders = dependency('directx-headers', required : false)
-  if not dep_dxheaders.found()
-    dep_dxheaders = dependency('DirectX-Headers', fallback : ['DirectX-Headers', 'dep_dxheaders'],
-      required : with_gallium_d3d12 or with_microsoft_vk
-    )
-  endif
-endif
-
-if with_vulkan_overlay_layer or with_aco_tests
+if with_vulkan_overlay_layer or with_aco_tests or with_amd_vk
   prog_glslang = find_program('glslangValidator')
+  if run_command(prog_glslang, [ '--quiet', '--version' ], check : false).returncode() == 0
+    glslang_quiet = ['--quiet']
+  else
+    glslang_quiet = []
+  endif
 endif
 
 _xvmc = get_option('gallium-xvmc')
@@ -784,10 +788,10 @@ omx_drivers_path = get_option('omx-libs-
 if with_gallium_omx != 'disabled'
   # Figure out where to put the omx driver.
   # FIXME: this could all be vastly simplified by adding a 'defined_variable'
-  # argument to meson's get_pkgconfig_variable method.
+  # argument to meson's get_variable method.
   if omx_drivers_path == ''
-    _omx_libdir = dep_omx.get_pkgconfig_variable('libdir')
-    _omx_drivers_dir = dep_omx.get_pkgconfig_variable('pluginsdir')
+    _omx_libdir = dep_omx.get_variable(pkgconfig : 'libdir')
+    _omx_drivers_dir = dep_omx.get_variable(pkgconfig : 'pluginsdir')
     if _omx_libdir == get_option('libdir')
       omx_drivers_path = _omx_drivers_dir
     else
@@ -819,9 +823,9 @@ if not system_has_kms_drm
   else
     _va = 'disabled'
   endif
-elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau)
+elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau or with_gallium_d3d12_video)
   if _va == 'enabled'
-    error('VA state tracker requires at least one of the following gallium drivers: r600, radeonsi, nouveau.')
+    error('VA state tracker requires at least one of the following gallium drivers: r600, radeonsi, nouveau, d3d12 (with option gallium-d3d12-video).')
   else
     _va = 'disabled'
   endif
@@ -1082,8 +1086,12 @@ if cc.compiles('__uint128_t foo(void) {
   pre_args += '-DHAVE_UINT128'
 endif
 
+if cc.has_function('reallocarray')
+   pre_args += '-DHAVE_REALLOCARRAY'
+endif
+
 # TODO: this is very incomplete
-if ['linux', 'cygwin', 'gnu', 'freebsd', 'gnu/kfreebsd', 'haiku'].contains(host_machine.system())
+if ['linux', 'cygwin', 'gnu', 'freebsd', 'gnu/kfreebsd', 'haiku', 'android'].contains(host_machine.system())
   pre_args += '-D_GNU_SOURCE'
 elif host_machine.system() == 'sunos'
   pre_args += '-D__EXTENSIONS__'
@@ -1093,7 +1101,7 @@ elif host_machine.system() == 'windows'
     '-DPIPE_SUBSYSTEM_WINDOWS_USER',
     '-D_USE_MATH_DEFINES',  # XXX: scons didn't use this for mingw
   ]
-  if cc.get_id() == 'msvc'
+  if cc.get_argument_syntax() == 'msvc'
     pre_args += [
       '-DVC_EXTRALEAN',
       '-D_CRT_SECURE_NO_WARNINGS',
@@ -1126,7 +1134,7 @@ endif
 c_msvc_compat_args = []
 no_override_init_args = []
 cpp_msvc_compat_args = []
-if cc.get_id() == 'msvc'
+if cc.get_argument_syntax() == 'msvc'
   _trial = [
     '/wd4018',  # signed/unsigned mismatch
     '/wd4056',  # overflow in floating-point constant arithmetic
@@ -1167,6 +1175,7 @@ else
     '-fno-common',
     # Clang
     '-Wno-microsoft-enum-value',
+    '-Wno-unused-function',
   ]
   _trial_cpp = [
     '-Werror=return-type',
@@ -1187,7 +1196,7 @@ else
   ]
 
   # MinGW chokes on format specifiers and I can't get it all working
-  if not (cc.get_id() == 'gcc' and host_machine.system() == 'windows')
+  if not (cc.get_argument_syntax() == 'gcc' and host_machine.system() == 'windows')
     _trial_c += ['-Werror=format', '-Wformat-security']
     _trial_cpp += ['-Werror=format', '-Wformat-security']
   endif
@@ -1206,6 +1215,14 @@ else
     _trial_cpp += ['-ffunction-sections', '-fdata-sections']
   endif
 
+  # Variables that are only used for assertions are considered unused in release
+  # builds. Don't treat this as an error, since we build with -Werror even for
+  # release in CI.
+  if get_option('buildtype') == 'release'
+    _trial_c += ['-Wno-unused-variable', '-Wno-unused-but-set-variable']
+    _trial_cpp += ['-Wno-unused-variable', '-Wno-unused-but-set-variable']
+  endif
+
   c_args += cc.get_supported_arguments(_trial_c)
   cpp_args += cpp.get_supported_arguments(_trial_cpp)
 
@@ -1216,14 +1233,14 @@ else
   # Check for C and C++ arguments for MSVC compatibility. These are only used
   # in parts of the mesa code base that need to compile with MSVC, mainly
   # common code
-  _trial_msvc = ['-Werror=pointer-arith', '-Werror=gnu-empty-initializer']
+  _trial_msvc = ['-Werror=pointer-arith', '-Werror=vla', '-Werror=gnu-empty-initializer']
   c_msvc_compat_args += cc.get_supported_arguments(_trial_msvc)
   cpp_msvc_compat_args += cpp.get_supported_arguments(_trial_msvc)
 endif
 
 # set linker arguments
 if host_machine.system() == 'windows'
-  if cc.get_id() == 'msvc'
+  if cc.get_argument_syntax() == 'msvc'
     add_project_link_arguments(
       '/fixed:no',
       '/dynamicbase',
@@ -1258,7 +1275,7 @@ if host_machine.system() == 'windows'
   endif
 endif
 
-if host_machine.cpu_family().startswith('x86') and cc.get_id() != 'msvc'
+if host_machine.cpu_family().startswith('x86') and cc.get_argument_syntax() != 'msvc'
   pre_args += '-DUSE_SSE41'
   with_sse41 = true
   sse41_args = ['-msse4.1']
@@ -1410,13 +1427,29 @@ foreach h : ['xlocale.h', 'linux/futex.h
   endif
 endforeach
 
-foreach f : ['strtof', 'mkostemp', 'timespec_get', 'memfd_create', 'random_r',
-             'flock', 'strtok_r', 'getrandom', 'qsort_r', 'qsort_s']
-  if cc.has_function(f)
+functions_to_detect = {
+  'strtof': '',
+  'mkostemp': '',
+  'timespec_get': '#include <time.h>',
+  'memfd_create': '',
+  'random_r': '',
+  'flock': '',
+  'strtok_r': '',
+  'getrandom': '',
+  'qsort_r': '',
+  'qsort_s': '',
+}
+
+foreach f, prefix: functions_to_detect
+  if cc.has_function(f, prefix: prefix)
     pre_args += '-DHAVE_@0@'.format(f.to_upper())
   endif
 endforeach
 
+if cc.has_header_symbol('time.h', 'struct timespec')
+   pre_args += '-DHAVE_STRUCT_TIMESPEC'
+endif
+
 if cc.has_header_symbol('errno.h', 'program_invocation_name',
                         args : '-D_GNU_SOURCE')
    pre_args += '-DHAVE_PROGRAM_INVOCATION_NAME'
@@ -1424,6 +1457,11 @@ elif with_tools.contains('intel')
   error('Intel tools require the program_invocation_name variable')
 endif
 
+if cc.has_header_symbol('math.h', 'issignaling',
+                        args : '-D_GNU_SOURCE')
+   pre_args += '-DHAVE_ISSIGNALING'
+endif
+
 # MinGW provides a __builtin_posix_memalign function, but not a posix_memalign.
 # This means that this check will succeed, but then compilation will later
 # fail. MSVC doesn't have this function at all, so only check for it on
@@ -1490,12 +1528,14 @@ ld_args_build_id = cc.get_supported_link
 
 # check for dl support
 dep_dl = null_dep
-if not cc.has_function('dlopen')
-  dep_dl = cc.find_library('dl', required : host_machine.system() != 'windows')
-endif
-if cc.has_function('dladdr', dependencies : dep_dl)
-  # This is really only required for util/disk_cache.h
-  pre_args += '-DHAVE_DLADDR'
+if host_machine.system() != 'windows'
+  if not cc.has_function('dlopen')
+    dep_dl = cc.find_library('dl', required : true)
+  endif
+  if cc.has_function('dladdr', dependencies : dep_dl)
+    # This is really only required for util/disk_cache.h
+    pre_args += '-DHAVE_DLADDR'
+  endif
 endif
 
 if cc.has_function('dl_iterate_phdr')
@@ -1578,6 +1618,15 @@ if with_platform_haiku
   dep_network = cc.find_library('network')
 endif
 
+dep_futex = null_dep
+if host_machine.system() == 'windows'
+  if (get_option('min-windows-version') < 8)
+    dep_futex = declare_dependency(compile_args : ['-DWINDOWS_NO_FUTEX'])
+  else
+    dep_futex = cc.find_library('synchronization', required : true)
+  endif
+endif
+
 # Check for libdrm. Various drivers have different libdrm version requirements,
 # but we always want to use the same version for all libdrm modules. That means
 # even if driver foo requires 2.4.0 and driver bar requires 2.4.3, if foo and
@@ -1637,6 +1686,16 @@ if dep_libdrm.found()
   endif
 endif
 
+if with_dri
+  pre_args += '-DHAVE_DRI'
+endif
+if with_dri2
+  pre_args += '-DHAVE_DRI2'
+endif
+if with_gallium_drisw_kms
+  pre_args += '-DHAVE_DRISW_KMS'
+endif
+
 dep_libudev = dependency('libudev', required : false)
 if dep_libudev.found()
   pre_args += '-DHAVE_LIBUDEV'
@@ -1737,10 +1796,10 @@ if with_llvm
     error('Lavapipe requires LLVM draw support.')
   endif
 
-  if cc.get_id() != 'msvc'
+  if host_machine.system() != 'windows'
     # LLVM can be built without rtti, turning off rtti changes the ABI of C++
     # programs, so we need to build all C++ code in mesa without rtti as well to
-    # ensure that linking works. Note that MSVC does handle mismatching RTTI
+    # ensure that linking works. Note that Win32 compilers does handle mismatching RTTI
     # without issues, so only apply this for other compilers.
     if dep_llvm.type_name() == 'internal'
       _llvm_rtti = subproject('llvm').get_variable('has_rtti', true)
@@ -1755,7 +1814,9 @@ if with_llvm
         error('LLVM was built without RTTI, so Mesa must also disable RTTI. Use an LLVM built with LLVM_ENABLE_RTTI or add cpp_rtti=false.')
       endif
     endif
-  else
+  endif
+
+  if cc.get_argument_syntax() == 'msvc'
     # Suppress "/DELAYLOAD:ole32.dll/shell32.dll ignored" warnings that LLVM adds
     add_project_link_arguments(
       '/ignore:4199',
@@ -1887,22 +1948,19 @@ if build_machine.system() == 'windows'
     # windows compatibility (uses <io.h> instead of <unistd.h> and _isatty,
     # _fileno functions)
     prog_flex = [prog_flex, '--wincompat']
-    if get_option('c_std') == 'c99'
-      prog_flex += '-D__STDC_VERSION__=199901'
-    endif
   else
     prog_flex = [find_program('flex', 'lex', required : with_any_opengl)]
   endif
   # Force flex to use const keyword in prototypes, as relies on __cplusplus or
-  # __STDC__ macro to determine whether it's safe to use const keyword, but
-  # MSVC only defines __STDC_VERSION__ for C11/C17.
+  # __STDC__ macro to determine whether it's safe to use const keyword
   prog_flex += '-DYY_USE_CONST='
 
   prog_flex_cpp = prog_flex
-  if get_option('c_std') != 'c99'
-    # Convince win_flex to use <inttypes.h> for C++ files
-    prog_flex_cpp += '-D__STDC_VERSION__=199901'
-  endif
+  # Convince win_flex to use <inttypes.h> for C++ files
+  # Note that we are using a C99 version here rather than C11,
+  # because using a C11 version can cause the MSVC CRT headers to define
+  # static_assert to _Static_assert, which breaks other parts of the CRT
+  prog_flex_cpp += '-D__STDC_VERSION__=199901'
 
   prog_bison = find_program('win_bison', required : false)
   if not prog_bison.found()
@@ -1971,11 +2029,8 @@ if with_osmesa
     osmesa_lib_name = 'OSMesa'
   endif
   osmesa_bits = get_option('osmesa-bits')
-  if osmesa_bits != '8'
-    if with_dri or with_glx != 'disabled'
-      error('OSMesa bits must be 8 if building glx or dri based drivers')
-    endif
-    osmesa_lib_name = osmesa_lib_name + osmesa_bits
+  if osmesa_bits != 'unspecified'
+    warning('osmesa-bits option is deprecated and have no effect, please remove it.')
   endif
 endif
 
@@ -1983,7 +2038,7 @@ endif
 
 if with_platform_wayland
   dep_wl_scanner = dependency('wayland-scanner', native: true)
-  prog_wl_scanner = find_program(dep_wl_scanner.get_pkgconfig_variable('wayland_scanner'))
+  prog_wl_scanner = find_program(dep_wl_scanner.get_variable(pkgconfig : 'wayland_scanner'))
   if dep_wl_scanner.version().version_compare('>= 1.15')
     wl_scanner_arg = 'private-code'
   else
@@ -1997,7 +2052,7 @@ if with_platform_wayland
     dep_wayland_egl_headers = dep_wayland_egl.partial_dependency(compile_args : true)
   endif
   wayland_dmabuf_xml = join_paths(
-    dep_wl_protocols.get_pkgconfig_variable('pkgdatadir'), 'unstable',
+    dep_wl_protocols.get_variable(pkgconfig : 'pkgdatadir'), 'unstable',
     'linux-dmabuf', 'linux-dmabuf-unstable-v1.xml'
   )
   pre_args += '-DWL_HIDE_DEPRECATED'
@@ -2261,6 +2316,9 @@ if with_gbm
 endif
 
 lines += ''
+lines += 'Video Codecs: ' + ' '.join(_codecs)
+lines += ''
+
 if with_any_vk
   lines += 'Vulkan drivers:  ' + ' '.join(_vulkan_drivers)
   lines += 'Vulkan ICD dir:  ' + with_vulkan_icd_dir
diff -pruN 22.1.3-1/meson_options.txt 22.2.0~rc1-1/meson_options.txt
--- 22.1.3-1/meson_options.txt	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/meson_options.txt	2022-08-03 18:11:03.000000000 +0000
@@ -357,7 +357,7 @@ option(
 option(
   'draw-use-llvm',
   type : 'boolean',
-  value : 'true',
+  value : true,
   description : 'Whether to use LLVM for the Gallium draw module, if LLVM is included.'
 )
 option(
@@ -420,9 +420,9 @@ option(
 option(
   'osmesa-bits',
   type : 'combo',
-  value : '8',
-  choices : ['8', '16', '32'],
-  description : 'Number of channel bits for OSMesa.'
+  value : 'unspecified',
+  choices : ['unspecified', '8', '16', '32'],
+  description : 'DEPRECATED: Number of channel bits for OSMesa.'
 )
 
 option(
@@ -527,3 +527,32 @@ option(
   value : 'disabled',
   description : 'Build the intel-clc compiler (required for ray queries).'
 )
+option(
+  'video-codecs',
+  type : 'array',
+  value : [],
+  choices: [
+    'vc1dec', 'h264dec', 'h264enc', 'h265dec', 'h265enc'
+  ],
+  description : 'List of patent encumbered codecs to build support for. Distros might want to consult their legal department before enabling these. This is used for all video APIs (vaapi, vdpau, vulkan). Non-patent encumbered codecs will be enabled by default.'
+)
+option(
+  'gallium-d3d12-video',
+  type : 'feature',
+  value : 'auto',
+  description : 'build gallium d3d12 with video support.',
+)
+option(
+  'radv-build-id',
+  type : 'string',
+  value : '',
+  description : 'Override build id for shader cache keys (hex string). Can be extracted with readelf -x .note.gnu.build-id'
+)
+option(
+  'min-windows-version',
+  type : 'integer',
+  min : 7,
+  max : 11,
+  value : 8,
+  description : 'Minimum Windows version to support. Defaults to Windows 8.'
+)
diff -pruN 22.1.3-1/.pick_status.json 22.2.0~rc1-1/.pick_status.json
--- 22.1.3-1/.pick_status.json	2022-06-29 16:40:05.000000000 +0000
+++ 22.2.0~rc1-1/.pick_status.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,32717 +0,0 @@
-[
-    {
-        "sha": "58313f3257b338928a8ae4ea375eedb50accf2bb",
-        "description": "etnaviv: switch depth mode when linear PE is used",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "53445284a427f79e94607dc4ca2f8bd8ac293356"
-    },
-    {
-        "sha": "4b5f0d98fd57cbcd253b85291b7491aa5754a2eb",
-        "description": "tu: Overhaul LRZ, implement on-GPU dir tracking and LRZ fast-clear",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "70f1d70ddd785361d989fcc565a675df173a1d82",
-        "description": "freedreno: document GRAS_UNKNOWN_810A",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1cd91fdec389abb5d897a5eeaade2a26d18baa76",
-        "description": "freedreno: Document a650-specific CP_REG_WRITE flag",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5592c366cf1aa09dcc84797a37d62855ad6591e3",
-        "description": "freedreno: Document rest of GRAS_LRZ_CNTL, clarify UNK_25 event",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "edc7f40a83169c16dfd4612f84515ec4c0c9f6f6",
-        "description": "meson: drop dladdr check on win32",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "2dcbe87271bea04d4572063f28af33bca32e12f1"
-    },
-    {
-        "sha": "3129520a73336d72284cd98412bb8d77ed8415de",
-        "description": "ci/dzn: Add pipeline cache tests to the include list",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "91f1bd8f81dff866c769ea3bcc58450b9293b1a4",
-        "description": "dzn: Cache pipeline info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d8b686783ef9605195c8d85df7f6fa6176e8602b",
-        "description": "dzn: Cache DXIL shaders",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "52e2ca084af74ec3d00fa1e4d9546093289071a0",
-        "description": "dzn: Caculate a binding translation hash",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "276c73580d20e277e17a0fbac061bc4aca3152b5",
-        "description": "dzn: Cache NIR shaders",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "66764904b3a4c17f5c904c3986fccd5b9265a5d3",
-        "description": "dzn: Move the compute shader compilation logic to a sub-function",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6236d1eead45825de9c21d9ec3a5af2e13e1b56c",
-        "description": "dzn: Drop unneeded goto statement in dzn_compute_pipeline_create()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d4630b703d23821ac57e52e9b9b58307029aa404",
-        "description": "dzn: Add a generic cached blob wrapper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "06f37025f14a3f4b3a4effb45c22cb343ed32e2a",
-        "description": "dzn: Hash pipeline layout stages",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "391d3251fa2e17dc7dd8eef3069337e71b9cf1af",
-        "description": "dzn: Don't delegate binding translation to dxil_spirv_nir_passes()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c7b43711f386b732e35d4754e47399be0c3a2d71",
-        "description": "dzn: Save a few indentation levels in graphics_pipeline_compile_shaders()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "84770a90bb3d32a9c2f71cd299edeec1cf702f37",
-        "description": "dzn: Use vk_to_mesa_shader_stage()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f4a96675ec41185c90521b1e3e1d573361160b6c",
-        "description": "dzn: Fix potential nir_shader leak",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "af83f104da6d57c140752b7c1ddb790cf9e668e5",
-        "description": "dzn: Let dzn_pipeline_init() initialize the root signature in the stream",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "301fb478feeacc0303832dcd0f050391fbf64287",
-        "description": "dzn: Drop unused allocator passed to dzn_graphics_pipeline_create()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b886619313f46fe10ecf4ba26c9b1d4d603d31f7",
-        "description": "dzn: Drop useless while(link_mask != 0)",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "31357f3cf4fb47f87caf21a60caf3167cefe613f",
-        "description": "dzn: Pass the maximum stream size to d3d12_pipeline_state_stream_new_desc()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e4e531732b5f6417ae89e4ef099ff5c0ee47ad43",
-        "description": "dzn: Use d3d12_compute_pipeline_state_stream_new_desc() in the compute path",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "9feda65a83c7916562fa55596c8384c4b65fd6b3"
-    },
-    {
-        "sha": "d3e6ef195a2e55ee2f765153a210c7179b9476ee",
-        "description": "dzn: Fix assertion in d3d12_pipeline_state_stream_new_desc()",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "9feda65a83c7916562fa55596c8384c4b65fd6b3"
-    },
-    {
-        "sha": "26ca9a43441cb69f6934d62fa009317e7e902066",
-        "description": "dzn: Add missing D3D12_CACHED_PIPELINE_STATE to MAX_COMPUTE_PIPELINE_STATE_STREAM_SIZE",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "9feda65a83c7916562fa55596c8384c4b65fd6b3"
-    },
-    {
-        "sha": "c66caa1d589e052b5a472fd97ef11503a1e22f67",
-        "description": "dzn: Drop dzn_pipeline_cache.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b59abbe3d57488e7d86d6c71631647f073839957",
-        "description": "dzn: Initialize UUIDs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "be019e69e2c4df7ab2db17a0320b00cf0c6518d8",
-        "description": "dzn: Fix indentation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "aab5d176b83fe8d5bbf5502c38c4aa0a8558a22f",
-        "description": "pytracediff: implement pager ('less') invocation internally",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "95fc0e1b7c5f8c8df7b4b3c719597e595d331725",
-        "description": "pytracediff: change how 'junk' calls are handled",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cf4d1c1fed71d9d59e5432163d242c347d907385",
-        "description": "pytracediff: make -M (\"method only\") option print arguments for differing calls",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8819d372e5df93389bd72d2281a9119e8d402366",
-        "description": "pytracediff: add per-line difference highlighting for blocks",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3421d9ecade49ac892776f366853c5d0600855f6",
-        "description": "gallium/tools: reimplement tracediff completely in Python",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6f70a1cd140fbf7752678d1bfc5fa972da4120bf",
-        "description": "gallium/tools: add option for ignoring junk calls in trace dumper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5f00b54873b50113448bf2bffd9208eaf378a671",
-        "description": "trace: Allow to control nir dumping via an environment variable.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c5ddb959532309d0a23dc018e6205c5b3f08173f",
-        "description": "trace: Bring state dump up to speed.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0296050c0eaaccdcea3cc03cd16a1a5da89dfaf1",
-        "description": "trace: Parse character data more efficiently.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "69fbcdb568ab029ae10c10b919ad9b45f0a1f245",
-        "description": "trace: Dump NIR.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "382c6d395c94f64758e51b287e684fe24a1dfb0a",
-        "description": "lavapipe: Prevent mapping buffers beyond their size.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b78caa7f7d65050c1f2e9d05652a446868a1565d",
-        "description": "trace: Fix framebuffer state serialization.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0371b1707b2ff1b5c60fa2248a1eeea79d977544",
-        "description": "dzn: Hook-up device-lost detection",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6a491d16284ca7387eb47e41f53eccba2c14a760",
-        "description": "radv: Use vk_pipeline_hash_shader_stage()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d2bb3b11e5fc044b4bdf4b10501fa88638df9ad6",
-        "description": "radv: Kill unused fs_m local var in radv_create_shaders()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "02384ca13cde7d2b20423054d88f796643de065a",
-        "description": "tu: Use vk_pipeline_hash_shader_stage()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a8cd159538b2087fc4fd8894a4d415722d0d55fa",
-        "description": "v3dv: Use vk_pipeline_hash_shader_stage()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "863b6317a3ac0b398ea7231a2bd87fe1473e1362",
-        "description": "v3dv: Fix nir_shader leaks in v3dv_meta_{clear,copy}()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "17dff363ce4cad7b936f64f843500d94803185d7",
-        "description": "anv: Use vk_pipeline_hash_shader_stage()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "542538cf0212c4e24db01cda59b9ece55f51615e",
-        "description": "vulkan: Add a vk_pipeline_hash_shader_stage() helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5e5b54c9d1c3e724507f0f2fbd7d5e6381c1225e",
-        "description": "nir/serialize: Silence integer-overflow false positive",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "370ca07482a29847b1de60bd71963b307de4f48b",
-        "description": "nir/serialize: Support texop >= 16",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "603e6ba972dae06fe0a198fc00b6aa4a0a33d479"
-    },
-    {
-        "sha": "cfccd93efc95277a739a202a036cbea36fde85f4",
-        "description": "broadcom/compiler: don't predicate postponed spills",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "98420408d0bd0d339c723d6de544a668b2b8f9b6",
-        "description": "broadcom/compiler: fix postponed TMU spills with multiple writes",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0bc65b1d81f1064a1ef14a6afbeab2dc46e2329b",
-        "description": "v3dv: fix leak",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1951065a1613bc64351e6ff461677fe9f301b772",
-        "description": "zink: delete zink_resource_object::dt_has_data",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "314a24998af914f13df4bcbff30a4d5b793a3aba",
-        "description": "zink: use kopper_displaytarget type directly",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6786e508a292fb184affbe5968ae890c7e00636b",
-        "description": "zink: acquire swapchain images on image map",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b400f1defc83be535a8f45998e465c9745d606ea",
-        "description": "zink: no-op pixmap frontbuffer flush calls",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5c5ab9e173cb0fafca4f03c6f9a3a657f6f59a4f",
-        "description": "zink: delete zink_resource_object::acquire",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8ab8b729d6576772c1ea49c9351bcf696f498ca2",
-        "description": "zink: ensure pending present flushes are handled during frontbuffer flush",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fbaca89cd9ed4ca774938372752e71507126a66b",
-        "description": "zink: flag batch as having work during frontbuffer flush",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8606e5cff8f28e10eef8aa9a5916777eaf7891f9",
-        "description": "zink: improve no-op acquire detection",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "49d9a3605bc5b7b69a4549b4b6c57620a621d75d",
-        "description": "zink: remove unnecessary code in kopper readback acquire",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cb306a0adb50426311d3f585c018235590647ac1",
-        "description": "zink: remove broken kopper assert",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9625e99110c831df533a1cea00d57feee1ff3a44",
-        "description": "zink: use better determination for handling swapchain acquire submits",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "92228a6d283c763aa80b955d68420dec293bdd4b",
-        "description": "zink: move 'acquired' flag onto swapchain struct",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c47378fb0fd4334c7c38cf8dd9a4a3505ec76ef9",
-        "description": "zink: move to AoS for storing swapchain struct data",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "983dcda16ad969bf6f59f8873966635903f19104",
-        "description": "zink: track whether current swapchain has data",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c1ce1889db94385a1584ee45481a099bcf229ab8",
-        "description": "zink: fix kopper_acquire return value",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "ab1941fc0e990d10e050d6e8a75fc1fa9fb75456"
-    },
-    {
-        "sha": "24be0119016f6181f5a39e6405f17ad199bd695c",
-        "description": "lima: wire up MSAA 4x support",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f93bee19d9c9275c7dffa19fc9d4c795950b4359",
-        "description": "ci/turnip: Trim the a630 VK run a bit.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "523ed9521b897676c383cbf511ff42a3bd026d97",
-        "description": "ci/turnip: Test traces on turnip using zink.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8e53194f44a3aa1ae07eabd4a046c49f063d644f",
-        "description": "ci/freedreno: Add vulkan+gl integration testing in piglit.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9090bb1fbd601516756c0830c8b6c57bb2c3bd40",
-        "description": "ci/traces: Drop ZINK_USE_LAVAPIPE ICD override.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "83709ac3cfb0bdd3d4770b509ec278a04fa22bca",
-        "description": "ci/traces: GC unused code for DXVK trace replay.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "67bbe79d35d111506744b4f0330a211bc8300445",
-        "description": "lavapipe: always set point_tri_clip",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f18492faa9f692d62cee774066ef182d3e279eec",
-        "description": "lima,panfrost: Do not ralloc contexts against the screen",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "0fcf73bc2d4dc292895ef8930f4f445d933b1630"
-    },
-    {
-        "sha": "a530b90cd3d9fe38da4a94b15adeafa5652eb0b3",
-        "description": "zink: remove swizzle from fbfetch lowering",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "31b04e420b0eb080084c6323066ea0b83929d59e",
-        "description": "glx/dri: Fix DRI drawable release at MakeCurrent time",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "59944831a794e3797839fd7066e34c802c69d43e",
-        "description": "microsoft/clc: Add a unit test for unused image kernel args",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ca23a4af6734afb3056c095761d8554f38bd4d70",
-        "description": "microsoft/clc: Remove dead image vars",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fd37959680725e0b3f96a4e91757bcc0d8d60e7e",
-        "description": "microsoft/clc: Fix test double free in the case of compilation failure",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d69e258e8e6238204bbadb876e3760219280bbd6",
-        "description": "microsoft/clc: Enable tests that pass on server 2022",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2dcbe87271bea04d4572063f28af33bca32e12f1",
-        "description": "util/disk_cache: Implement disk_cache_get_function_identifier for Windows",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9d7d1c0637529301d3e319ec5f1c883c5f249783",
-        "description": "intel/clc: enable fp16 & subgroups for GRL",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cf44282deb4ed08bd6a998fe6b75b2944f0f6edd",
-        "description": "clc: add new feature options for intel_clc",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2e895f8b0496f9f15359a5d98ef722d3d9753bc4",
-        "description": "radv: vectorize nir_op_fabs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b45a39c44bef8296d14ecc39c92b83d64db3f209",
-        "description": "radv: vectorize nir_op_fdiv & nir_op_flrp & nir_op_ineg",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "def3690447176edba1b063962bbbbdc6e2598ebf",
-        "description": "radv: use callback for nir_lower_to_scalar",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4235dd7b47286919fdd7f0c9dfad6e4055d9fb1f",
-        "description": "radv: don't lower vectorized instructions to 32bit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c298ab0d2362db180dfb8d619125916aa66c07a8",
-        "description": "aco: correctly validate v_fma_mixhi_f16 register assignment",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b6ba24cd6291eaf07734e2da6c68e339f21c43ac",
-        "description": "anv: disable injection of primitive shading rate for mesh",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "1542ab70eb415c028542c0ce93a6dd7463220eba"
-    },
-    {
-        "sha": "42b551fe7f970c8fd6e530e3d2169abb934c72c2",
-        "description": "intel/compiler: adjust task payload offsets as late as possible",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "c36ae42e4cccc925e5319afe41c4b8ba850730b4"
-    },
-    {
-        "sha": "3dc6a98d78c669b28ee600b9da7086febb859e8f",
-        "description": "intel/common: allocate space for at least one task urb",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "c93cbc77f78ac4d6c479f657e6f92952fd357211"
-    },
-    {
-        "sha": "899aa7925b0bc5d01f916200164796304cefc091",
-        "description": "c11: reinstate the original license and authorship",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "b2ddec4e98fea9b824e7258468e5b5da9ba848b0"
-    },
-    {
-        "sha": "3f6edbc7258ae4a92ebaf17749df1a824d2a4de1",
-        "description": "intel/blorp: Dirty depth bounds dynamic state bits after blorp",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "56ef501e3aa4b12f41c0520bbc5fa920b0efa0f8"
-    },
-    {
-        "sha": "b6bb7f899849145e759eb175421d378b9709c57c",
-        "description": "anv: Dirty all dynamic state bits when creating command buffer state",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "48229d11bab48569250e8ef43d6476f2ef3b9281"
-    },
-    {
-        "sha": "f4386b81e612a81829911b2398248b30f27aaee0",
-        "description": "intel: fix typos found by codespell",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ab0e09803a53ac574751c48215d3240347cc9bc3",
-        "description": "dzn: Enable the depthClamp feature",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a7d6f52821a5274e3e0405f7a1502eaa669569c0",
-        "description": "dzn: Enable shader{Clip,Cull}Distance",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "716aeafb67300dcadcd0ecd497d4f867e6151ff3",
-        "description": "dzn: Enable dynamic indexing on all kind of descriptors",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8f4fe3d21f5b6871befa3da90784b0ade7cdc88c",
-        "description": "dzn: Advertise shaderImageGatherExtended support",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7988e966fc20f9ad438c7c53e6ace3e39bd45d1c",
-        "description": "dzn: Advertise anisotropic filtering support",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ee536ea633b036f1ec45a65c66eed3a854885702",
-        "description": "nir/serialize: Put dest last in packed_instr::tex",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "35655865cbde648f6dcfad38fa095d9ec0c4e45b"
-    },
-    {
-        "sha": "68e5265fa1be1946c5a20eabf4974b4d296649a1",
-        "description": "anv: silence border color swizzle debug message",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fd997bde2f94a4d1510ea0543779eadeaa7a4aba",
-        "description": "radv: dump UMR waves before UMR rings",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4c908d4587c32db0f2076ea1f15957835bbc1812",
-        "description": "radv: fix command line for dumping waves with UMR",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "915bc6a179e3844afea05b4c5888601d88a859fc",
-        "description": "radv: use RADEON_FLAG_VA_UNCACHED for the trace BO",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "db7890637e2e96eceac747d6e90614109799f40b",
-        "description": "radv: disable small primitive culling for user sample locations",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f392b6c1ad4a360a02eb2a4024e3d7bb03a4b759",
-        "description": "v3dv: Implement VK_KHR_performance_query",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f2a24fd4a239fcfb196f8cd89b196bcdcace4b2a",
-        "description": "ci: Revert \"CI: Lima farm is offline\"",
-        "nominated": false,
-        "nomination_type": 2,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "686e20afcd32cb80b96984c8eb4428e777fbce97"
-    },
-    {
-        "sha": "04b15f88e7695327a970be0e748302ec0fb728c4",
-        "description": "radeonsi: replace llvm gs input handle with nir lowering",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "36197b8dc08882af70281af0e5b9e264e9ad9a0a",
-        "description": "ac/llvm: get back nir_intrinsic_load_gs_vertex_offset_amd",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e9f1f115fab35d6f66402fe8b66d226eb0b31d1a",
-        "description": "ac/nir: add triangle_strip_adjacency_fix to gs input lower",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f8ddee90ca7b07c2c292ad42777b1e9848d5b513",
-        "description": "radeonsi: replace llvm es output with nir lowering",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "109eb378e52b6c0030856bc1fec29454b635956c",
-        "description": "ac/nir: change es output lower param to esgs_itemsize",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8b5e8b2af728653c17af5ef26c03b60bafa76c7b",
-        "description": "ac/nir: remove unused param num_reserved_es_outputs from gs input lower",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c66eba2072c8f50aa8589ae45fad93254d44cca2",
-        "description": "radeonsi: set lds for gs/es to handle nir shared memory load/store",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7ddd15f6c70632c92cb15f884c943068035635a3",
-        "description": "ac/nir: skip gl_ViewportIndex and gl_Layer write in ES",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "06d493dde22f112754365e35f263cb384ccb7b3b",
-        "description": "radeonsi: implement two esgs ring nir intrinsic",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9fc01f6e797161c4385ef60ce57a3c8c5e835742",
-        "description": "ac/llvm: fix code format alignment in visit_load_local_invocation_index",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "78471143438e0572811c28c1bc9f3b5f258b6ccf",
-        "description": "radeonsi: replace llvm tes input load with nir lowering",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6b6aeeecbbd8ef7e603444a634bb2470ca64395d",
-        "description": "radeonsi: set uses_vmem_load_other for nir_intrinsic_load_buffer_amd",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2b7e167bbdfa8bcdb826309698acee3f96c02331",
-        "description": "radeonsi: enable PIPE_CAP_GLSL_TESS_LEVELS_AS_INPUTS",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7598bfd768f02d1d77007ebc07990db9c83a6fb4",
-        "description": "radeonsi: replace llvm tcs output with nir lower pass",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d00845faf4f4a2fd46c5efc40a2b8cee32243265",
-        "description": "ac/nir: add no_input_lds_space param to hs output lower",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8f8d06bd059614c7b970549f02600e465d1f3d5b",
-        "description": "ac/llvm: handle write mask for nir_intrinsic_store_buffer_amd",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "baaeca7d1ac7cc0abd50ce265d41990281607b41",
-        "description": "radeonsi: implement nir_intrinsic_load_tess_rel_patch_id_amd for both tcs and tes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3853dfcd442c08e67651adc9e5e5b3e6d1d2de3f",
-        "description": "radeonsi: implement nir_intrinsic_load_ring_tess_offchip(_offset)_amd",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4ec864c0578531ff37fbd50aa0c12193d29f6300",
-        "description": "radeonsi: preload tess offchip ring for tcs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ae9b02b4d0be79bbfae8172a4736754b91845fb9",
-        "description": "ac/nir: add wave_size parameter to ac_nir_lower_hs_outputs_to_mem",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "18d51831a8a2ccdb5263511fa09888a94108bff3",
-        "description": "ac/nir: add pass_tessfactors_by_reg param to hs output lower",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6ccb9634de732b3fd30210d59715268be04dae2d",
-        "description": "ac/nir: use nir_intrinsic_load_hs_out_patch_data_offset_amd in tess lower",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fdf589321c5acfce67c18dc2455fc3a54fd86135",
-        "description": "ac/nir: add nir_intrinsic_load_hs_out_patch_data_offset_amd",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2ba6d2b10739d9ca06099197cc44b49c77fd8b3a",
-        "description": "ac/nir: remove unused parameter in tes input lower",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "07e025a390a0d07bdf2d8888a4291f1153f088cd",
-        "description": "radeonsi: implement nir_intrinsic_load_tcs_num_patches_amd",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a1763ad4b362c9f3a1fd12b6d06009b17fac3d24",
-        "description": "radeonsi: replace llvm based fixed tcs with nir",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3ab9c42b43d907696d2e18c5020a5abcaae47096",
-        "description": "radeonsi: add si_create_passthrough_tcs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "74350cf0575fc3c070e4eae811d4cac43fad7d7a",
-        "description": "radeonsi: support multi stage shader state creation in nir shaderlib",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a5995766548b9cdd17fd0a14ba86fcb524c65cba",
-        "description": "radeonsi: use si_shader as parameter in si_get_nir_shader",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "05b829cd0c2ac644e8b68941a3194030ab13e917",
-        "description": "radeonsi: deserialize nir binary in si_check_blend_dst_sampler_noop",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3aa70d92ce629ae49c7555cbeeff66feacaac812",
-        "description": "radv: no need to do gs_alloc_req for newer chips in ngg vs/tes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "74e596a5f0fbb790af70927ae25ab757142a84a8",
-        "description": "ac/llvm: conditionally check wave id in gs sendmsg",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e75f11625d1d9bac1d8c477ec75924290325c705",
-        "description": "radv: Deal with derefs from opaque types in function parameters.",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a7d6365f20078cda63052eecc0e3aad9a3779d28",
-        "description": "Android.mk: Intermediate output paths may already be absolute",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5feb025086382b81473ba4e3e2db35beacaaf8c9",
-        "description": "Android.mk: Generate the dummy source in local-generated-sources-dir",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b0a1a28d97b36e8c11c49f4029d184def705760b",
-        "description": "Android.mk: Make mesa3d-lib work with absolute path meson outputs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "46d4a0f8b299d96c6161ed2eeeafa0bf47969a33",
-        "description": "Android.mk: Cleanup mesa3d-lib",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b28efd80ebb4d8602dbaba29714e77906ea36be3",
-        "description": "iris: Update comment about 2GB dynamic state range",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "627ba5c91b80bab8653dc5c6cc64206ebd8d7c44",
-        "description": "venus: support VK_KHR_copy_commands2",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8b8109851961b794bbb41cfbb40b7e53012eaf6d",
-        "description": "venus: enable VK_EXT_image_view_min_lod",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f862cc070fd07437cd010446375f86f8a8546e74",
-        "description": "venus: update venus-protocol with VK_EXT_image_view_min_lod",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "21374eb77744653c8e61eb43babf5114f5fd6a0f",
-        "description": "vulkan/render_pass: Support VkAttachmentSampleCountInfoAMD",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "541819b2d6d37f435702b63817a363be2e3e447b",
-        "description": "vulkan/render_pass: Allow for mixed sample counts",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7e11cdc77a6ac186bdce0b98cc2e5d4ca5857999",
-        "description": "vulkan/render_pass: Pass sample locations to barriers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6216c59dbba7312f2077125b94109c663bf1d255",
-        "description": "vulkan/render_pass: Use a special layout for self-dependencies",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f10012a2b24ef7c40ad55987cb52b571e7979555",
-        "description": "anv: Use CmdBeginRendering for resumes in BeginCommandBuffer when possible",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3a204d5cf370116a427361410a449dde002bc143",
-        "description": "vulkan/render_pass: Add a better helper for render pass inheritance",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f904b95ef075e652023a3832799c0f96fa3d3200",
-        "description": "zink: add a turnip driver workaround for EXT_depth_clip_enable",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8f57818ce544d4f29c0ec65a168a7d4d46370419",
-        "description": "zink: fix-ish depth clipping without VK_EXT_depth_clip_enable",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7c127ca0188a837b810f7269e7bb648523715c46",
-        "description": "nir/opt_memcpy: Add another case for function_temp",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dc85065944af2c1f089c59155630561263b6b2e0",
-        "description": "nir: Add an options parameter to deref_instr_has_complex_use",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d6123460fde1c6f70fe8f1c1aed745cb31bee736",
-        "description": "nir/opt_memcpy: lower copies to/from tightly packed types",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "82127961d2a3a70d7a3a5d4c234f5e866cd54503",
-        "description": "zink: remove another zink/tu fail",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c81016f53c9745cf78a1c5133413bc67359b1e9b",
-        "description": "ci/dzn: Copy testlog.{css,xsl} to the result dir",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e9c37e5ba8efd4bb791cca87d5d054ff034f183f",
-        "description": "microsoft/compiler: Fix emit_ubo_var()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8e710f2cf3c7b4f165fdf55e4e2163d075c6dca5",
-        "description": "dzn: Transition resource to RENDER_TARGET/DEPTH_WRITE before clears",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "02002c8f12eba89abcbf0a71e5ee01b2a5ae7635",
-        "description": "dzn: Clamp depthBiasConstantFactor when doing the float -> int conversion",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9527fbe596e2ace276c158f67a900c29aad6cdd0",
-        "description": "dzn: Fix CmdPushConstants()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5aeefe8d75345ae908e3f254249e06dfebd4b26f",
-        "description": "tu: Don't count 3d blits in QUERY_TYPE_PRIMITIVES_GENERATED",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "97ef19e6ce19e5ac1a06fcb847fa87abf602182a",
-        "description": "tu: Use hw binning or sysmem with QUERY_TYPE_PRIMITIVES_GENERATED",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "33641b2a26a4fa74d3e71f6a69d206955764a461",
-        "description": "aco: cleanup force-waitcnt output",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9116b9f00db78f7129d47000f41e4295137c85fd",
-        "description": "CODEOWNERS: evelikov renamed to xexaxo",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3163f2e0a68f07c3e0fbc9eb46e67e8e320e49b5",
-        "description": "CODEOWNERS: Update c11 code owners",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "318473eaf133e8ec332591c8eb234278b025f7e0",
-        "description": "intel/blorp/gen6: Set BLEND_STATEChange only if emitting the blend state",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bb93ecacd77974e864bf28875bba6e3e41667c1e",
-        "description": "pvr: Rename loop iterator variable.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6e6e1e84067fa8ed5044198d5d656d0e318ceb27",
-        "description": "pvr: Fix off by 1 error in buffer_id for ubo pds program.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4240c83960b049d2b18f6912c51ece5df506fd0c",
-        "description": "pvr: Handle vdm degen_cull_enable.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7858c32550829e14fa665285fe41b8eb58462a37",
-        "description": "pvr: Fix physical device limits.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "eac5a2fdfa288d7a5f5a42837987fbaf5eb268f5",
-        "description": "anv: make apply_pipeline_layout/compute_push_layout visible to NIR debug",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ed429af5864631b196c7299f17e725540544b213",
-        "description": "radv: Don't check if we need to copy immutable samplers for non push templates.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f075aa1c11c6a8630a81e7168f1ce20f42d378ec",
-        "description": "ci: add wrapper script for Valve's traces runner",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fd2f529a6bca98f5949465ccff96f6ba13c955af",
-        "description": "ci: move b2c artifacts to its own directory",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cec48994cc9b5653ee7cbab3399de47d29d26b74",
-        "description": "ci: upgrade to DXVK v1.10.1",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fe649b38c412a07c615eab890c2b252e26c4b559",
-        "description": "ci: upgrade gfxreconstruct build to v0.9.10",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "433c436c32d68d48fb477a0a588e25d865bd90c2",
-        "description": "ci: add Linux build of apitrace",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "084cf578ef6a1751d1730c6ff58c9a75264f7756",
-        "description": "ci: fix shellcheck violations in the test-vk building script",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8756de2d8071baeba0a2763856eeeff39fd8f0e3",
-        "description": "ci: install gfxinfo-mupuf in the test-vk image",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bf1362d7a4bc292ab3bb283736090d252e5c7c4f",
-        "description": "ci: install a more recent version of Wine in the test-vk image",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "01a1af181988696951e09f1976adb638930afcf1",
-        "description": "radv/ci: update vkd3d-proton results for AMD's Kabini",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3f86344bd68935c7518c0ee88a28d894a609563b",
-        "description": "zink: use tracked barrier info for generated barriers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "50e764fa50d58054259cec1fc613a0aa6ef9d60f",
-        "description": "zink: track gfx/compute descriptor barrier info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "74dd6e69b44f3301131961af53348c8cb96d844a",
-        "description": "zink: fix image bind counting",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7d56912208fd00297ca2c002e5d505083beb090b",
-        "description": "zink: track overall samplerview bind counts",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "49cc3696bddccea2855cd895211e5c3ce2ac3101",
-        "description": "zink: track ssbo bind counts",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e38b2adb886c09dc8177eb454633e5ecc3143eb8",
-        "description": "zink: use the bigger of the variable type and interface type for bo sizing",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e060d98aac588247f195988b58c2dcb04fef4bb8",
-        "description": "util: use force_gl_map_buffer_synchronized workaround with RAGE",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5f686bfc852e56ed7f688a8c3653ca68de04994b",
-        "description": "util: add dri config option to disable GL_MAP_UNSYNCHRONIZED_BIT",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b74d3e71be4f48c673516b2d70ea9eb914049e6a",
-        "description": "lavapipe: skip post-copy pNext checking during pipeline creation for composites",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f8a92d28adc6208d8cb3c4a6d317acdb05149379",
-        "description": "lavapipe: add a pipeline library assert",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2a69aeb9c1f2324ec5b988786152b52d6ea9cbc8",
-        "description": "lavapipe: fix renderpass info handling during pipeline creation",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7018b630edd90776029803c3b41df8dbdcaacd45",
-        "description": "lavapipe: copy more pNexts for pipeline creation",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3aaab4a232cbd377ac6e22295f70d41be4a9c56e",
-        "description": "lavapipe: zero out blend info if blend isn't enabled",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9be88a84640ea371f18bd0713142c14e5b7241f7",
-        "description": "panfrost: Use u_default_clear_buffer",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f32ac20862f16494403fd8ad31a57ffb84f9feef",
-        "description": "iris: Use u_default_clear_buffer",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cd21d32fe404311fe7edc49801513525c19993c0",
-        "description": "gallium: Add a u_default_clear_buffer helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9b11618dfa18230b01d5dc5ad773a34f2a568c56",
-        "description": "anv: disable perf queries on non RCS engines",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f00ebb913a80bd178b0b05231dd4ec883f997069",
-        "description": "u_blitter: Remove util_blitter_copy_buffer",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "21f5c6ea873bb767a14a9c1eb4e6907e8bd76d48",
-        "description": "r600g: Remove streamout-based buffer copy path",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f367c5557356a18603fd7a18b8e3e1dd38a5faab",
-        "description": "microsoft/spirv_to_dxil: Fix discard semantics",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6689fa2ab4eae15fbd73bba250f42b3fe3b50a3f",
-        "description": "nir/range_analysis: Teach range analysis about fdot opcodes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f50fe9b0b6b108caa3334e4ddde1871b52ce9a31",
-        "description": "egl/wayland: Don't try to access modifiers u_vector as dynarray",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "b5848b2dac1464f5364dc2a76bd11cac0cb5769b"
-    },
-    {
-        "sha": "8ce7faab47a77377a6a1313a80580828b052f878",
-        "description": "vulkan: Add a vk_pipeline_shader_stage_to_nir helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "288c1c29fb47af0d515efdbd4442f5de5561daae",
-        "description": "vulkan/nir: Make spirv_data const in vk_spirv_to_nir",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "29a7d924c7a4f5d819b961c1cd3bd0c2060789a5",
-        "description": "pvr: csbgen: Make all generated enums unambiguous",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6cc0a3ed44d9dfd0cd9abcb3fb525515346bdc8d",
-        "description": "r300: only run merge_movs pass on R500",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "6c2959c0256167bc97ed338e12e0543a967f2fc3"
-    },
-    {
-        "sha": "b1df00cb7943c9869b1542c97ebb4eac81c0040c",
-        "description": "tu: Check dereferenced value of rop_reads_dst.",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "94be0dd0b86cf7dcedd94e732d8ee91bd16d091d"
-    },
-    {
-        "sha": "7d706af76b2c41ee2d496efabcf96ac5c4a61de2",
-        "description": "ir3: Fix vectorizer condition for SSBOs",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "bf49d4a084be659b5aaded4e4f094fb5a049698e"
-    },
-    {
-        "sha": "6fc2622abd3c4d66742437e6fd4d8757ff65d74d",
-        "description": "aco: don't skip VS->TCS barrier if TCS output vertices doesn't match input",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "152092b8eaddd46a11f1a08514742e72ba1c195e"
-    },
-    {
-        "sha": "d4ce845a8db246b4f0f8a90dd3b654cf4dc571e2",
-        "description": "meson: Enable wgl tests on mingw",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a9e34d6d8e1f1424819e4d457463490b9234867b",
-        "description": "ci: Building all mesa functional with mingw on debian",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cb53094ac1587b7f9d1a875eb1ea2f132dd4723f",
-        "description": "d3d12: Turn d3d12_format.h to include d3d12_common.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6cdebc11ad74b8a78610940fdfa8c641c04f481a",
-        "description": "ci: Trigger the new mingw/linux dockers to be build",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bbfd6dfe2ef901979590ca440d91c86c937e64c2",
-        "description": "ci: Prepare the container for building all mesa components with mingw under linux",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "20a236c75579e0c5563fc9ae65739cc214b7ea2f",
-        "description": "ci/x86_build: Getting pushd popd be paired, avoid using cd",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d52f280bd7b0c95b045c61f66fa8e2f7f4125eed",
-        "description": "dzn: Fixes incompatible pointer type error",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a387c9284a702a14d9009745a6a7158762d6c175",
-        "description": "microsoft/clc: Disable clc_compiler_test on non-windows platform",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e1e94f8c81c4142b8ba53ad4cd054457be342d5d",
-        "description": "microsoft/clc: Fixes narrowing error in clc_compiler_test.cpp with mingw/gcc",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7cb78a27d82a182b749c592b8749d0985a90b894",
-        "description": "d3d12: Fixes compiling error in d3d12/wgl/d3d12_wgl_framebuffer.cpp with gcc",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "05097d1f6c366fe3384063782cf4a391219870bd",
-        "description": "d3d12: Convert #include <Windows.h> to #include <windows.h> for mingw on linux",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6b181fe1b2e0c188d8a4175c91d31ab2420c6e7c",
-        "description": "d3d12: Use static_cast instead of dynamic_cast in d3d12_video_enc_h264.cpp",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "deb36dc6c2e52a428db55b6d8fefbe1011288862",
-        "description": "turnip: Use the new border color helpers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "498a8e77dd9a437f0af48c6c4921e87057cf4d61",
-        "description": "lavapipe: Use the new border color helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b8882718b7fa9c4dc4d47ed99ab4801fe94ca530",
-        "description": "panvk: Use the new border color helpers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "981cf8a41d44b8e851b115d2e10535d93bd85ca2",
-        "description": "vulkan: Add some border color helpers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bc42bbff4ce8bbfe45b0ae593cfeb218bc068200",
-        "description": "iris: Wa_14016820455 for GFX_VERx10 == 12.5",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5d05ffa465329ac0d804510e9882c245f9a12ee1",
-        "description": "anv: limit RT writes to number of color outputs",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "a4f502de3228ec37dfcaa38225077ec3709d74ea"
-    },
-    {
-        "sha": "76981e5615fae277dd2f2ed0b6f2a455bd7d5fc1",
-        "description": "agx: Handle loop { if { loop { .. } } }",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "062e822e1b9d4329ab320a8771050230c7ca57dc",
-        "description": "ci/bare-metal: Collapse artifacts wget by default.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "13bf36588d40f20ce196889320279cbff6f0e79c",
-        "description": "ci/bare-metal: Consolidate needs declarations in .baremetal-test-*.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1f9566cbb039ceddc416cc6851de3385bb40f0a1",
-        "description": "ci/bare-metal: Remove \"stage: test\" from .baremetal-test.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e13f04fcf09ceac5d79c879dd47d98e0271ae991",
-        "description": "zink: flag dmabufs for foreign queue transition on flush_resource call",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "32c34e93aa767f5123968bef15092817211220b9",
-        "description": "zink: add flag to indicate if a resource is a dmabuf",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "69cad6dcb71af13d6f390fb03137b2a820a6b11e",
-        "description": "ci/freedreno: Turn a530 back on by default and update expectations.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4e3c51cbd8a2240a1d18fedad142b9c2ed9573fb",
-        "description": "freedreno/a5xx: Set the buffer bit appropriately in XS_CTRL_REG0.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6cf2b24eafe9335b9eb605f252b692dad6215dfe",
-        "description": "freedreno/ir3: Disable image/ssbo 16-bit conversion folding pre-a6xx.",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "49dc60efa1df60563a7e992f5070ed10541ab8af"
-    },
-    {
-        "sha": "fd1f2d3b5a4a019c694d4e4f56b8e1ebd3d05630",
-        "description": "nir: Add and use algebraic property \"is selection\"",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a2a2fbc5101d6e6b5d18903c7a0bd84037dbdddc",
-        "description": "nir/algebraic: Fix NaN-unsafe fcsel patterns",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "0f5b3c37c5d757f6ffe994bae24071c0462bb13f"
-    },
-    {
-        "sha": "ccd18ec4f34b6f1407fb7c1671de8c789f33fa1f",
-        "description": "nir: i32csel opcodes should compare with integer zero",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "0f5b3c37c5d757f6ffe994bae24071c0462bb13f"
-    },
-    {
-        "sha": "d45583808104de6b904bbb8f9a53732ea100788a",
-        "description": "tu: Fix linemode for tessellation with isolines",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "542211676c58b0410662e1a959e259487c103e71"
-    },
-    {
-        "sha": "e812e8892a1572e3abaa29fe2ee4516cc2a743e3",
-        "description": "v3d: Drop workaround for u_blitter bug",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f1c1b9687e8d58b62df5bc563c784cffda325611",
-        "description": "tu: Do not expose storage image/buffer features for PACK16 formats",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4309e09d6feab01c11c88249389cc35c9fe595cc",
-        "description": "vc4: Propagate txf_ms's dest_type to the lowered txf.",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "708c47e663be686b150c1dae33fee5b8323c8d1b"
-    },
-    {
-        "sha": "1de87497babead03036539f05dc83fa059dba61c",
-        "description": "ci/vc4: Turn on deqp-egl testing by default.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e9fad0b9aacc3cd12a15eeb7dc7b37590bf03e52",
-        "description": "ci/vc4: Merge quick_shader in with deqp-gles",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "872a1ae69ec31c63f2ff5dd6503c5ff5130bef5d",
-        "description": "zink: ci updates",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "90586f812c9013b49b9c3a2b93664d4707828b9d",
-        "description": "mesa: explicitly disallow multiple pointsize exports from generating",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "096c5aa34a835d66b0cb5d83cc513980113a8e74",
-        "description": "mesa: enforce pointsize exports if pointsize is being clamped",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3e2c132eb81b83bba932a6f60ec070ede5863b57",
-        "description": "mesa: skip pointsize exports if pointsize attenuation is enabled",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "de732cf61b5e09970de7702ecf2faac0faf1910d",
-        "description": "mesa: rename PointSizeIsOne -> PointSizeIsSet",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b2155a044d1ab1d511bb87da8534ad576a3f06b6",
-        "description": "mesa: break out PointSizeIsOne setting to util function",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4830cc77cb8d1f9113b799b68fbaefc91dcc5344",
-        "description": "nir/lower_point_size: apply point size clamping",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "42a126495113ff7f18be759e4606435d54b48fcc",
-        "description": "virgl: overpropagate precise flags",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "a4a34cd3234858dbfe990ede81d3a61edf95c9da"
-    },
-    {
-        "sha": "e1488d937430ac35e1e2fd0f4aa5bdbaddaa32f9",
-        "description": "radeon: Support shared memory user pointers.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f871aa10a117168ed375bbe9e25ca3496fbb1569",
-        "description": "intel/compiler: assert that base is 0 for [load|store]_shared intrins",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e5970fe22a66bf1727d8b677f4e3c93fe2172a71",
-        "description": "nir/lower_task_shader: don't use base index for shared memory intrinsics",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "8aff8d3dd42ecc399f1d7d23ddd641e7e3fce777"
-    },
-    {
-        "sha": "49b8fffeed9dc9b6002d69cf16edffe059112daf",
-        "description": "nir/lower_task_shader: insert barrier before/after shared memory read/write",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "8aff8d3dd42ecc399f1d7d23ddd641e7e3fce777"
-    },
-    {
-        "sha": "c601ba332b4a106072cd3315b7886e9937d86212",
-        "description": "ir3/sched: Fix could_sched() determination",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a8671b2182b4bfb835355ef383b0ab0293d9462a",
-        "description": "meson/tu: Don't compile libdrm paths if KGSL is selected",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6ad7be1b36b43ef2445feb83bdaf9b7c9c7b8ef5",
-        "description": "meson/pps: Check if libdrm exists to compile pps",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ee6a0c675b1701df46ed9fc4eab1a5d48a47dd0f",
-        "description": "meson: Define _GNU_SOURCE for android host system",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ad3d6d9c6e3f96ec44573e8d9044a24988cc44e5",
-        "description": "radv/llvm: always emit a null export even if the FS doesn't discard",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "bdf3797aeb77a8346c1af6d86f77a7a834cca777"
-    },
-    {
-        "sha": "17645cb29c46e66f9ba58798142ceee0ed42ac6d",
-        "description": "llvmpipe: enable PIPE_CAP_FBFETCH_ZS",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ccaa7920ef6534b6ce1cff7a48d5f84369cfc398",
-        "description": "llvmpipe: implement FB fetch for depth/stencil",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0ba3e797ee2c354b0871eb108d1c77c667a7af1e",
-        "description": "llvmpipe: simplify early/late zs tests selection",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "443ef18f0c95af9c3c93a2e7d62362e8da6d3a8e",
-        "description": "llvmpipe: enable per-sample shading when FB fetch is used",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8788b175969c8adadb36921b4634d1e3db6aee06",
-        "description": "nir_to_tgsi: Don't count ZS fbfetch vars as outputs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "959b7480388aa499c00fa2bd531cba92b7799c94",
-        "description": "glsl: add language support for GL_ARM_shader_framebuffer_fetch_depth_stencil",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "41f22a1823a77183fb28e8a6dd312d723c3fda87",
-        "description": "gallium: add PIPE_CAP_FBFETCH_ZS and expose extension",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "68e89401140d1b3a17052899c54577de3f008b67",
-        "description": "glx/drisw: use xcb instead of X to query connection",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d3e723fb775ddad543d63f31e898458b7e77bcd8",
-        "description": "wsi/x11: add xcb_put_image support for larger transfers.",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c5dbb1139c5e5bff0dc52fc2e4c3c19da1cdb4bf",
-        "description": "egl/x11: add missing put_image cookie cleanups",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e6082ac62e8aa5922820b219103659c3c4f2f53f",
-        "description": "egl/x11: split large put image requests to avoid server destroy",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e8fc5cca9039e7d4ea08cc6d99fe9c4f8cc49f8b",
-        "description": "zink: fix dual_src_blend driconf workaround",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ea005c9e0470adbaa167b6a1d2da5f04efe2035a",
-        "description": "glx/drisw: invalidate drawables upon binding context if flush extension exists",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "23b63e536e54c00de9dc1b634265de3337318588",
-        "description": "glx/drisw: store the flush extension to the screen",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cee1c4fc7f35c74103af50d6b6ccfe46e3ccc384",
-        "description": "ci/lava: Filter out undesired messages",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "64d074879b82f6bc694a626631de7b4ff305211a",
-        "description": "vulkan/wsi: Use HAVE_LIBDRM to detect DRM instead of !_WIN32",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a7127fbc4c9aefeb182fcd2d047b8e4438ef0896",
-        "description": "intel/tools: Print memory info in intel_dev_info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "eaf2a35a76e0a92936bd10a25349eeff29d73684",
-        "description": "iris/bufmgr: Use memory info from devinfo",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1505f943976c4edba79bac133db1007288fcf7a9",
-        "description": "anv: Use memory info from devinfo",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4289c9ec13c9dfdbcda8217c7fb4a87baec4868f",
-        "description": "intel/dev: add a fallback when memory regions are not available",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4e727297e83572820f0a1a0db69877d55a36fb64",
-        "description": "intel/dev: add a helper to update memory info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4aecfbf0f4abd6932ae071c27bd8e6c3639b8dd1",
-        "description": "intel/dev: Add devinfo::mem to store i915 regions information",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1222c86e34fb7ba5085c598b7d1d073258d9fafc",
-        "description": "panfrost: Bump ESSL_FEATURE_LEVEL on Valhall",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "74460a5d7544d08b653957e2e283235d66ebf8af",
-        "description": "panfrost: Enable CAP_INDIRECT_TEMP_ADDR on Valhall",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7d84bb00dc4d75652e07d0a3d9f0663431f9bdc8",
-        "description": "panfrost: Enable more FP16 caps on Valhall",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3fedf22b6089f0251426cd4c431363bbd0e4413a",
-        "description": "pan/bi: Tune lower_vars_to_scratch",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fd021a618f3aeb2148060774b018343f059f7d1e",
-        "description": "pan/va: Replace MKVEC.v4i8 with MKVEC.v2i8",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c570693c19dd72c40b58e8345bc86c70674670e6",
-        "description": "pan/va: Pack MKVEC.v2i8 byte lanes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "10301885abe83897da84b0f09e36a7a68d2c491d",
-        "description": "pan/bi: Constant fold MKVEC.v2i8",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2833d0472af6ee29f25e863e765d85cadc33ad0a",
-        "description": "pan/bi: Model MKVEC.v2i8",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6792b15971fd9786ac18833242fd6b53c3b40d74",
-        "description": "pan/bi: Remove FRSCALE from IR",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "21bedd2c97194d3cf8281f99cc9bd337e1510816",
-        "description": "pan/va: Rename RSCALE to LDEXP",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0da28ee2c71c0a3fcb36c6bf11b1ed7d50529400",
-        "description": "pan/va: Implement sample positions FAU packing",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9dd0bc92b588c37de2150b4cb9761188c3edce90",
-        "description": "pan/va: Lower FADD_RSCALE.f32 to FMA_RSCALE.f32",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1a882ecdab06d3cf3786698d23eb015c2baa332a",
-        "description": "pan/bi: Align accesses with packed TLS",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "6761dbf8915d16d1408ac9b3d85751d0991f542c"
-    },
-    {
-        "sha": "5ee1179c946a2710e6621192fe8f0cfbf49d368d",
-        "description": "pan/bi: Fix LD_BUFFER.i16 definition",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "3dc2095b079f1ac890cbf6ca2f525841a2dab5ba"
-    },
-    {
-        "sha": "40accfd3b71dc1c15e9b911f0f0e56b527e4e256",
-        "description": "pan/va: Unit test va_mark_last",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4b7e337b45da6ac773a4e210391c67ef7e426ab8",
-        "description": "pan/va: Mark last register reads",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d4377e12558be7e231a3346ee0fc1e316f190966",
-        "description": "pan/va: Use validate_register_pair for BLEND pack",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b48933d6411a379c128b31174474949046a6915c",
-        "description": "pan/va: Include BLEND for va_swap_12",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "738a1572d264be8bab8cb27301f842bcc4695b13",
-        "description": "pan/va: Move va_flow_is_wait_or_none to common",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1b29a99b7bff6417f437147d44547b7a9c914c6e",
-        "description": "pan/va: Add header guards to valhall_enums.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c5a87365523f4b5cb183e791937f48eb36391ec3",
-        "description": "pan/bi: Constify bi_is_staging_src argument",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2075bff4e84437b42154febdd9525f6193ce528d",
-        "description": "pan/bi: Mark bi_postra_liveness_ins as MUST_CHECK",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "43d00c2971ae641f41c789edc7d8413c877dacab",
-        "description": "pan/va: Unit test barrier handling",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8c6b9b9c9218cd115c3f3b9a1c6e56e6daa84fb4",
-        "description": "pan/va: Workaround quirk of barrier handling",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7fa545528d02091447d9c70759cd2b377e9a2cad",
-        "description": "pan/va: Simplify insert flow tests",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "35fcf8d3d7824877df1f75052ea52a6e54541992",
-        "description": "pan/va: Move VA_NUM_GENERAL_SLOTS to common",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d9c03df584b34e31ae35dec3ab5ba7816cbd9075",
-        "description": "ci: Remove the unused .test-manual",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5f09b1ebe98840fec90e9f8a0ee8ea07a31c381b",
-        "description": "ci/bare-metal: Add test phase timeouts to all boards.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cd3d9a7a92ae31a7ce47fb1a3fec7fff743eda7c",
-        "description": "ci/bare-metal: Add handling of netboot firmwares for servo boards.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3f8114d1e01aa49ab1b705084f8a9c2ea2fbbc2a",
-        "description": "ci/bare-metal: Get rid of servo's serial feed threads.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ca453714aa4add8faec1e11a8f5866932ca8261a",
-        "description": "ci/bare-metal: Add per-boot-stage timeouts for fastboot and poe.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1e15ec1949f6724e75a6eaf6df4c0746279d2560",
-        "description": "ci/bare-metal: Apply autopep8 to our python scripts.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "909e7aaf57fc64e29dea5798387dd36c1bb6af6a",
-        "description": "tu: Reset xfb_used at the end of a renderpass",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "086faecbba856b9ee4533db36a7fa930e72d6606",
-        "description": "turnip: Document some fields about resolves.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d4c664a67029440a0d53d70e2387f87c6eba0453",
-        "description": "ci: Terminate capture-devcoredump before tarring up artifacts.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "efc398c722ae47afd01ed1abd83abb208bba9692",
-        "description": "vulkan/wsi: fix crash with debug names on swapchain",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "cb1e0db23e3fa17562bb276b125aeab0b85582cb"
-    },
-    {
-        "sha": "4f10eddf77f64fd942c7e9b5852becfa3569924e",
-        "description": "anv: fix index buffer emission",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "21ea19d504bb96aea9f218fe6bfa5a9a40a72eb9",
-        "description": "zink: Always enable depth clamping, make depth clipping independent.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "82e08f6b1eb82b0665c612a2c62e9c8bd7a93daf",
-        "description": "zink: Enable the VK_EXT_depth_clip_enable extension.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "810135fb428a2505eba490b4d17a33629820e4e5",
-        "description": "gallium/u_blitter: Fix depth.",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "26c6640835936a77d87030ce8e90f9b9f5be783e"
-    },
-    {
-        "sha": "ee491967c3c9922e9be32df5c956388c6e006b43",
-        "description": "pvr: Update for firmware 1.17@6256262",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ee9c3d2625428ac4cf4e15efb09741bb875ad7fe",
-        "description": "docs: set language to english",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "00cd1346bf056dfc0e7c7f75a9a4e64f3715930c"
-    },
-    {
-        "sha": "48540caec91af15c69cab1c09115be257bf9c987",
-        "description": "tu: Disable sample counting for 3d blits during occlusion query",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0c3fae4e6e65b83cd6c61375f7be50566ee27e7c",
-        "description": "virgl: Don't let ntt optimize the register allocation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "677a42378b2edff884a59558eb9d6d0ff8b161c1",
-        "description": "ci/radv: add a missing flake",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f86e12743c79fb5c83fbd32877c092beafb2c7ac",
-        "description": "ci/radv: move a test from the fail list to the flake list",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d232f5a026072a6196908007773e23a6b15dea29",
-        "description": "dzn: Fix the 2DMSArray case in dzn_image_get_dsv_desc()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6cab999d6a2ed69782a8089e618f7b30aa54bfc4",
-        "description": "radv,aco: rename radv_prolog_binary/radv_shader_prolog to shader_part",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5cce02325cae6a927af57d1a425badc8e8985c51",
-        "description": "ir3: Create at least one thread for async shader compile",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3196bde9417d0cf578c6fea0c927574b4ab193b9",
-        "description": "freedreno: Wait for async compile jobs to finish",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "081b1eeacd64e02a2470af532e283578075efbed",
-        "description": "microsoft/compiler: Fix assert.",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "afb64e10c1f19b7f76454e052c95d3b2bd2957ba"
-    },
-    {
-        "sha": "2b870731336bc128f309d20007efc56ad9c002d3",
-        "description": "radv: Remove unnecessary null check.",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "779e09639b543958698c1e40a134b41631099197"
-    },
-    {
-        "sha": "9cf36089526af4ce23f8b33334f5feb33bd3dcde",
-        "description": "ci: Uprev apitrace to 790380e05854",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6cbb19110b4daa19e719228bdf2c1d7750ca0e4b",
-        "description": "r300: prefer old not native swizzle in constant folding",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b6a30b72ab32351beebe99a2014537d48cba2682",
-        "description": "panfrost: Implement provoking vertices on Valhall",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9cdd32257fbeaa927668beec503ad130f86168e5",
-        "description": "panfrost: Add tristate_is_defined helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "950d27f9bf148a75eb9e4bdf79f678e3b075f160",
-        "description": "panfrost: Fix batch state changes on Valhall",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "3641dfe4367e37b3bbe125c9b18044a07e35e502"
-    },
-    {
-        "sha": "e9190c45d59695f64daf82a7ded0179851cfc397",
-        "description": "panfrost: Disable QUADS on Valhall",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "008163f3820eba5519cc80c31d660fa3de336f6d",
-        "description": "intel/compiler: vectorize task payload loads/stores",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "97b53ad759b5f3b21edb4870779a7ca12e6bca52",
-        "description": "nir/opt_load_store_vectorize: handle task payloads",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fad7e858f22c4e59ad8043200845d3a7323ed100",
-        "description": "pvr: Extend hard coding infra to allow per stage per device coding.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c6933cc9de7f648d06705754909ba7315c6bd19f",
-        "description": "pvr: Enable 33.15.11.3 (AXE-1-16M).",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "62cc9bba06a1a3479558267e70f46e321f73f486",
-        "description": "pvr: Add TI AM62 as a supported device.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "57ad38c2fc66b975c769356494f95dad56531a48",
-        "description": "ci/freedreno: disable non-existing trace",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c0626a6bd25fe781c86dfa9b8f4f0172b1651748",
-        "description": "v3dv/ci: Update expected results",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1987fb00918f36de1de6a3c4957d56c061c6f31e",
-        "description": "ci/dzn: Move to a .toml description",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2bbb11eca233fa88b4281c29e2fd993982829bda",
-        "description": "ci/freedreno: smuggle myself into restricted traces access list",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dfe9b856cb78b2b326eaf523778d98f8f66763fe",
-        "description": "ci/freedreno: update restricted traces to the brotli compressed version",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "11ac33c2a9326906d6c14d7f07a788cf1eed888d",
-        "description": "gallium/tools: fixes to option handling",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "50b21fb6e41c3d7f91c96c8c8d8e88ee434b7d78",
-        "description": "anv: Use sampleLocationsEnable for sample locations",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "419b8c7f8d8d21e08ea22ddaf1d5ef6908c289af",
-        "description": "dzn: correct order of src_subres and dst_subres args",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "2d0798440b4f89068a855e1ff6d78f302ef3c93f"
-    },
-    {
-        "sha": "7afecd8ad8eb536d17679c2b19b5b645fe3115ba",
-        "description": "radv: Check descriptor pool entry count before allocating a new set.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ceb3ae2afb888579c761741b93ca1fa5a2e41bba",
-        "description": "radv: Remove redundant memset in radv_descriptor_set_create.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7c25c6f04ee17caf9d7b34504f805ac7d878dd17",
-        "description": "pvr: Add graphics pipeline hard coding infrastructure.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e47350a245ceff5e7c76b5aeb85a9b4b593d966b",
-        "description": "pvr: Remove unused output_selects from vertex shader state.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "66f4c9abc9d54ae76e107e824df9bb3f0051d493",
-        "description": "pvr: Change compute hard coding infrastructure.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4e4ef72aac00c5e165de3d5823f2afb92e40a285",
-        "description": "intel/dev: fixup max_cs_workgroup_threads after hwconfig is read",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "d9ff9ea9c3315e9373a1fbdccd57fce571463cd5"
-    },
-    {
-        "sha": "5485bf7b1bd2f88ecb19c10777a09858a9624b1c",
-        "description": "aco: fix validation of SOP1 instructions without definitions",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6dd2699e9f9cfb482349afc582470a4f9709c5f7",
-        "description": "radv/amdgpu: do not add \"global\" BO to the virtual BO list",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b4cc10b3427bdf1f172094f991c38c6ec94bbc19",
-        "description": "radv/amdgpu: make sure to reset the number of BO when there is no ranges",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "29f34cc8061f3dc2617b726f26c4b697ec3c49c6",
-        "description": "ci: uprev vkd3d-proton to 39d07dea2cef34bfb3ed39741f026bc637e3eec4",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6072d5d8dccc1db44f29ce9128061222968a1781",
-        "description": "zink: ci updates",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "420270cb4f73da6251d4caec976358681f05c45c",
-        "description": "zink: relax zink_resource_buffer_needs_barrier checks",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 3,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f889bece4637928ae07d518fba3dd211de07d41e",
-        "description": "zink: don't short-circuit gfx stage finding during barrier generation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1fa3f03442bcf0ac0e8459ed48e3fd5d1371d32c",
-        "description": "zink: collect gfx stages for all bindings during barrier generation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9e3ed6532428c90a44fe1fd1bff5443f812404c5",
-        "description": "zink: add a #define for vk shader bits",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "80569f9e5fb07c497cccce1407c3620eb34b893e",
-        "description": "zink: track image binds",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "47361daffcbb589125b1b293c4dddf5221f02c16",
-        "description": "zink: rework buffer barrier generation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "db0fda6f36990e72a604f7b8e73dd55f2c5912b5",
-        "description": "zink: track vertex buffer bind counts on resources",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7b88dbfd785ae25fcea022290ab3b17eaea4cc94",
-        "description": "zink: move draw-time barrier generation down a little",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9ca0c0b4b40831038cac027bd342b2405e0716db",
-        "description": "mesa/st: increment num_uniforms for hw accel select shaders",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "9b22ab4167e6c2c0cf8868a9109545fe2c0d164b"
-    },
-    {
-        "sha": "81557a4fdf1e780bef75ca4ba115395ec61aae18",
-        "description": "zink: unset PIPE_CAP_DITHERING",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "371660b877344df6ccc5f2c3bd0f286ae4f3650b",
-        "description": "mesa/st: add PIPE_CAP_DITHERING",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8a9f7087a1464759760ad359210dc42fa1ebf540",
-        "description": "radv/ci: test vkd3d on kabini",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f7ed0941c49c1cdbe4d26a90ea7856b0bc4b8e9e",
-        "description": "Revert \"ci/valve: uprev boot2container\"",
-        "nominated": false,
-        "nomination_type": 2,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "48243965723e53f283d7c9fbfc801c1406795e31"
-    },
-    {
-        "sha": "7a8ec23c9de71c5a3c1b1e8830c200c4e9c94bec",
-        "description": "anv: Properly clamp attachment layer counts",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "858cd2797c64aa21dc912bf7f0a31d3d47915abb",
-        "description": "freedreno/fdl: use XYZW swap for PIPE_FORMAT_X24S8_UINT",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d8803c724bcb83eb08e038984eb8cd6b5f3f64b8",
-        "description": "panfrost: Remove sync arguments from panfrost_batch_submit",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b538519bbcfdfadab443c045a09a130e07e17602",
-        "description": "panfrost: Use a macro for checking for a shared bind type",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cd04679a08c7c276a7cadad5ddb5ced540d95300",
-        "description": "mesa/st: Account for YUV color space and range.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a5d09d7a0ac73ec1626be139a482f901c521a466",
-        "description": "nir: Account for YUV range.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "676acfe956be79adafb7552829948b8875b86c8d",
-        "description": "intel/fs: Add missing synchronization for WaW dependency",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "b5fa43952aaf7a41385402ad2d21af5a17805615"
-    },
-    {
-        "sha": "736a07155f131d8f7d801b9ca15ff5c922de4b02",
-        "description": "Revert \"ci: freedreno farm is down\"",
-        "nominated": false,
-        "nomination_type": 2,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "551442b53ebf531ab010dad2a3127ce41432ed4c"
-    },
-    {
-        "sha": "03e543a4221c27327266883a6fc0afb34eab7564",
-        "description": "intel/validator: validate dst/src types against devinfo support",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2866ae32da0348caf71ad2d11c353321df626ff4",
-        "description": "mesa/main:  Correct alloca() use without #include \"c99_alloca.h\"",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "d231f955913e3265d9a560b45dba48ea6336ab90"
-    },
-    {
-        "sha": "45267d5181bb1819dbe6df285a2685d35584c318",
-        "description": "Android.mk: Fix c11-related build failures",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "48243965723e53f283d7c9fbfc801c1406795e31",
-        "description": "ci/valve: uprev boot2container",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "551442b53ebf531ab010dad2a3127ce41432ed4c",
-        "description": "ci: freedreno farm is down",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d27576563063b76031058c776ca71656e9111f86",
-        "description": "zink: print runtime warning on missing EXT_border_color_swizzle",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "46b4017b37e1a89d20670c9ea00eca0769701912",
-        "description": "zink: use VK_EXT_border_color_swizzle",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1effd3be67945713485c615408b7601f0642498e",
-        "description": "zink: hook up VK_EXT_border_color_swizzle",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "be4f120476cb2b537126d34949f497210cc4586a",
-        "description": "zink: be a little selective about BAR fallback memory type",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "575005043222d317070b4c24568cdd059730f176",
-        "description": "zink: move BAR allocation demotion up the stack",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d63e04e583a9fb90154954f7c304f7c8c5773b66",
-        "description": "zink: store and reuse memory heap flags for buffer placement",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ce5aa07db1091a83321229c802f256a44f37aded",
-        "description": "zink: fix buffer transfer flushes with offsets",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "28d23c9e2614fef5b468674ca9cd6b430d869d95",
-        "description": "zink: use only the extents for buffer unmap flushes",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2645430b06dd19222468b09f874099754786ad54",
-        "description": "zink: unify actual map calls in buffer mapping",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dd5d215c62e9a7127cea81b092d0d6b3b8986d02",
-        "description": "zink: rename a variable",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b37d97bb867b26f0619fba4786a700c80929bf20",
-        "description": "venus: resolve YV12 AHB to VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a7911faa9501b7a32f366182e8a6ebc50cacb440",
-        "description": "gallivm: use enum types instead of unsigned in lp_bld_sample.[ch]",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "86c9f3f034233d92d1ef04ce048c23e9177ac864",
-        "description": "draw: asst. clean-up in draw_vbuf.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "63457cb63daef7ba552611a43c1690db5b15de6c",
-        "description": "draw: asst. clean-up in draw_pt_vsplit.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f0dfc05660c020464ed79cc6b1a68687cc5db359",
-        "description": "draw: asst. clean-up in draw_pt_util.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9586a38e39bbabe815a8924ced35f14cfd422bf4",
-        "description": "draw: asst. clean-up in draw_pt_fetch_shader_pipeline.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fcdbf7112c4d4e4cc43dd0ab456bd1c9ed81de58",
-        "description": "draw: asst. clean-up in draw_pt_fetch_shader_emit.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2eabffdd86cd41ce3fb84391cd6c798b5768d92e",
-        "description": "draw: asst. clean-up in draw_pt.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a8cb20339c8f1c8317f0bb5c7fe6ca0942daa7f9",
-        "description": "draw: asst. clean-up in draw_pt.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "824ccace17f2a2f760e4ff8e588ed532b0c23cf2",
-        "description": "draw: asst. clean-up in draw_private.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "91a21fb5190f8c14e6a8957e8063c17ca469e878",
-        "description": "draw: asst. clean-up in draw_pipe_validate.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "49a115e86c596d494b113aaedb14c129a7b726a3",
-        "description": "draw: asst. clean-up in draw_pipe.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7e1a1e898a6503a0c366072b59ccb4c63fcdff27",
-        "description": "draw: asst. clean-up in draw_gs.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "14d4fe286ba738fd9807be15f901e24e4199be27",
-        "description": "draw: asst. clean-up in draw_context.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b2d9be86275f52f7a278e1bffa0015964de6d92c",
-        "description": "draw: s/unsigned/enum pipe_prim_type/",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e20664cbc3e2ed1b4d60e3e8f383f715796e258f",
-        "description": "llvmpipe: asst. clean-ups in lp_state_fs.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c5521d5af18e2bab4b04ca567a92dd898119f4fc",
-        "description": "gallivm: asst. clean-ups in lp_bld_logic.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "eef5e6ac7c28bae2b0ae1df7486a19faf1803614",
-        "description": "llvmpipe: s/unsigned/enum pipe_compare_func/",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9c19ed1b88c9f4f2c441072e83334ca2beb39378",
-        "description": "llvmpipe: use enum blend types instead of unsigned",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cde8d3479e62589150ab60d2eaf95bafec8ce822",
-        "description": "llvmpipe: minor clean-up in lp_state_blend.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c00281903b7d72af60c1e8ddb5aeec31398b0123",
-        "description": "docs: Extend calendar entries for 22.1 by 3 releases.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "77c7caa6bbc6dc55c784d021d7a5dd139b3eb596",
-        "description": "docs: Add calendar entries for 22.2 release candidates.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8b5d4fa54bec2ca40554a7ecd8b0ca99964c3ddd",
-        "description": "docs: drop 22.1.4 calendar entry.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8987e266e42acf424060d13abd77378fc003b4ac",
-        "description": "kmsro: add error message on drm ioctl failure",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c24d8ba3164e47365b4c8e9a9a26009c55eed792",
-        "description": "drisw: probe kms if fd is passed",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7a9617b869c2a5f5db7b395f152837a2a554a0fa",
-        "description": "dzn: Skip another test that times out occasionally",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6e5d126a657a790cfa58282e4b754c9ea1e2c47c",
-        "description": "llvmpipe: disable alpha test branch if multisample is enabled.",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "18585cac04c72cf03978146c993c8d42e76dd835",
-        "description": "zink: radv baseline updates",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ada1baddceb6c27cd6bba7adf4bac7def6ceceb4",
-        "description": "docs: Update windows build requirement with Visual Studio",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d39553da10e9b9745fa2cbe3bcbc72f45fc8383c",
-        "description": "ci/vs2019: Upgrade Windows 10 SDK version to 20348",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c17a0d956a4d2bca56e29e2c7457b8b1f3283e93",
-        "description": "meson/clover: Getting clover can be built with no-rtti llvm in mingw",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "86f87dbe2172f8fb529ca28a951d1af5f727ecd1",
-        "description": "meson/rtti: Using get_argument_syntax to check msvc compatible compiler",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2d934ac11008d4a287aa94fbceed550e64bd346a",
-        "description": "meson: Use cc.get_argument_syntax instead cc.get_id when possible.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1173c0f33ac22955705192e489fb82759c152656",
-        "description": "meson: Using get_argument_syntax as the `--compiler_id` option for gen_vs_module_defs.py",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "686e20afcd32cb80b96984c8eb4428e777fbce97",
-        "description": "CI: Lima farm is offline",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2df90aa562dd549ad64335a71df2f28d41a51686",
-        "description": "ci/iris: disable Blender Diorama trace (incompatible with perf. traces)",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d7f2e6c8d033de19a1d473df4fb1a46c7d365159",
-        "description": "venus: add fence feedback",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9f9d543b12d1679cb4c3750407cbef8f72b93413",
-        "description": "venus: renderer to store allow_vk_wait_syncs capset",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8ecac4c063deac67080995a0b3841804bcd34415",
-        "description": "venus: create per queue family command pool for feedback cmd",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1a7632e54b428d4f443909e5574d58f6cc8c8e53",
-        "description": "venus: add NO_FENCE_FEEDBACK perf option and disable sparse resource",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "942ec179f3d9c74fcd14a58a623c039c494d9a7a",
-        "description": "venus: add event feedback",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f2563788a1c348ecbc4417c2d0359b3472c1959c",
-        "description": "venus: add feedback check/set/reset helpers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e52da323b03c1f6a419f647f5a6ddfb25903b272",
-        "description": "venus: add vn_feedback_pool backed by coherent buffer (part 2)",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "27a24caf1661fd4a1a5656c12db8df4cfb428ea3",
-        "description": "venus: add vn_feedback_pool backed by coherent buffer (part 1)",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d578f6c7278935c00e2c3d1349089e38abff66e0",
-        "description": "venus: let device track queue families used for device creation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4cf87d88229bb9eb51b3037fceccfc258843c4cc",
-        "description": "venus: adjust device resources init order",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cf55a3f70e1c64b05ce3d9117cfa19dde68eefc7",
-        "description": "venus: fix a missing mtx_destroy in vn_device_init",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cb8dfa496627c38c49dd747d3ea97d44b8dc9662",
-        "description": "venus: fix the queue init failure path",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "ddd753305598c8ac097542c0366508c47b423dce"
-    },
-    {
-        "sha": "01a0bfc3f994834318814328978eff05d27ac5a8",
-        "description": "venus: fix a bug on buffer cache init failure path",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "65abd1d4aed48365f0054279616dc31a817b2be0"
-    },
-    {
-        "sha": "b91511b9a895f1a8399c8f52712b2e50669c1f85",
-        "description": "docs: update calendar and link releases notes for 22.1.2",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a1ba2bdf3da7e6ee729c022e235f227c8b69211e",
-        "description": "docs: add sha256sum to 22.1.2 notes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4b5a73062bab16559c72257c5605bb1268ccb600",
-        "description": "docs: add release notes for 22.1.2",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "16c47ad3474ecc9f1b76084d85a8f7aa2c6b3cc6",
-        "description": "radv: advertise VK_EXT_border_color_swizzle on GFX10+",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "09a7304d5abf5b847cf5feb2d97758bee1696566",
-        "description": "zink: tu ci baseline update",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4666ef720edad0a95e1200c3105e87fb8ef2c73b",
-        "description": "anv: do not get rid of empty/useless fragment shaders",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "10f6191fb5e910c3a705bf3dd850eb94b5461973",
-        "description": "turnip: copy disasm strings for pipeline executables",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "05329d7f9acabbc9306c9538a30b502d4c580d38"
-    },
-    {
-        "sha": "9df7ad032032a6a6ea365a43d536c86b4a97766f",
-        "description": "radv/ci: add vkd3d-proton testing",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5878eca643ebe9d0a93efe7f980889be4955dc43",
-        "description": "ci: add VKD3D_PROTON_RESULTS to the list of variables to pass down for testing",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "08113e5c02c4883a1c79b77891aee569160607e9",
-        "description": "ci: print a message when vk3d-proton returns successfully",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "70ba820395e155d19df4aca44756ee3ce86e94a2",
-        "description": "ci: update vkd3d-proton builder/runner",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3f2de5e662fda6d32242b20e08f3d745b38c9ce0",
-        "description": "radv/ci: refactor test machines and dEQP rules to reduce copy&paste config",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "365bf2a3b0215c19e805fddb1d90cb801387e069",
-        "description": "radeonsi/vcn: support unified queue in vcn4",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "515112eabd9903ed0570535fbdb18fe168eedcb9",
-        "description": "radeonsi/vcn: prepare for unified queue in vcn4",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7b7474785477abb30bc75e30977d5821e471337e",
-        "description": "iris: provide a callback to INTEL_MEASURE to clean up snapshots",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a1a5f6430a06a5b3fb774a70ea257f78f2cf00c9",
-        "description": "intel: provide a callback to clean up after intel_measure_gather",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "34a130fedf0abe1596891e85df48fb2b208385ed",
-        "description": "anv: fix performance bug in INTEL_MEASURE",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c4c096e66e52752f546e428e93b9a9ec2312005f",
-        "description": "intel: relax assertion in INTEL_MEASURE",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3c53c6b247b32927bb18f5be526bdf11db13d745",
-        "description": "intel: parse intel_measure environment without side effects",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "78523eea2fa0f649179338ee2b5d89a66a8ed7fb",
-        "description": "vulkan/wsi: treat EBADF as missing DMA_BUF_IOCTL_{EXPORT,IMPORT}_SYNC_FILE",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "30b57f10b36d9824a3de8285c667cdd240e61465"
-    },
-    {
-        "sha": "1783a261f6fdd4c8db3f7b238a0cde79aaa1ec20",
-        "description": "zink: only enable vtn debugging if validation is active",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1bd94b07f6fdc8c6de802c7a0f2928fbc7c4623e",
-        "description": "zink: always bind on the sparse queue",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0f9bc1ebe330d666023f3c3d4f27d4389473daa8",
-        "description": "zink: detect sparse-only binding queue",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d1456a6b0ad0dee9936caa52c9fd915c4bfaa61b",
-        "description": "zink: add semaphore handling for sparse binds",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "285a5144cc17d26a33719061ec76eab3363376ef",
-        "description": "zink: add batch api for adding a wait semaphore",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "48b56d2efdde0409fb66b8bb713e03aef8f82086",
-        "description": "zink: use a dynarray for semaphore wait flags",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f5ac058812c6fde53b0c1d826a332743afadb1aa",
-        "description": "zink: remove thread_queue",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cba6da2b21e5e5c28c4307e20571e184fd6bcc8b",
-        "description": "tu: Save/restore *_BIN_CONTROL in 3d GMEM store path",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "b157a5d0d68ee8a1b4cb862a56b97bd881841413"
-    },
-    {
-        "sha": "a9d7b47613c405ebe3e147fb4a157168cbe7fdbd",
-        "description": "tu: Add missing WFI to the 3d GMEM store path",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "b157a5d0d68ee8a1b4cb862a56b97bd881841413"
-    },
-    {
-        "sha": "705c0d0373b5ff7963eb54e944620c4991c3ecdf",
-        "description": "tu: Fix 3d GMEM store swizzle in texture descriptor",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "b157a5d0d68ee8a1b4cb862a56b97bd881841413"
-    },
-    {
-        "sha": "33e7ba2e3e144f40174240298bed2fcc0fc93e80",
-        "description": "aco: update SMEM offset workaround for LLVM 15",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d301883aba5a60d8d748a82a5777aa0701bdcaca",
-        "description": "zink: use uint64_t for batch_id",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4622e99e103ec2c079c6da082752f8a3c2bd0c83",
-        "description": "d3d12: fallback to integrated adapter instead of arbitrary one",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3b867ae69b1739a5a2950009fc9bd1d4e0d81701",
-        "description": "zink: anv ci updates",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bd859e1f96565e2676048ee4d85ca6ee4fcd6850",
-        "description": "zink: clamp renderpass layers better",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7edecbf4c2728d1f8e82da63cb2027933020b821",
-        "description": "zink: clamp dynamic fb layers better",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "c81cd989c857a5b7384f534407b0ec1e9ddedf12"
-    },
-    {
-        "sha": "f74df6205d245491a8a54ffa6e737f22b9b00fb4",
-        "description": "zink: add a function for getting the minimum framebuffer layers",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "979f213110af1f97e2ba6e60b35b3645cc44057d",
-        "description": "ci/iris: Disable blender-demo-cube_diorama on APL.",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "96f0944a69ddb3dfdb5c36f2832b5878e31d6da1"
-    },
-    {
-        "sha": "6dfabab08f3e062125a353e6597fa19c22894207",
-        "description": "freedreno/a6xx: Support more 3-component formats",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2e63c570ddc75b9f68327a9bc5402599bb443dbf",
-        "description": "tu: Enable uniform texture buffers with NPOT formats",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "db2d2649897fd40891548e08f2a41ba8759b0fe3",
-        "description": "dzn: Enable support for geometry shaders",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e9066ff2be33c5cb147185374f4c92a2902c2f77",
-        "description": "dzn: Disable rasterization if the last geometry stage doesn't write the position",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e11035bf6d1e173518cf3cd0705b0062e4ec8afb",
-        "description": "microsoft/compiler: Support gl_Layer",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9c45ee3f86dab8dbbe34a428a489b2fbe697234d",
-        "description": "microsoft/compiler: Fix Layer type",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "afb64e10c1f19b7f76454e052c95d3b2bd2957ba",
-        "description": "microsoft/compiler: Move d3d12_fix_io_uint_type() to dxil_nir.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c9b2c79d16d0e7d79712483bf979a8eff2b42ea9",
-        "description": "d3d12: Keep access masks up-to-date when removing vars in d3d12_disable_multisampling()",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "e5cf19fced6feff07bcd6b288f6370feb21a496f"
-    },
-    {
-        "sha": "e1accb1c4c505b4b32b5141d89865181a47567dc",
-        "description": "util: Fix invalid usage of alignas in u_cpu_detect.c",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "e3bc78b8e398348bc1993b1c713b8917bd4d53d9"
-    },
-    {
-        "sha": "e24354c1b2e0e2dc23b6acf227f26a55fbf3fabd",
-        "description": "radeonsi/gfx11: rework GDS streamout code to single-lane and enable streamout",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "44e4d42c23891b0cb16949fe7100555df170bab7",
-        "description": "radeonsi/gfx11: add missing register shadowing code",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fbd68a3839b84f53bd4451163abca5463d5dbd5f",
-        "description": "radeonsi/gfx11: drop the ES vertex count requirement",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "99fd408946ed6097f1cb40fcc44d4d66a7896b41",
-        "description": "radeonsi/gfx11: don't allocate unused wait_mem_scratch",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "98d6a3d6c6fbd15d3e7affb7c1bce825ce298b0a",
-        "description": "radeonsi/gfx11: don't use memory for waiting for cache flushes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "56d4e0be86b50c5f6bddeef22c92332b8549d833",
-        "description": "radeonsi/gfx11: synchronize correctly before setting SPI_ATTRIBUTE_RING_*",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fa25eba744b84876bd7ebc72ace5e86052cda1bf",
-        "description": "radeonsi/gfx11: allocate more space for pipeline statistics",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0e8beb1eed994cc951bf53d90dd4664d2a5b5a28",
-        "description": "radeonsi/gfx11: compile monolithic PS if it writes memory",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ee7150da79b9b8f6bddf179cdb032bfe9877b8ff",
-        "description": "amd/gfx11: add PixelWaitSync packet fields",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7d8847d963bec141fd45d0d6c08e608a3fa34b69",
-        "description": "ac/llvm: fix tcs_wave_id unpacking on gfx11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ae432b67b780e7cd7c99f24eecf4f01657a6a8b0",
-        "description": "ci/dzn: Skip a test that intermittently times out at a minute.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "15f394cc7a2e47c487c7fe7c45e0fc55baa71ddc",
-        "description": "nir: Fix unused-variable compile warnings",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "8492e78f9d14c187596c13725f6974816d02a0e9"
-    },
-    {
-        "sha": "75973e3a1cd082bf3575139f19f4921b7705485a",
-        "description": "ci/lava: Add support for more complex color codes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "08435b1c6f9062ba4cd4e56803dd9e19ea119b3a",
-        "description": "radv: Always use 3D block ID and grid size in task shaders.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0fb9573c57f50b064e8a4fb148ef3845313de072",
-        "description": "ac/nir/taskmesh: Preserve workgroup ID Y and Z when applying firstTask.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b243e94f07fc63523c3ed8163b8c3ce3965c0c82",
-        "description": "radv: Lower mesh shader 3D workgroup ID to 1D index.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e05f63f56c1563b6ac85e5158f90040572c229ad",
-        "description": "ac/nir/ngg: Add mesh shader workgroup index.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "856a8acab09d5e4f4c8a0f0073ef7dbda663d0f2",
-        "description": "radv: Enable NGG wave ID for mesh shader scratch ring.",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "0280b526d58e85d65b53d3f9c8b0f7364d853751"
-    },
-    {
-        "sha": "a9e2c699aa3677e24a58de10c5e68ecb950f4a94",
-        "description": "util/c11: Update function u_thread_create to be c11 conformance",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6e33ef2bb9d096bdac40678e5cf5dda3e98fef7b",
-        "description": "c11: Implement thread_local in c11/threads.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "09cd5c9bdb8c3c48fadcef6c92da2b67acbfcb47",
-        "description": "c11: Fixes memory leak of pack in thrd_create on win32",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e6392fcf3d8b8dd7e3a8427755d8be2f2332366a",
-        "description": "c11: Move the implementation of threads.h into c source code",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b7773fd105af14d3c8b561df922adc2eda599d10",
-        "description": "util: Define WIN32_LEAN_AND_MEAN before include of `windows.h` in u_thread.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "be00a7c8acf04d9efde831efe251a59c71b725e7",
-        "description": "glx: using C++11 keyword thread_local",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0f3064ee445c395fdb09428c48c7ed42b5b7b486",
-        "description": "intel: using C++11 keyword thread_local",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "af0080c4ef6df7466a20007fc94b59489d931f4d",
-        "description": "turnip: advertise VK_EXT_border_color_swizzle",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ea33e44ce4f95ce45729b75dee34be50df749f09",
-        "description": "ci/crosvm: clean crosvm socket",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4480e577a462d43f5c7701d2c1b70c601c626e18",
-        "description": "zink/ci: update list of failures again",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": "b240be28e3193e83632848bb32eb1013bddfc285"
-    },
-    {
-        "sha": "858923060278f853848869fa1bb2b4daea3ba88f",
-        "description": "radv/ci: add GLES/GLCTS testing with Zink on NAVI10",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8ffabb2511f8769db371de47e1605c448fd4c6d3",
-        "description": "ci/valve: split .b2c-test into .b2c-test-vk and .b2c-test-gl",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c895e5d14093c46344e6329228c0344fb6cd114c",
-        "description": "zink/ci: change the surface type used for dEQP",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "470f8b2267ee478572992630a050aba1b95b67d7",
-        "description": "llvmpipe: asst. clean-ups in lp_scene.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "99dcb5bceccb731233438cf5adcb433809bf183a",
-        "description": "llvmpipe: asst. clean-ups in lp_tex_sample.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a14fd548f55a4fdbf3f76beb89c6528d2e1541ea",
-        "description": "llvmpipe: asst. clean-ups in lp_linear_sampler.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dde4f9969cec14b9763af048692555115640ecd5",
-        "description": "llvmpipe: fix comment typo in lp_bld_interp.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "eeb9938c64fa2028119a3390eee25c317d5701c8",
-        "description": "gallivm: asst. clean-ups in lp_bld_nir.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7f4d1c7486858b3331e29bf5176ce8668d7ebb71",
-        "description": "llvmpipe: misc clean-ups in lp_bld_interp.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "846900fe3fb93c4c5e40545489c075355a73272e",
-        "description": "gallivm: minor clean-ups in lp_bld_sample_soa.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5a1ad575c86db51fd6fb6e5d2c5fd428254ff485",
-        "description": "llvmpipe: asst. clean-ups in lp_rast_priv.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "27decb562eb4bcd8bdd271ead17d3c1a44ff7b0b",
-        "description": "llvmpipe: asst. clean-ups in lp_rast_tri_tmp.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0230d7a771707dc240f4ec77817e8285a2adc590",
-        "description": "llvmpipe: asst. clean-ups in lp_bld_blend_aos.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "10b9958aab6441ddbcade9435a590f3886685c0a",
-        "description": "llvmpipe: misc clean-up in lp_rast_tri.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1e3d8791a617ef19d60a291a029c7ee364ba097c",
-        "description": "llvmpipe: minor clean-ups in lp_state_fs_analysis.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b81b24c67da5b91a538bee8ceeb0003f0a70ec2a",
-        "description": "llvmpipe: minor whitespace/formatting cleanups in lp_state_setup.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f5e2c6d86ec11bf8f5e88219f3c1b1ca37057963",
-        "description": "llvmpipe: whitespace clean-ups in lp_rast.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "26eeb0a090e346d43a823d26184688f7c43b4696",
-        "description": "llvmpipe: asst. clean-ups in lp_setup_tri.c, lp_setup_rect.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c9cb9eec0516d51b1cc9c50125da3ab239b4567c",
-        "description": "llvmpipe: asst. clean-ups in lp_state_fs_linear.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "03b256f40517949f2dc07d5575d2e0f6af3719e0",
-        "description": "llvmpipe: asst. clean-ups in lp_state_fs_linear_llvm.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b61f3334d47c79b6f6ae6232824641e3204a1c92",
-        "description": "llvmpipe: minor clean-ups in lp_jit.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c6bd6140de26a14558cb61426a7d77c31bf98094",
-        "description": "llvmpipe: asst. clean-ups in lp_state_fs.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3717acdc43bd8dcdd329723ee81625329fabc187",
-        "description": "gallivm: clean-ups in lp_bld_tgsi.[ch]",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9a4504af596f4c0fff90ab151f982598bc641e19",
-        "description": "gallivm: asst. clean-ups in lp_bld_sample_soa.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f921a55d83a59f2785985115b02044bdf5baec8d",
-        "description": "llvmpipe: asst. clean-up in lp_setup_context.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f18a23d87c680faac7ba772e250e55e42256a136",
-        "description": "gallivm: clean-up in lp_bld_sample.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dee76459ca7701f6af4cf8200c880234e4345695",
-        "description": "llvmpipe: asst. clean-up and add comments in lp_state_fs.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8432e0ee3d3deb7542fa0cefadef0eafaedea167",
-        "description": "llvmpipe: asst. clean-ups in lp_scene.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c1ddfa15a405dabe684368ce4057270bbf5d6458",
-        "description": "llvmpipe: asst. clean-ups in lp_linear.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b3dc37d22d9fab7331cb8d692d203b9cac136a47",
-        "description": "llvmpipe: asst. clean-ups in lp_rast.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e060d7747db03b0ab86f7999a8a4b6340b304154",
-        "description": "llvmpipe: fix comment typo in lp_linear_fastpath.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d10f61db0d7f41c39d279630c5ae2d909c974eb3",
-        "description": "llvmpipe: asst. clean-ups in lp_rast_linear.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5622b802e2f41a2fa2a4ac629ce1f2c434e9c025",
-        "description": "llvmpipe: asst. clean-up in lp_state_derived.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5f671de4867cc2349f340ee0c4109cb3738bfa21",
-        "description": "gallivm: add const qualifier in lp_bld_nir_soa.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3d6192c0b8897ba66085403f465c64dea73ddb38",
-        "description": "gallivm: clean-up in lp_bld_nir.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "aa9bd004a93ab7a5caf4c1c978996d5168b6f5e6",
-        "description": "gallivm: cleanup lp_bld_arit.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "059afb8a900b47122b268c13628272bdfa63164c",
-        "description": "gallivm: asst. clean-ups in lp_bld_type.[ch]",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7111d20832729d185560b157fa338ff91f386b8b",
-        "description": "llvmpipe: asst. clean-ups in lp_state_setup.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "97e8837b4486309d0800aba366fbab8d439f0286",
-        "description": "llvmpipe: asst. clean-ups in lp_setup.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fe48f5adff7f6b5dc73332f16ec0cb06033edc98",
-        "description": "llvmpipe: asst. clean-ups in lp_linear_fastpath.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ff619d9cc550ca348d873b37ccf13175e60954df",
-        "description": "gallivm: asst. clean-ups in lp_bld_sample.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f203bfb375554080694b0ab0cd32e5b9ec500ca7",
-        "description": "gallivm: whitespace fixes in lp_bld_tgsi.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1c2d1ad7baeada76005e1b695a530bb8bb21d29b",
-        "description": "gallivm: assorted clean-ups in lp_bld_nir_aos.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d8fcd699f1249f1859ecc91b4f619bef3b08e1bf",
-        "description": "docs/zink: correct requirement for tbos",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": "c3d7de47cd64cc9b520ec9322953407582d2dc5a"
-    },
-    {
-        "sha": "5ac12eeebde702f2d0cc917a03e6deda0aeb7b07",
-        "description": "ci: Building spirv-to-dxil on both mingw and debian/x64",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "29baa326b93345634f4e8b49c0ffbec52761a778",
-        "description": "microsoft/spirv_to_dxil: Fixes maybe-uninitialized compiling error in dxil_spirv_nir.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2e79e4b6d873bb2cbd509c2b5b5e5f9f6631c2c5",
-        "description": "microsoft/clc: Add missing void to no-parameter function signature",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "484658a74be3e3f38301bc742a40634eb8c97e95",
-        "description": "microsoft/clc: Delete unused local variables",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a88ac30d3845bdd1ad82f09a2b1f3fec21118b1b",
-        "description": "microsoft/spirv_to_dxil: Delete unused local variable",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "beaaa84cea85e3accdc51a5b31f2a7b9a16671a3",
-        "description": "dxil: Fixes warning about comparing different enum value and enum literal",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0d0283f698b4fb7bceedc97a7e525956ed962589",
-        "description": "dxil: Sync dxil_spirv_shader_stage with gl_shader_stage",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ed7e78b0846de351d627eaedc5507cde35c55503",
-        "description": "dxil: Fixes compiling dxcapi.h with mingw.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4ae6cf2a74768ef23895eda881907a2f5254051e",
-        "description": "microsoft/compiler: Fix error from double extern",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2e61138d97b8d273eaae283bb7aac6756504df8d",
-        "description": "microsoft/compiler: Include stddef.h before using size_t",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "aa58ff191f428c5deb977523351b171148d9167a",
-        "description": "Revert \"winsys/amdgpu: use AMDGPU_IB_FLAG_PREAMBLE for the CS preamble on gfx10+\"",
-        "nominated": false,
-        "nomination_type": 2,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "8edafaa25c5d649af6c016a61383d784a1ebb078"
-    },
-    {
-        "sha": "b75ef3815ffab104a9e4b8cfbc55bf590925d052",
-        "description": "radeonsi: use helpers to access si_screen::aux_context",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bda1c081bd6e9e4ec144f963c8899cd0d17b211f",
-        "description": "radeonsi: add helper to use si_screen::aux_context",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "81d6ae31d6f18d6fd2894a8b6dfe4323eea797f9",
-        "description": "anv, iris: Enable compute engine with INTEL_COMPUTE_CLASS=1",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0c90c695f5537f2dd5d5bde412ade9ef0b750e10",
-        "description": "anv, iris: Add support for I915_ENGINE_CLASS_COMPUTE",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b27720f2a11094ff8776743f5ccb9cb8374c432d",
-        "description": "anv: Move STATE_BASE_ADDRESS programming into init_common_queue_state()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "09d12e6727a45988613dd5baf0ce63126f22952c",
-        "description": "anv: Add support for I915_ENGINE_CLASS_COMPUTE in init_device_state()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "60e29fc7c5be3cb15c170fc4a09f5518f48d3927",
-        "description": "intel/gem: Add support for I915_ENGINE_CLASS_COMPUTE",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2d0edbbd37e51e1e6f4eeb0227519edaa2922d86",
-        "description": "drm-uapi/i915_drm.h: Update from drm-next (2022-05-06)",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "aaf6eb6c462457955046e444e66329e6ffaaf38c",
-        "description": "ci: fix passing down MESA_LOADER_DRIVER_OVERRIDE for zink-anv-tgl",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b0cd7bc8c14ad38e300bc039cc2283dde03f1e87",
-        "description": "anv: don't expose EXT_border_color_swizzle on gfx7",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "fbcf65bfea52a03ab8c78eabcfd1c7193334c088"
-    },
-    {
-        "sha": "fd27d5157f218a80e1ea3985d4186b48fdde9f9d",
-        "description": "gallium: disable hardware select for crocus",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "6489af145ca2a21db049abf45c10608ad4372976"
-    },
-    {
-        "sha": "934bc2e8ca42d30376c11656a81676ed95dab24a",
-        "description": "swrast_kms: use swkmsDRI2Extension instead of driDRI2Extension",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fd91295473ee12b32e7f7b3d3b05d6338aa0c37c",
-        "description": "microsoft/spirv_to_dxil: Fix missing-prototypes errors.",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "c86ea7daa36b027ce331f2f4592565e4ff688a65"
-    },
-    {
-        "sha": "e46f4ec5f3f7ec26d98baf2633e6ba85e7222295",
-        "description": "ci/windows: Skip dEQP-VK.api.command_buffers.record_many_draws*",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dd78dc25e7d13f06a16456b3b2bb87dc68e708d4",
-        "description": "ci/windows: Add dEQP-VK.dynamic_state.* to the test list",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "672447be7f3d8e88b6f74afecf9f460de8d93842",
-        "description": "ci/windows: Allow skipping deqp tests if we have to",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1acf0b4bd4fdddec1d1d045115fc133256595997",
-        "description": "dzn: Support dynamic line width",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7d9afb93cc8a9d8afe120f2d71224cf8bd914f11",
-        "description": "dzn: Support dynamic depth testing parameters properly",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "91f3c7a9fbf4d5324210f245010ecc84205a5563",
-        "description": "dzn: Fix triangle-fan emulation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "741b5ded49d2f002995b92371a7e95fd7db42599",
-        "description": "dzn: Fix primitiveRestart support",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "81fb1cfdad4de4fc0231774ee97e971447bc9f21",
-        "description": "dzn: Prepare support for pipeline variants",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ec70291da99333f6d8afa0afc052a9ea30c8e448",
-        "description": "panfrost: Stop using sparse_array for batch BOs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "169e03800d0f0e8b66999bd2cf13d40ae4f6e782",
-        "description": "tu: Implement VK_EXT_color_write_enable",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "94be0dd0b86cf7dcedd94e732d8ee91bd16d091d",
-        "description": "tu: Implement extendedDynamicState2LogicOp",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c23eb993577d9fe5dcab9a3820cab1552f18822e",
-        "description": "tu: Fix partial-write LRZ determination",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b3b53952b00a1e6abf9273a073bd1253685a3dff",
-        "description": "dzn: Vulkan 1.1 wants maxPerSetDescriptors >= 1024",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "59a6ddd85c28868b3be2b1872f3867f7f9ca79c1",
-        "description": "dzn: Implement GetDescriptorSetLayoutSupport()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1554ece8bd6617a53d1e80e024ebbfef716e153d",
-        "description": "dzn: Add a dzn_desc_type_has_sampler() helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fb52be93762b34d49c547058478c36a449a28383",
-        "description": "dzn: Lower alignment requirements when allocating buffers or single-sample images",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "96a7f810726ad5a260aad082c91b616ff6b119be",
-        "description": "dzn: Check that no export is requested in the memory allocation path",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8c23d9db0bd8e1faed06e4e059a042d29c65041c",
-        "description": "dzn: Add dummy {Create,Destroy}SamplerYcbcrConversion() implementations",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "439b1fc8e8e3e9d7a40c1ccc71840c78366ea3cc",
-        "description": "dzn: Add a dummy GetImageSparseMemoryRequirements2()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cd8e322816325c06792f832ffe9e4f42719e4b0c",
-        "description": "dzn: Add a dummy GetDeviceGroupPeerMemoryFeatures()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cc7158fe2ffef17f6d6ed64aca4b7303df39ed40",
-        "description": "dzn: Return empty external properties",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fa79d036f1ca5db54126c0d2e724a6faf1322b2a",
-        "description": "dzn: Decorrelate external image info and external image properties",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cd4bc4893b1483dd21e14010a56dd073ff0ad7bd",
-        "description": "microsoft/compiler: Support load_sample_id_no_per_sample",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "65309dab45ad79ed1409471342680d3cccaba941",
-        "description": "microsoft/compiler: s/assert()/unreachable()/ in emit_intrinsic()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "82d3433d2a5e2e7acf79f60e7c98c54835247b6b",
-        "description": "microsoft/compiler: Set typed_uav_load_additional_formats when appropriate",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "303175cfecb166cc69736c1405ac2d3bbee9d82c",
-        "description": "microsoft/compiler: Images are no longer reprensented by uniform vars",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "cfdc7ee066ea86c87d128e68c43ce7103da3ef5a"
-    },
-    {
-        "sha": "cdbc8a8c85fff0bb2cabb384cf3f310f42fca1be",
-        "description": "spirv: Add a dst/src type to image deref loads/stores coming from OpAtomic{Load,Store}",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b78d3ebe722dac1c0093ff8f040f1443ffd02c49",
-        "description": "vulkan/util: Fill VkPhysicalDeviceIDProperties::deviceNodeMask",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "19ff5019b7551ef401db26da48d0199c1c88c1ca"
-    },
-    {
-        "sha": "e3a7ccba574e0e2a304f4441eeff2b2b7fb56b3c",
-        "description": "ci/vs2019: Convert mesa_build.ps1 to using PowerShell 7 && operator",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "47bce4773688821e5076158806cbbf87b29c9a8d",
-        "description": "ci/vs2019: Remove comment for windows_test_vs2019 that not true",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "97e7f6d068a02dd79c476bfea962b7b346ff5ea8",
-        "description": "ci/vs2019: Split install of vs2019 and choco into separate Docker image",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cfa67ec75094251531c8aec31a50e20475ba27d6",
-        "description": "ci/vs2019: Split choco install output",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "322c807b3ce3f40216b65466e3f3ae17487ac856",
-        "description": "ci/vs2019: Install all build artifacts into C:\\mesa-deps",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9ceb170cb19af3c2f13403f240c8650d8f40b442",
-        "description": "ci/vs2019: ignore _build and _install directory by write * into .gitignore",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "33e5b08a7dddf5dbeb0b3e2cd49ac05af353d182",
-        "description": "ci/vs2019: Reduce the vs2019 build tools components to be installed",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6d23d87325765a1f87a7bfa06b055b8e5fa457a4",
-        "description": "ci/vs2019: Show the total vs2019 install time",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d960151dc2a4dc925fdec8337955ce5b3f565135",
-        "description": "ci/vs2019: Split call to C:\\vs_buildtools.exe into multiple lines",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a740b8430a73f177ffddb24237b394ba27771a4a",
-        "description": "ci/vs2019: Add a dedicated script for entering VS dev shell",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "24e177aff23f70be8fffdd2a578efe98cfa6927a",
-        "description": "ci/vs2019: Use shared VULKAN_SDK_VERSION for install and build vulkan related packages",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "918dbc1fa86c743ed2cb25db071a7e55b75071ab",
-        "description": "ci/vs2019: Disable progess bar for pip3 install",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e301f31116f5106b449395267f5f19dadff94887",
-        "description": "ci/vs2019: Disable progress when install python",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "86d6e532b3a501cb994e0d1d2a4d9a1febad591f",
-        "description": "ci/vs2019: Ignore error when removing directory recursively",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5baaa3b361ce0f2f6cee5736fa50872b0c99f398",
-        "description": "ci/vs2019: Ignore cert install output, it's too long",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "560883406843dfe14272c1514ea55f0e230a702e",
-        "description": "ci/vs2019: Do not install subprojects",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d1e7e58807bbf4ff4b81cc079006823d722aab1d",
-        "description": "ci/vs2019: Rename to vsInstallPath",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0511f0eb8a52b9fa19724e99108ba22f7b7f4678",
-        "description": "ci/vs2019: Give each option its own line in mesa_build.ps1",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f2aba8564c2efdfd60d22d052de54052ac115ae0",
-        "description": "ci/vs2019: Update editorconfig for ps1 files",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "66eec65c5b4d76f7abb4c62c01ded419fb8d9aae",
-        "description": "ci/vs2019: switch to powershell 7",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6445379f04d3f77c4395221e5f7ffa94c309f83c",
-        "description": "ci/vs2019: There is no meaning to set $env:ErrorActionPreference",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b240be28e3193e83632848bb32eb1013bddfc285",
-        "description": "zink: check for pending clears to determine write status of zs attachments",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "901f5e6a31f65bfe03f2402ac11c0ae6a5140fd3",
-        "description": "v3dv/ci: increase fraction to 10 on v3dv ci jobs.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8c0f3cdfac5dc3d2bb5ee2fb153481e4b786fdfe",
-        "description": "zink: clamp dynamic renderArea to framebuffer size",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "c81cd989c857a5b7384f534407b0ec1e9ddedf12"
-    },
-    {
-        "sha": "87c7e757211b393f5b352ba346a927622c996abf",
-        "description": "zink: fix cubemap lowering bit size",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "2d745904ca7022afdc86cb66e294cedfafa0fcb1"
-    },
-    {
-        "sha": "de6af39534c6372395e09134809b8d6d98bd4bc7",
-        "description": "zink: fix cubemap lowering for array samplers",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "2d745904ca7022afdc86cb66e294cedfafa0fcb1"
-    },
-    {
-        "sha": "876bfb6bc36b2000fa0c7e8c1ef7c26b5d5c5180",
-        "description": "zink: skip some emulated cube code if the extension is present",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d8b4ceb27a763a74eee38233f8ace40d0734cfb7",
-        "description": "zink: rename nonseamless struct members to emulate_nonseamless",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "08858070b11a6efdd0367a3b07a0de48d0ab2c4e",
-        "description": "zink: use VK_EXT_non_seamless_cube_map when available",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "616773e62b59ca7e163d2193668c8e03aa722ee6",
-        "description": "zink: hook up VK_EXT_non_seamless_cube_map",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "03d7f31054b16b17eaafe1714c4648151861c014",
-        "description": "zink: don't print VK_EXT_shader_atomic_float warning for nir_intrinsic_image_deref_atomic_exchange",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d8877437d6125c63b4bfe0b048981770f25a9d16",
-        "description": "zink: avoid uninit values in renderpass state",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4c908e3d7b223e2748bfefeff3291239e1007aa0",
-        "description": "zink: only add necessary binds during dmabuf export",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "4eeabb59f59bf98f7db69754a00e4ba2452dea9f"
-    },
-    {
-        "sha": "44cf6f7564d4bdcc15299007fc12b32e2e9ad1f2",
-        "description": "zink: fix generated tcs deletion",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cf34d3fe05004c66145a6faf39c8883b71861c8c",
-        "description": "zink: unset generated tcs pointer from tes on deletion",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c36c5ff057aa6c65e0beb75810c91aea1499634a",
-        "description": "zink: use the patch_vertices value from the shader key, not the context",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "338d98643906141322432874c91a1a8528a85e3a",
-        "description": "zink: fix generated tcs update path",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "336b5c88231c98adb4e247f192ee5bf23401eb56",
-        "description": "zink: fix dynamic stride conditional in pipeline creation",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1a89e358d62dc68ede28ca7e838f3ffc66fc4107",
-        "description": "dzn: Enable dEQP-VK.pipeline.vertex_input.* test cases",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ac34866166cd62846589604bfa74aa6b49aa94b8",
-        "description": "dzn: Allow some non-native formats to be used as vertex inputs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b53f9011b1a298022dc26bbbac3427fd9f6af0ed",
-        "description": "microsoft/compiler: Add support for more scaled formats",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b0b9b500778128d8a3df76d76b2f849ae6725379",
-        "description": "d3d12: Move d3d12_nir_lower_vs_vertex_conversion() to a common place",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c378bbab7579a7a900372ca01df5b7aeac85d7c2",
-        "description": "mesa: Use C11 alignas for cross-platform SSE support",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8fbad5e42fd7084c1838ab5dc9c8e39f47d4e289",
-        "description": "gallium: clean up PIPE_ALIGN_STACK-definition",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d1349eb50014a63da7e060a194fbab31c5ea7880",
-        "description": "gallium: remove unused macros",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ea7ba77be99f3d0729b4c30a50f504d0f8744bd7",
-        "description": "gallium: remove repeated check",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1b53fb625e01a997a72197600ae1689de813e2e5",
-        "description": "gallium: use c++11 alignas instead of PIPE_ALIGN_VAR",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "04ca04ba46eb49ef46725b1e0fd7430d9aae4b9a",
-        "description": "gallium: use c11 alignas instead of PIPE_ALIGN_VAR",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "69d2d38f6eae83b3fac0591340c8f64f04267381",
-        "description": "llvmpipe: use c11 alignas instead of PIPE_ALIGN_VAR",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3c82e23f9ac75db6f8ce1b47b833524956cb0e83",
-        "description": "gallium: reorganize includes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d791184b465b2624703b09ce9a6e41d98d860cd2",
-        "description": "gallium: remove stale comment",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "0d4898ae8068d3984242775a6fcc87f280c0ac5a"
-    },
-    {
-        "sha": "e3bc78b8e398348bc1993b1c713b8917bd4d53d9",
-        "description": "util: use c11 alignas instead of rolling our own",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2c430445079a7ab53c922e7adf57aaab6e477e39",
-        "description": "vulkan/util: assume c11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ec9d7872acea97a5ec8aa9e525ff35ae1b2886c1",
-        "description": "glcpp: remove outdated msvc hack",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3a62badb2e1606274f7e36302c96b96f57e90b2d",
-        "description": "util: use c11 alignof instead of our own",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e83f13c04ef6a3be281b324532cd5a133439f1a6",
-        "description": "c99_compat.h: assume c99 support",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ffd26b1c3bfac5b5df00c4621fce7c4799d871a2",
-        "description": "llvmpipe: assume c99",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5dc30f93428c47c85c8f4cba1e739ed2d7436d29",
-        "description": "util: sort includes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7c864499eb241f2e9a5b2202fb4a0450decbc9ee",
-        "description": "dzn: enable two more exts",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b45f1e24aef19597dbca0be5717da3489a071a86",
-        "description": "dzn: use a null-rtv to handle no-attachment",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "2d0798440b4f89068a855e1ff6d78f302ef3c93f"
-    },
-    {
-        "sha": "bd4c8f562c94ee17c1873b066c6a43ed19f28c97",
-        "description": "microsoft/compiler: Truncate function names when needed",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "69339066fc9c44a9dc0b779b5d0d36bc3fdb78b6",
-        "description": "microsoft/compiler: Pick a type that matches interpolation mode for structs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "51bdac48465186d9abcae20a57674adc2ba95cd7",
-        "description": "v3dv/pipeline: expand nir_optimize, drop st_nir_opts",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "36c547342ac8b41421ec30815bb866210e1457e1",
-        "description": "v3dv/pipeline: call nir_lower_explicit_io after first nir optimization loop",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "481df13f2726afd6ff9cbe4043d006023162be34",
-        "description": "nir: get res binding using component 0, instead of asssumig an uint",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d364d445ad7b491ebd8bcf991799fb38437541a0",
-        "description": "isaspec: Handle patterns bigger then 64 bit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "119d8488ddc78cf83a93ffb25893dd26c9c23eed",
-        "description": "isaspec: Extend split_bits(..) to accept a bitsize",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "96f0944a69ddb3dfdb5c36f2832b5878e31d6da1",
-        "description": "ci/panfrost: add Blender, Warzone2100, Freedoom and Unvanquished traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2f474462f984de604383fb9422b0e6e0f89e3ce4",
-        "description": "ci/crocus: add Blender, Warzone2100, Freedoom and Unvanquished traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "df298cff1518e74e11bb8a2145a61f03c198ff07",
-        "description": "ci/virgl: iris: disable Counter Strike 1.6 trace flaking",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bb1af12b8a417c5a4c5ff32b2a570236d072fd3a",
-        "description": "ci/virgl: add Blender, Warzone2100, Freedoom and Unvanquished traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f58168850fdd443bf60b68d39f370112b0f4d743",
-        "description": "ci/iris: add Blender, Warzone2100, Freedoom and Unvanquished traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "de9378e7013f32e8269429541ce604263e34b33f",
-        "description": "ci/llvmpipe: add Blender, Warzone2100, Freedoom and Unvanquished traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a7f7f2a1ddf96f0338d3ba69a0ca2047b6734114",
-        "description": "ci/freedreno: fix A530 glmark2@ideas:speed=10000 trace",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e8cf79f6642e085e9c5b731f23f611992f99f764",
-        "description": "ci/freedreno: add Blender, Warzone2100, Freedoom and Unvanquished traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4a7446e4e458a5ad7bded5378670d60721ff58fc",
-        "description": "v3dv: handle barriers at the end of a command buffer",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d6702b99a2e76f7b14a378a47c7d99321b8694ed",
-        "description": "v3dv: merge pending secondary barrier state into primary command buffers",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "f7ce42636c2553a12a842a16789db97023a0ec31"
-    },
-    {
-        "sha": "a97f78eb144ebc8964b891bbf708659e70e5f1c3",
-        "description": "broadcom/compiler: disable flags optimization for loop conditions",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "9909fe6bac53dc32c6599820387545f5019f8a85"
-    },
-    {
-        "sha": "2b0e45b18e0c29b9a3487df683369864f86d5c88",
-        "description": "ci/etnaviv: gc2000: drop flakes from fails",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "93173a3a58943ef789c1f1fa7fb788ed7ca3b7d6",
-        "description": "ci/etnaviv: add recent flakes for gc2000",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7596c6d34ecd4570978120ffe7686f3d599fb4b1",
-        "description": "ci/etnaviv: disable tests which takes too long",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b02c88680ea4e1d383f1f5397cb5d10b09f5336c",
-        "description": "ci/etnaviv: add recent fails and remove 3 unexpected passes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "016f9e89d4abaa98f09ab3d4751d1f3b54065386",
-        "description": "ci/etnaviv: sort fails.txt",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4ab49e2530a0dfde64235ed63b38d909dba60213",
-        "description": "dzn: handle stencil-attachment-optimal layout",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "a012b219640e875aa552b37dfdaf69336d5863c7"
-    },
-    {
-        "sha": "7dc5255469c2f0f29d9e9cf1381cbb7a50492473",
-        "description": "dzn: correct assert-condition",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "e293691a99187361b99c45f27665227317a0a2ce"
-    },
-    {
-        "sha": "427c34eeca918c80f58de9fd14a0a52a9e4be933",
-        "description": "ci/valve: do not extract the install tarball on the runner",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cee1142fa31e0e75019562b2d9c3d7f81790a13f",
-        "description": "ci: bump the hang-detection tool in the test image for Vulkan",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fa645861af6b357aef2e8ae7923a1143da4ff71f",
-        "description": "r300: expose PIPE_CAP_LEGACY_MATH_RULES",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fbcf65bfea52a03ab8c78eabcfd1c7193334c088",
-        "description": "anv: VK_EXT_border_color_swizzle",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "efa58f6b47abf558b3e89b41cabae6656e9160b8",
-        "description": "lavapipe: VK_EXT_border_color_swizzle",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4c5f7b86eccf9ebfb6e546f2e039effa64370128",
-        "description": "gallium/u_threaded: fix buffer busyness tracking",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "e9c41b321488c23b7d8ec5744f68218bac753505"
-    },
-    {
-        "sha": "ce60195ecdf8d7bdd5161bbb3803c185663a00c4",
-        "description": "anv: Use NIR_PASS(_, ...)",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "844a70f4391d12f9c6f408ad8d9e1390cd507034",
-        "description": "intel/compiler: Use NIR_PASS(_, ...)",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "65bafa2a35aca4117bf43e79eed9b981f9764237",
-        "description": "ci: uprev piglit 2022-06-09",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "399104f0498575f70cf0e8c369e8b888cfd70881",
-        "description": "zink: fix up KILL to a more sensible log message",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "23892bff6b4394eb7f445e6eff4d07ea16c1b4ab",
-        "description": "zink: unset res->swapchain upon killing a swapchain",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ea9e30f9d27593d7fdcc95e6559951127110b8d4",
-        "description": "zink: add implicit sync workaround for non-mesa drivers",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2ef6b0aab1c7b99b85f2d88ced44a63f28cfca6b",
-        "description": "Revert \"wsi/x11: Avoid using xcb_wait_for_special_event in FIFO modes\"",
-        "nominated": false,
-        "nomination_type": 2,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "44a20baeb8bb51c7ab99e30fd7f4bb19a0b555b6"
-    },
-    {
-        "sha": "ee587f202e1926d9ceec167f826fd6695e6a66a4",
-        "description": "Revert \"wsi/x11: Don't leak xcb_get_geometry_reply_t.\"",
-        "nominated": false,
-        "nomination_type": 2,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "24049b8771be7bd9044e005565ab9dc327e9dd63"
-    },
-    {
-        "sha": "4bee678df3afb654c4f52987fefd039750609976",
-        "description": "zink: defer old swapchain destruction",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "8ade5588e39d736bdeab9bdd8ffa7cbfb6a5191e"
-    },
-    {
-        "sha": "1dfa19c541d2d1da1ba3f440d4d0107c4968b3e0",
-        "description": "zink: keep a count of async presents occuring for a given swapchain",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "8ade5588e39d736bdeab9bdd8ffa7cbfb6a5191e"
-    },
-    {
-        "sha": "892f42271fcd67566db01ef651a5a491b54f262c",
-        "description": "zink: use separate pointer for swapchain presents",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "8ade5588e39d736bdeab9bdd8ffa7cbfb6a5191e"
-    },
-    {
-        "sha": "9bdd0854eabc799eced4994a9ea270e57c9ca3c1",
-        "description": "panvk: Use common CmdBeginRenderPass",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f00e0bfd8a9562a31c51710bc5211bd7d9a059ad",
-        "description": "panvk: Simplify depth clear preload condition",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ec2bf34d97d31225ae7727dd6dfa2dabe54e6d8b",
-        "description": "panvk: Fix stencil clears of combined ZS images",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "588ee38351e866ed2ce4682c12c4b43edbe64f27",
-        "description": "panvk: Clear Z/S attachments without a shader",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "03c34a8887eeb664e043ba212cd774c1cf3b1799",
-        "description": "panvk: Remove unused pushmaps",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2136643a513979effd7d6e2b70c5a65cc32eb516",
-        "description": "panvk: Don't specialize clear shaders for RT",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4bd6519b6bd98c5d0ec56a6eddf119e6cf97748c",
-        "description": "radv: remove remaining unused pCreateInfo pointers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "653ded570411537c3045523d9c1d8582388f37bf",
-        "description": "radv: update the check to determine if rasterization is enabled",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e8a0f514d413499cfab7b29c5d82662199c807d3",
-        "description": "radv: update the check to determine if dynamic sample location is needed",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "15586cdaf8d510278a5b0128415415331e504c61",
-        "description": "radv: update the check to determine if dynamic discard rectangle is needed",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a42190b6479aa0cfee8faae1b13a3902cb446733",
-        "description": "radv: update radv_is_vrs_enabled() to use radv_graphics_pipeline_info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "839b1f4e9145a615995ec732a733d71fa79c038f",
-        "description": "radv: remove redundant check when importing vertex input info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "11e55bce4939f1ce4801ae84a72f4f6e04c61bbd",
-        "description": "zink: cap driver inlining using ssa allocation limit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "44223e5f28c42ff19a5ddba182b403315bbac3ef",
-        "description": "panfrost: Disable CRC at <16x16 tile sizes",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "2e97d7c8350385dbf962a1d6caa5acae667d1c95"
-    },
-    {
-        "sha": "cac0578ee58c5b0838ececbe2b7aa5f7c29874c3",
-        "description": "panfrost: Inline pan_fbd_has_zs_crc_ext",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "11bbcc423c279d7d16b2db29cd6e9bf75845ec21",
-        "description": "zink/ci: update list of expected failures with RADV",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3cd39c2b32fbf3fd6b92b5866cf2be6c9e6c4d90",
-        "description": "tu: Enable VK_KHR_swapchain_mutable_format",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "79b88852c85bdb122d73464bc0f0f907f3639214",
-        "description": "panvk: Return VK_ERROR_INCOMPATIBLE_DRIVER for Midgard",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c43882ad544af3cddd55278212f11cbd4686da63",
-        "description": "panfrost: Allow pixels using discard to be killed",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "96e7e92f0dca44cc47b22e2e1a60e69eca632873",
-        "description": "intel/fs/xehp+: Emit scheduling fence for all NIR barriers on platforms with LSC.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "47773a5d7c85733c1d007a7374e9373ee354bd1b",
-        "description": "intel/fs: setup SEND message descriptor from nir scope",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "92f9a509cff019ab309d17d1ec3b20e1b1e318ab",
-        "description": "zink: more lavapipe glcts fails",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d64fbb88862ba17bcece83f01a84734d8c035e4b",
-        "description": "zink: warn on missing customBorderColorWithoutFormat",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "92e61dcee53e95754b79643811709a09d9316ab4",
-        "description": "docs: show and link to the new macOS CI",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9490ae55612e3634ea69f8e48c13dfddfd085931",
-        "description": "ac/gpu_info: clamp gart_size_kb and vram_size_kb to fix buggy kernel driver",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "aee8ee17a5056bb8e1f3144d34b52612ac7d3b25"
-    },
-    {
-        "sha": "bdf3797aeb77a8346c1af6d86f77a7a834cca777",
-        "description": "ac,radeonsi: don't export null from PS if it has no effect on gfx10+",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e4b70887796b3eaf1c372d9240609ea83d5b1f6e",
-        "description": "radeonsi: allocate only 1 GDS OA counter for gfx10 NGG streamout",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0f48c581f90659183f6d8c3570c76f4510690950",
-        "description": "radeonsi: allocate GDS only once per process",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4d4bd7cb5b68e81b9c5637855135a767c5857477",
-        "description": "winsys/amdgpu: add a kernel GDS management workaround retrying on -ENOMEM",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dfa8dcf80e44b66311513bbb80074da25722c5e3",
-        "description": "radeonsi: remove streamout code from shaders if no streamout buffers are bound",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dbbbe73d050920cc149bf99be912221a30920750",
-        "description": "radeonsi: fix NGG streamout hang by allocating GDS in the right place",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3f900df0713f4d33cdd8d0d963c71668f2b37dec",
-        "description": "radeonsi: inline gfx10_emit_streamout_begin/end",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "002e34d860800d5a6ca92bb8ad95bbc65ba535d4",
-        "description": "radeonsi: unconditionally enable the streamout overflow query with NGG",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0f4f98ea502954b1d8ed9926eec6e501da0cbe62",
-        "description": "radeonsi: fix a crash in gfx10_sh_query_get_result_resource",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fc392ff104d688bc30b36cd0b4ef0587750f3194",
-        "description": "radeonsi: fix an NGG streamout hang with monolithic shaders",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a9f7744cfef6edb7360bcaead1abbf99379f5580",
-        "description": "radeonsi: rework how vs_state_bits is set and unpacked",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c2342e67701229e36feeee312d2b3ce827cf874a",
-        "description": "radeonsi: move GS_STATE bits to the end to make space at the beginning",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c9c7dcb61939ac1d21c0e4ef20e3a1ee13eeadf5",
-        "description": "radeonsi: rename and regroup VS_STATE definitions",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "091617002f245d463c3ffc2a3411defb350a63d6",
-        "description": "radeonsi: rework how VS_STATE_BITS are set for VS, TES, and GS",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "928e5f240d7a96b1ee54f8a89464df8511efbf90",
-        "description": "radeonsi: simplify how pipeline statistic offsets are computed",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "57b7dcd9dbc168d352d424f06d1d24d91f4d7b34",
-        "description": "radeonsi: add BREAK_BATCH at the beginning of IBs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "eea46094ff875e952588775fe2613bb29f908117",
-        "description": "radeonsi: set INTERPOLATE_COMP_Z to 0 to work around an EQAA bug",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4f3c74ddfb7289f729cb719e777b2c07ca1e79ee",
-        "description": "radeonsi: determine DB_SHADER_CONTROL in si_shader_ps",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8e879dcedd1da32de8046d19996e059d5dc01088",
-        "description": "radeonsi: restructure PS no-export fixups",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7cbea71aababc68c2a91587fac00972f2ba10c3a",
-        "description": "radeonsi: fix polygon stippling without color and Z outputs (v2)",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "56359e9f6e46b224754e1993ad63ceded1ff211c",
-        "description": "radeonsi: remove unused dword from wait_mem_scratch",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8e0d34ce98725420ef0156186fc00f1c4d00eb80",
-        "description": "radeonsi: fix uninitialized wait_mem_scratch_tmz",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "705e9af29a854359ca883dff11f0f84618cab430",
-        "description": "radeonsi: don't use info.gs.invocations if it's not GS",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3b9cd2469ea55a9239c29a9ca6dd2e24e9190f07",
-        "description": "radeonsi: print LDS size in bytes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8edafaa25c5d649af6c016a61383d784a1ebb078",
-        "description": "winsys/amdgpu: use AMDGPU_IB_FLAG_PREAMBLE for the CS preamble on gfx10+",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1592921c599620524fd03575bcc7f81594a712bc",
-        "description": "radv: Move some rt intrinsics to the top",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cbcdcc412c95117659294392b85461704984e16d",
-        "description": "dzn: enable binding_model tests",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5288fe31b4c08f7932951948cbbda3529d7fe942",
-        "description": "microsoft/spirv_to_dxil: lower cube-images to 2d arrays",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "00837c6bef92e733ed5eb3eab4f51e70427cc7b1",
-        "description": "microsoft/compiler: make sampler-lowering optional",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fff03d2bd3452d0472886b72b5cc7c7770796e80",
-        "description": "microsoft/compiler: mark image-functions as such",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b386802bb96f30a62ff839f1a22d60f01ca98c22",
-        "description": "d3d12: move cubemap-lowering to common-code",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "98d7a9a9e4fe25395207a7a88061f15328cc77eb",
-        "description": "zink: run copy_prop_vars during optimization",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5a95c6b3282ed540ee42a5bfc1924168b0b3e3b2",
-        "description": "zink: rewrite atomic ssbo intrinsics as atomic derefs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0afb2e34c2dccd812fceaea4c98ce8d27ca82286",
-        "description": "zink: more requirement docs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3b8e4457d2e3dbf04af33a8ac2f3b2a97f4e8c88",
-        "description": "zink: add feature req for border colors",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6b38907b7f76942466f214ff42a89412d7fae50b",
-        "description": "zink: fix feature requirement",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9ccc68397365b4d38257715184bb446eb94fa6d7",
-        "description": "anv: Implement VK_EXT_non_seamless_cube_map.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3d37291e1c1e2d9d0319bad9888f518a1bcfba04",
-        "description": "radeonsi: prevent recursion in si_decompress_dcc",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "813e60f1eada4af49a1755f83db7531ae598b15b",
-        "description": "tradeonsi: fix preamble state producing incorrect packets",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "32c7805ccca331f726da684a4e74f7d1138daa3d"
-    },
-    {
-        "sha": "dcdd31ae9646c51bdf9cdd4dbfd34d4d983b8eef",
-        "description": "aco: Remove r128_a16 MIMG builder option.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0ca6653ada36cecbd9a7a3e4960b4a1ae2dfc725",
-        "description": "aco: Print r128/a16 MIMG bits separately.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1dd291529821210f4b0426b6e8bdb9c515b11af7",
-        "description": "zink/ci: skip two KHR-GL46 tests that timeout most of the time with RADV",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8f0e8808c0c0486943f3aa73af7d80296b8da222",
-        "description": "radv/ci: rename deqp-XXX jobs to vkcts-XXX",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "19682028eb0a2143c18ab2a26f3b23b7f74b2335",
-        "description": "tu/autotune: Prevent division by zero",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4846d53b18a768390050ae168965f9619a2fafb2",
-        "description": "turnip: Fix out-of-bounds builder->shader_iova access",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "05329d7f9acabbc9306c9538a30b502d4c580d38"
-    },
-    {
-        "sha": "003d05281011b77b24e56d9168d3104ea8ebe021",
-        "description": "ci/windows: add back build-error detection",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "bf3c772e5e5854d60dcddceb29a6849701423320"
-    },
-    {
-        "sha": "3933752c7f7b224185c5c8ff999dcc85526f9441",
-        "description": "turnip: force sample interpolations for sample shading",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d9ec7df2f43975cf77d261adac2f68489172fd99",
-        "description": "nir: Fix flat new_var assignment in create_new_io_vars()",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "bcd14756eec808f2f04d38a8880488188eb0eef0"
-    },
-    {
-        "sha": "b12417a2c717747e79e572b6d31337d92050f18f",
-        "description": "microsoft/compiler: Lower fquantize2f16",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "279f32e042c3ef9bc4311fd802ecebba61cb17a7",
-        "description": "util/u_debug: Use 'initialized' instead of 'first'",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1f323437dfd6f31a0bc0d545a1b4cef7391af83a",
-        "description": "zink: add new flakes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "070ce2307843a055f0d5863af751fcdd669e57d6",
-        "description": "crocus: Enable PIPE_CAP_LEGACY_MATH_RULES.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fa118be9aeaab714d70c0a84805446c672333bfc",
-        "description": "iris: Enable PIPE_CAP_LEGACY_MATH_RULES.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3d4eaba63a22c4384d9be917de1d5f72bdee807d",
-        "description": "Revert \"nine: Disable optional use of TTN when MUL_ZERO_WINS is available.\"",
-        "nominated": false,
-        "nomination_type": 2,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "7f01299c40ef5d301bbbb99fc6a6420aa27a65dc"
-    },
-    {
-        "sha": "c761f9bde5fe5b789b913d7ce8678c743454bf67",
-        "description": "gallium: Rename PIPE_CAP_TGSI_LEGACY_MATH_RULES to drop \"TGSI\"",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b61097dd45992988c0252c3540824090fb063395",
-        "description": "tgsi_to_nir: Set use_legacy_math_rules for TGSI_PROPERTY_LEGACY_MATH_RULES.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1e2e52eff73ac0703cf432b5c716c5d2c56024e3",
-        "description": "nouveau/nir: Implement mul_zero_wins behavior for use_legacy_math_rules.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a05bfff8cb2f1e55ba7e4e1363e1d2be97c07b91",
-        "description": "r600/sfn: Implement 0*x=0 behavior for use_legacy_math_rules.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c93e5a7c94ba0ef9e5c1ebfd005ac1c24bce0f8e",
-        "description": "nir_to_tgsi: Set LEGACY_MATH_RULES cap for use_legacy_math_rules shaders.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "76b203eb39dfd787a3db17099f5f92f475f7b3e7",
-        "description": "gallium: Rename MUL_ZERO_WINS to LEGACY_MATH_RULES.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cf265c66066828a63641497086c8d29c004a99ed",
-        "description": "nir: Rename is_arb_asm to use_legacy_math_rules and document its meaning.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0d90b168d82e94259c3654270886c154bca3ad0f",
-        "description": "zink: update tu a630 baseline",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bbe5136658f048b6403f31f0d01dff856dd3ff81",
-        "description": "zink: fix 32bit bo rewriting",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "150d6ee97e374b5f520fc1ec3817a8a09c4b80fc"
-    },
-    {
-        "sha": "ea8fc23119063eb879aadd3360141226b6ac9287",
-        "description": "zink: avoid adding more 64bit alus during bo rewriting",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cdaa601de38a147aff0839d9622e281ac7a80b33",
-        "description": "zink: scalarize when rewriting explicit 64bit io",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "150d6ee97e374b5f520fc1ec3817a8a09c4b80fc"
-    },
-    {
-        "sha": "5b2f850425e4c841529ff8339a1fbc5a26e9ff8c",
-        "description": "zink: rewrite 64bit shader i/o as 32bit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5ff65a6ae78d4a80a0aaa1c877ea9f86209f62c0",
-        "description": "zink: implement nir_op_unpack_64_2x32 in ntv",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "24725e572eb7814d3cf279b5733d1ea5c4f55cf6",
-        "description": "zink: improve/expand manual xfb emission",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "26338c4abbc940da144e2ce116e42754e4ea7e45",
-        "description": "zink: if a variable is flagged as being xfb, treat it as manual xfb output",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e9d28cbe3fbe56076f85e9e309211d831368d1fc",
-        "description": "zink: fix variable locations in manual xfb emission",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fd516b0a9fb537b09775e09473618f42f02c55ca",
-        "description": "zink: flag all shader i/o variables as !is_xfb",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "31ba19ff681224208943787cedd0b1ada11329e2",
-        "description": "zink: fix ntv partial stores",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b59d67431dcd3df2ed8c43daecae1e5ca53dbe7a",
-        "description": "zink: run more int64 passes during optimization loop if int64 isn't available",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7c75ce6204e1bcf8a2ac390c3e98bd93649aad43",
-        "description": "zink: don't lower pack/unpack intrinsics",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3d8131341b6f4f3f785d4a34a971dd992d0ed8b6",
-        "description": "zink: always scalarize pack/unpack alu ops",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b1f684c80be66ae53c45ddd96770ffd80a7e5bc1",
-        "description": "zink: run nir_lower_alu_to_scalar in optimizer loop for 64bit lowering",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "941046be802b93e43c544bf4f60a828152db6716",
-        "description": "zink: break out nir alu typing in ntv",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "02a3a5ff3152cf85d5894d5ee8c708f1c566c6d4",
-        "description": "zink: flag optimization pass after inlining uniforms",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a8e718c7e597cfb908e18e6be81ebb85fa6ba81e",
-        "description": "intel/compiler: Fix A64 header construction with a uniform address",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "30b57f10b36d9824a3de8285c667cdd240e61465",
-        "description": "vulkan/wsi: Signal semaphores and fences from the dma-buf",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "18bd05827d175b1a37bac2db560ae65ad7d71d3f",
-        "description": "vulkan/wsi: Set memory ownership after signaling fences and semaphores",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6930f0886054726a63330fb8e1bdf512d9b0e965",
-        "description": "vulkan/wsi: Re-arrange QueueSubmit code in wsi_common_queue_present",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bee3d2e156ad9db8169b3bb69d3da86279dbf326",
-        "description": "vulkan/wsi: Reset fences earlier in wsi_common_queue_present",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d211f4891abae5e681eb6eba00bccb5e850e5b03",
-        "description": "vulkan/wsi: Use a STACK_ARRAY for stage_flags",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e60bb58de7094ac08d42adc200ba8633c7346435",
-        "description": "dzn: Init sync types before wsi",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0c764afac10596a4e6c158e5b6703fafc4893f1b",
-        "description": "turnip: Set supported_sync_types before wsi_init",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4c95b574d193c974090964880f547f4f0af12b18",
-        "description": "turnip: Use the common QueuePresent implementation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "513d73b160e5f5a47d98db7978b3b43893a720c5",
-        "description": "turnip: Use the common AcquireNextImage implementation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "12920b227fcfbba560ee8f77fdad04d4cc931a80",
-        "description": "pvr: Use the common AcquireNextImage implementation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "384c31425abb51b75cbb595008523461f6dbbd72",
-        "description": "lavapipe: Use the common AcquireNextImage implementation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e60ff7f1aa6ab780defaff69d182450a2884891e",
-        "description": "radv: Drop create_sync_for_memory",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3ed70d775c84c433d1b0612b094727b81d1510f2",
-        "description": "v3dv: Use the common AcquireNextImage implementation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a09e08ae955ee9c31338e865da744a4adb03f24c",
-        "description": "panvk: Use the common AcquireNextImage implementation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b03216de9cc8a9d22db69bf96d82b1898806e7e8",
-        "description": "wsi: Always signal semaphores and fences in wsi_common_acquire_next_image",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e32892130fcc0003c71e7b4fca9da8c87a00cd92",
-        "description": "vulkan/wsi: Fix a signal_semaphore_with_memory check",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a820dc4a8e96239e60fd5478dbe34484396212cb",
-        "description": "anv/wsi: Stop resetting semaphores",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "18b3ad5a095f75e4d1eb63991d815d9af4282169",
-        "description": "intel: Set a more useful fake devinfo->gtt_size in no-hw mode",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "65d6708bc33694b662d1195fd65842b85b7afc99",
-        "description": "anv: Remove FS executables when applying the null FS optimization",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "73b3efcd59ade6b9dc8c4cce994d7fbe5c1f0cac"
-    },
-    {
-        "sha": "17818800d0574ff41c6e3d8ac95a39985a7611b7",
-        "description": "radv: Implement VK_EXT_non_seamless_cube_map.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d5d16a4f0052ae550443655b50b65b63d9a97da0",
-        "description": "vulkan: Spec update to 1.3.217.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "570020c810667b4493f84eae475b57aadf5bee9c",
-        "description": "lima: implement lima-specific blitter",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "133620196d57cc1c6874c806095fc3cf1f054274",
-        "description": "compiler/types: Don't place members in the previous substruct's end padding",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2aeb83117ad7264b71cd4980187b29031a59953f",
-        "description": ".gitignore: Qualify the path for the ignored build directory.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d2677cb6d78939d1a51e6d51df48bae606f10785",
-        "description": "mesa/st: Abort the linking on driver link failure.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c426e21ff14366ce82c55d0a3ba3e5635aed2e2e",
-        "description": "turnip: Reverse the order of walking pipes or tiles on odd rows.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "790fc8455f75de07afa4131d1b47ab01565e8219",
-        "description": "ci/turnip: add a link to VkPhysicalDeviceMemoryProperties failure",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e8d4eaf1725c2a7873a8ee7dd33b18a09472c178",
-        "description": "ci/iris: Disable skqp until it can be stabilized.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0ef513699d39972081409352320af6cea5977203",
-        "description": "util: Add unittest for timespec_get",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ef44bbdbed6211071835de946b51ece4fe8badbf",
-        "description": "util: Remove unused function timespec_passed",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1cc1ebdc46a69c99eede34e34031ee548726baca",
-        "description": "util: always enable timespec_test.cpp",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5abf590c719af5f0311de7b5d0cc135f7e06906f",
-        "description": "util: Remove usage of designated initializers in timespec_test.cpp",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "672a93cd6d65493fd7d91cc4c45072f1b69efc58",
-        "description": "util: Use timespec_get directly, it's always present",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "65d5ee4012842646f157693d179a76d9071989f6",
-        "description": "c11: Implement timespec_get on win32 properly when not available",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b2ddec4e98fea9b824e7258468e5b5da9ba848b0",
-        "description": "c11: Implement c11/time.h with c11/impl/time.c",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fe01757ddf067414646032f5fd7ffc5a4d332591",
-        "description": "c11/threads: Remove the detecting code for `HAVE_TIMESPEC_GET` in threads_win32.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a6dd77149ad0e9a2ceef8708304a8bc385e0cb42",
-        "description": "meson: Fixes timespec_get detect code",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cc805aef69d48720b929531f0338e4cc79cda5e5",
-        "description": "d3d12: Properly set HS input control point count",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "08577bbb703abdb91e1ae71ff2119beea59cd568",
-        "description": "nir/nir_lower_io: Optimize 32-bit inbounds access",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f19cbe98e325f6549e6d1f13fc06537b23a29622",
-        "description": "nir,spirv: Preserve inbounds access information",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e6301b886b4a741ff6994987d12d32218c359d5a",
-        "description": "dzn: Enable depth-bounds testing",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9feda65a83c7916562fa55596c8384c4b65fd6b3",
-        "description": "dzn: Use CreatePipelineState()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "83c7fab53f379569092cc8f5e1753aab23a45df7",
-        "description": "dzn: Drop an unused argument passed to dzn_graphics_pipeline_translate_vi()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "185bae4c6022ad22d7cfe2b9b174f35873f39c16",
-        "description": "dzn: Switch to ID3D12Device2",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ee1a0a0772d0aaf4f5124d451f6a087bc6910b58",
-        "description": "zink: always create descriptor templates",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "4e3768914d4ca226041e121b8b80b2daa7b5aa64"
-    },
-    {
-        "sha": "3156a5705dc5a5c97404bfd89f8a4a52bc9e1700",
-        "description": "zink: fix buffer descriptor hashing",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "a7327c7cac9b49ac1c7679f91c4727da0d60f501"
-    },
-    {
-        "sha": "b818c0862bc3c78f0e028292349824aedd675e9c",
-        "description": "zink: simplify some compiler bo code",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bcc22b9e4d8767e1b8660eeca4a7b6ad13eb3dbc",
-        "description": "Init macOS GitHub Action",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "69b95b7839f048c63dba6599815a029657c80cd0",
-        "description": "Remove Travis CI config",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ef6cc03b175c6f43b055e2d2ba23777e7ce82003",
-        "description": "v3d: add ARB_polygon_offset_clamp extension support",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a2463ec271ff4fe4513ce07b3881625add32ccdc",
-        "description": "panfrost: Constant stencil value tracking",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "79877d5df51b7079fdc2432af5b757df52f38ad0",
-        "description": "radv: advertise VK_EXT_primitives_generated_query",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1ebf463a5a64af54a18b69ccaa2453449938df61",
-        "description": "radv: implement VK_EXT_primitives_generated_query",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e0edf8d24089bc80c370933226c76a6543ca08ed",
-        "description": "radv: add few helpers related to streamout",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f3daf7ce4023a54f666ae3d1fef40487c6e29da3",
-        "description": "radv: flush the NGG query state when the argument is declared",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fe57fe1fd8ad31677f977b44b38b6b971770511c",
-        "description": "ac/nir/ngg: count the number of generated primitives for VS and TES",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "60b07a0ab2509c98abfd21d67bba692250764a70",
-        "description": "radv: declare the NGG query argument for primitives generated query",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "11734f935a55368974e0f03e3d55e9e7386986a3",
-        "description": "radv: add primitives_generated_query to the graphics pipeline key",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dc8cf44f60890c392638d5c6fab4a0001a5c41a2",
-        "description": "radv: track if primitives generated query features are enabled",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3efbbf95886dbb89a34147ff9771b8c2aaeabb7e",
-        "description": "radv: rename ngg_gs_state to ngg_query_state",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6b9b28f94eb9b356f8b66b9d75368f5c2ebf0ca7",
-        "description": "lima/ci: Don't skip piglit opengl 1 tests",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "704c9b2825c638dfca94aa61cd35d29d72c9fe8f",
-        "description": "svga: fix shared memory index",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d9aedaa79555097addd1d3bc3627cea23c27d4b6",
-        "description": "svga: fix reference to NULL offset for atomic counter",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "893b4d98f8e1f779682e70c46b8525f58c42c5c6",
-        "description": "glsl: inline do_common_optimization() call",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d09a37ef54eaf25711745383f6521f6da59ec8ce",
-        "description": "glsl: remove never true do_dead_code() parameter",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3223f5b63f750b02546cac943ef5d97ec413ed1d",
-        "description": "docs: link releases notes for 21.3.9",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c44ece167927955bd320a370c27fee0c2e611429",
-        "description": "docs Add sha256 sums for 21.3.9",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d413674160b81654409c6e2108e23fca0bb7bf3b",
-        "description": "docs: add release notes for 21.3.9",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4655ff1f5b34d45c3d20e817488b70275c5b9c98",
-        "description": "nir/deref: Handle RESTRICT for SSBO deref bindings",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8492e78f9d14c187596c13725f6974816d02a0e9",
-        "description": "nir/deref: Handle SSBO array bindings specially",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a5b127427586ba5a834e3015e88f569c68ce8765",
-        "description": "nir/vars_tests: Use nir_var_mem_global instead of ssbo",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2d221c64e78db76e4002f27e2fb5571f4c271494",
-        "description": "nir: Increase nir_variable_data::mode to 16 bits",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0ad2dfe942dff42ea230786c23502d208b50928f",
-        "description": "nir/deref: Re-arrange variable checks in compare_deref_paths",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "130d9d80dbbe4a2e64c8c2b5882f94176ea1e12d",
-        "description": "nir/deref: Make compare_deref_paths take a stop callback",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7ebcdada000d9c0476bac27e55e1b132dde5d9d3",
-        "description": "nir/deref: Use an index in compare_deref_paths",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4d80b3217e692e626182511c9a4d87f25a09221d",
-        "description": "nir/deref: Break out a helper for compare_deref_paths",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cb5c1bcb7c660e1966b891841f94020a36d348a1",
-        "description": "nir/deref: stop assuming coherent accesses of different SSBOs may alias",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5ebb014bdf87257abed3d3401a3074b82da84335",
-        "description": "radv, aco: Round texture array layer in NIR.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1b68d3e43aebf3815e4e8d23011c636ff332daf6",
-        "description": "nir/lower_tex: Add lower_array_layer_round_even option.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2cb0c9ea134ceabb91841c1eaf451961c9ddbe11",
-        "description": "radv: Advertise VK_KHR_ray_tracing_maintenance1",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "16585664cdaebd31f33bd6afc2b5bd8d7d05af3a",
-        "description": "radv: vkCmdTraceRaysIndirect2KHR",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3aa0ea8279784e0cba2e83427ee8658382917927",
-        "description": "nir: Handle ray_launch_size_addr in opt_preamble",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "938c9d961552667a83b2ef5a32c6c86c9c295e04"
-    },
-    {
-        "sha": "fea155348f00a506cfb426e80ce209d1a6f542a3",
-        "description": "radv: PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e8ac9dd23f9ee564d6f92184046900b2413a8a27",
-        "description": "radv: ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5d56c2cfc0a36da5a3ba7fba344799655d74e992",
-        "description": "radv: Add accel struct queries for maintenance1",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d5dd0df65f7ddd2fd65dc810f1dacdeca9e0b4a8",
-        "description": "radv: ray cull mask",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2e0e150e69475c7446c999623d23d60ae3715290",
-        "description": "spirv: Add plumbing for ray_cull_mask",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7c44cb6f5e8e15e1e7b41916ce34555c0120e7f3",
-        "description": "vulkan: Spec update to 1.3.216",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2b001b57a08c9527e514aa829616de5ad7354162",
-        "description": "u_transfer_helper: flush temporary transfer first for MSAA",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e6c1426166a1ad32a841340c9a3b1232ed3b626d",
-        "description": "aux/tc: handle link_shader",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "549d3ea600b0d79471fb09d49aa76755b0e06c9f",
-        "description": "aux/trace: add pipe_context::link_shader",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c0d65398279db02f68b5acc23c3afbf1c34a5204",
-        "description": "panvk: Drop support for Midgard",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3684776f793a4c516cdb6bd85b20933542b5ebb3",
-        "description": "lavapipe: allow null handleTypes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "35dd4ac886283444294238ae0be1a7edcc776c8a",
-        "description": "microsoft/compiler: Drop the auto_link parameter passed to nir_to_dxil()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "74c94faf325dcae85f7f41d40d5988cf5412767a",
-        "description": "microsoft/spirv_to_dxil: Let spirv_to_dxil() handle the linking",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "77c81357f478f953ac019fde862629cf1746663d",
-        "description": "dzn: Fix vertex input handling",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4f1cb63bf38fec52356b59731a97d1282a924591",
-        "description": "dzn: Fix unitialized var access in dzn_meta_compile_shader()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "df63772f765ff9aa42b6b6d27805772ead28a1e2",
-        "description": "dzn: Handle varying linking explicitly",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dc52e557ffab582ab82bf773726fbf26460c36a2",
-        "description": "dzn: Fix maxVertexInputAttributes limit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a4fa63a103fd8c5b936389d0ee52046f3d1b2dfe",
-        "description": "microsoft/spirv_to_dxil: vectorize IOs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "45f8b2ee50b457f74a95600e3b2a82ce35f3333e",
-        "description": "microsoft/compiler: Allow vulkan users to handle varyings linking",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d105a16408f8dc69f0e5bb6b2ce499f0a5dab1c2",
-        "description": "microsoft/spirv_to_dxil: Add a linking helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "424bb7357f7d59f559103f08b7ced91a567686f6",
-        "description": "microsoft/spirv_to_dxil: Remove dead IO vars at the end of dxil_spirv_nir_passes()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d3e321c85317646efd14a01f14dba9fd2d92cd20",
-        "description": "microsoft/compiler: Make input_mappings immune to driver_location holes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e8fd20da90759ebcf9f8837914b14aeab1c640c1",
-        "description": "microsoft/spirv_to_dxil: Constify the descriptor binding mapping fields",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c86ea7daa36b027ce331f2f4592565e4ff688a65",
-        "description": "microsoft/spirv_to_dxil: Extract NIR passes out of spirv_to_dxil()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ca5520c3cb68619771ff4a13f301e077b045a364",
-        "description": "microsoft/compiler: Make sure all SV_Position components are written",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9368641c3f4c1bd861fa6cfc00f5f6c3503c0eed",
-        "description": "microsoft/spirv2dxil: Add a debug option",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "447d4485132ee806ecf70dd0b0c71ef50755d566",
-        "description": "ci/windows: Bump spirv-samples commit-ID",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "961a28d9d99d32685170939b788593648e18316c",
-        "description": "gitlab: ask that reporters don't include long logs in descriptions",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9c1e00afb1fcae0125bd84f6b3a7c34e96542f7f",
-        "description": "gitlab: ask for useful titles",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2338dcd39210e63f84a2eb6a1dce288ed436be7c",
-        "description": "asahi,agx: Don't set PIPE_CAP_POINT_COORD_ORIGIN_UPPER_LEFT",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e749f67f8989874f6795d95422c1f3eb4d2706ba",
-        "description": "mesa,gallium: Make point coord origin a CAP",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "10a2406232ef782790de01c24844adb0d573a6e4",
-        "description": "pan/perf: Fix performance counters on G57",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0ecbfcc892b89aebe30a266b05922a782ed324a5",
-        "description": "panfrost: Add panfrost_query_l2_slices helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "58b408611ffa9f64e6f8b484d6a475bdc711e512",
-        "description": "panfrost: Remove is_64b assignments",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ae4841c105391e24d93f95dde5ec02cd4322b06e",
-        "description": "panfrost: Remove redundant first_tag access",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c999a9daa8462499b8917f105f17a7856c1f1e9b",
-        "description": "panfrost: Deduplicate indirect dispatch structs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ae77c207e083ac33a90e19842261af4e8de0dab0",
-        "description": "panvk: Use push constants for copy shaders",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1a0217e3fb034efcb1c1b36edb752c30cfe439f7",
-        "description": "panvk: Use push constants for clear",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f227fb6da2f4428551d7145c19ac495dc5382d06",
-        "description": "panfrost: Use push constants for indirect draws",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "43884a9b0925dfff584d3ddf28ffb0375b4d2173",
-        "description": "panfrost: Use push constants for indirect dispatch",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "90beea75f631e780182ca3c45cb623471f17d52b",
-        "description": "pan/bi: Don't reorder push with no_ubo_to_push",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "17ea1642e26722e93c9581c4eefa6fb4d7669024",
-        "description": "pan/bi: Implement load_push_constant",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3c5f1595b89d02df92bead419e8bbb0511d14201",
-        "description": "panfrost: Fix inverted indirect dispatch condition",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "fd7b44882ce3c7604be592f484264097125dfa52"
-    },
-    {
-        "sha": "5c17a042826b5cd26b4cd2763f07784d464b5645",
-        "description": "turnip: consider render pass costs in autotune",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ce118a7002bf41def94a5a8ed47f80be83e4d3ed",
-        "description": "turnip: estimate render pass costs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fe9a2374e6d5514739cff14cf24017e8c190e660",
-        "description": "turnip: include stencil test for drawcall costs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2dc10165a1c1e6918c91ae7f1a5ab51117c2ff68",
-        "description": "turnip: base pipeline draw costs on colorWriteMask",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6fe7b9211482067be25a04d0c595d966e5178a77",
-        "description": "turnip: if-checks autotune debug macros",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b7cb4d4f6f91a74ba087124c6688d8e6217d1e22",
-        "description": "radeonsi: set the max UBO size same as the max SSBO size",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b75084431927ad07ebfd92068b97e1638d136f50",
-        "description": "radeonsi: compute PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT correctly",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "aee8ee17a5056bb8e1f3144d34b52612ac7d3b25",
-        "description": "radeonsi: change max TBO/SSBO sizes again and rework max alloc size",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c1adb33a93e2ac576278804c4dc78455d734ea51",
-        "description": "radeonsi: clamp against MAX_TEXEL_BUFFER_ELEMENTS correctly",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "91e533c6aa04026bb1613adf48e284d1d2c92107",
-        "description": "radeonsi: report correct maximum compute grid sizes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ecda7be628d667de02ceebcaa4dc7445d5d8c8ab",
-        "description": "radeonsi: increase the max compute LDS size to 64KB for gfx7+",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0fbcaa4b3aa6eb41399ae5a5a419cf4223476cc1",
-        "description": "pvr: debug: Implement PVR_DEBUG variable",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7c615b4103819e7c71e000b42f4821def70e780b",
-        "description": "pvr: csbgen: Add *_unpack() functions for all generated struct types",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4c0941f0d4ee9a558a7a1652f5c1e85e8af1b8d8",
-        "description": "pvr: csbgen: Fix \"local variable may be undefined\" lints",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9f8556a44a20a215a5bda07f4720edfff67ee5c7",
-        "description": "pvr: csbgen: Replace map() and filter() with list comprehension",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2285ddc7207c9ea52a7649cea7ea58b7f5cda6dc",
-        "description": "pvr: csbgen: Isolate \"main\" function with __name__ check",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a8b80c610be0fb7b21866a23e86804c335ba8c6e",
-        "description": "pvr: csbgen: Add typing information",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f2de3716d8bf0140c744d7d21c3ce807997ea232",
-        "description": "pvr: csbgen: Remove unused function parameters",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "14ca712362f14fe728bdd6bbf1aaf11eee169b57",
-        "description": "pvr: csbgen: Remove \"dim\" functionality from Group",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6961c319381aea4ea1939491e0f5d9b228f2b429",
-        "description": "pvr: csbgen: Cleanup imports",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "34a76ec4e6cf9d9f240f9a03b0887d90a5d116e3",
-        "description": "pvr: csbgen: Make some loops more pythonic",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b813ca5d3b30e13a5350f2616bf1294dbd36d81e",
-        "description": "pvr: csbgen: Add a missing @staticmethod decorator",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "89d6a1cfe48518c9e29dd2ca6d1db3d14121d694",
-        "description": "pvr: csbgen: Formatting pass (PEP-8 plus other minor changes)",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0280b526d58e85d65b53d3f9c8b0f7364d853751",
-        "description": "radv: Implement mesh shader scratch ring.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6056583ae18b6e32302abb018a1d6d76fdbe4c99",
-        "description": "ac/nir/ngg: Use variables for outputs without cross-invocation access.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b664279755bc963c098a327c278e7e2482c32ed2",
-        "description": "ac/nir/ngg: Use mesh shader scratch ring when outputs don't fit LDS.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "304a0e948b49161abfd9badbf0783f099258d6f1",
-        "description": "ac/nir/ngg: Clean up mesh shader output LDS layout.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "02c87e66e9d359c91a51d1b263073ee555627a93",
-        "description": "nir: Introduce new intrinsics for AMD specific mesh shader task ring.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b730f91247844515aea0b7079738c690c4d0ca93",
-        "description": "radv: Implement task shader draw and payload rings.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ac5ab8d227e48e7572a4fa3311ac7c900aae3082",
-        "description": "ac: Add task shader ring information.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "086e499b47a9cfaa8fdb620024a7352036c6cc29",
-        "description": "ac: Add RDNA2 task+mesh shader draw packet opcodes.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "721fb18a386c855b3403b3a4d07b45cab6c518e6",
-        "description": "pvr: Fix incorrect samples to cr_isp_aa_mode conversion.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "61db3154b48ae5707beadb8431184fe5825074c8",
-        "description": "pvr: Write immutable descriptor words in vkAllocateDescriptorSets().",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "81077a4c7db6e56b373fa79433334859d7aab651",
-        "description": "pvr: Add csb enum helper funciton header.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d8493e53100f18732707e1994823dae6fcc35b8c",
-        "description": "radv, aco: Lower txf offset in NIR.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b81f05e94d485fbce98c3a6c5d21105da33dca7b",
-        "description": "radeonsi: set size in si_texture_get_handle",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bce227611d5e124ab8dc8f0be872e3360414f575",
-        "description": "va/surface: set the correct size in vaExportSurfaceHandle",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "13b79266e47ebd0e36b0c01531c0876c39841b7e"
-    },
-    {
-        "sha": "8c07d7cbdd2cfc09246d625246bacf8c9c4ecc57",
-        "description": "gallium: add size attribute to winsys_handle",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "baf0e66dae1ce7d92604a8b3c188fa4082003d17",
-        "description": "gallium: update winsys_handle documentation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cb5973a3dd78c540eb799959cdfe0cad890d821d",
-        "description": "zink: only update layout when doing mixed zs attachment renderpass check",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 3,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8f9c21b15edf82225916b2db186538d7f8836944",
-        "description": "zink: break out of zs mixed layout update loop when work is done",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ffb0c97caf5c84d8590bffd459877164d990461a",
-        "description": "intel: Build mi_builder_test whenever build-tests is set",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "04fae05f7dddc129b4482d7a11d7f0844296fac3",
-        "description": "lavapipe: Use vk_image_buffer_copy_layout",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "420717b2ceeefdce6f4c208f964e25ca30ab0b98",
-        "description": "panvk: Use vk_image_buffer_copy_layout",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8d6b7eb5cece9b0b7cbfafd7a3cb4bb3d12e3276",
-        "description": "radv: Use vk_image_buffer_copy_layout",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c144030f7e0b6d1ad6e33185eab147a8165a98c1",
-        "description": "vulkan,radv: Steal some image offset/extent helpers from radv",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "81603e7dc21366959aeab6666db046327a1fbb1d",
-        "description": "anv: Use the common image<->buffer copy helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "80547e5379f6bac369c237a35bc74e2a06aff65f",
-        "description": "vulkan: Add a helper for image<->buffer copies",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ed0cd6f654e381166c5d87b0a25c05b01f61befb",
-        "description": "vulkan/format: Add a vk_format_get_aspect_format helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "69e4d39d188b2c30fc8cd06b4abcfa619595f840",
-        "description": "vulkan,radv: Move vk_format_get_plane_format to common code",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1436fa55a6030363eb11412e448532a6c2bb0f79",
-        "description": "radv: Use the common image offset/extent sanitize helpers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2c2b3e68e13ee3c1b2b2e47d35e132cd4ded902d",
-        "description": "vulkan,anv: Move the image offset/extent sanitize helpers to common code",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "49234585772f49626435d3d9324ad144e27fc453",
-        "description": "ttn: Populate the images/textures/samplers_used fields in shader_info",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "625b352f14b7d0ac42ac137e13a18bc9b2d27776"
-    },
-    {
-        "sha": "f618d0292a88944b0262809d6ed24fb9a1ff5410",
-        "description": "d3d12: Report PIPE_CAP_ACCELERATED as 0 on WARP",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0cb05d13b07474d97dca2c31d2163ff3ce462d4f",
-        "description": "docs: Fixes dispatch.rst with __THREAD_INITIAL_EXEC",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4dd5f03edc991d9e70596ac88d857e3d87139206",
-        "description": "pvr: Remove clang-format off comment from vk_format.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9acb8ba3db2fe1f74f2cb6d1f73baf9b92dfea25",
-        "description": "pvr: Move transfer logic to pvr_job_transfer.[ch]",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "16d4ca6e1411994ed464ee5781f6c47aa5ebe293",
-        "description": "pvr: Add services winsys transfer cmd submit interface.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "df671f6a8f49fcc36fa2c6f710730cde293670aa",
-        "description": "pvr: Change ALIGN macro to ALIGN_ATTR.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7a93e8900e06bba0d4aebfcf2709b022610734d5",
-        "description": "pvr: Fix UTIL_ARCH_BIG_ENDIAN check in vk_format.h.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2d0f49534fc5232b6c05adcf4be2bcf53b79afed",
-        "description": "pvr: Restrict argument to dev_info where possible.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4b6c18fea82b69ec6641936a7ad0620de27bc95f",
-        "description": "pvr: Fix ISP_RENDER_MODE_TYPE enum in rogue_cr.xml",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "11d8973efba4d95be9f2e5ea2798718385716904",
-        "description": "pvr: Add transfer 3d parameter heap support.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0c3c1a8be42819f89fc0abfe352d7d4e61567896",
-        "description": "pvr: Remove vk_format_is_pure_integer and use common helper.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "72c634fb2303c6b3515c9bfcbf92c2f2f098d744",
-        "description": "pvr: Allow signal_sync pointer to be NULL in job submission.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ce36859b950c4009b5848dd7611d09488c210736",
-        "description": "pvr: Add support for R32G32B32A32_UINT, R32_UINT and R8_UINT formats.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "86f703e7b17ab08e3b64a6b3dc96784b1113095b",
-        "description": "pvr: Pass device info struct in pds generator.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b24216c52d3e06084aee9b217e336273950f1f61",
-        "description": "radv: Fix the accel struct size calculation",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "062b5a9ba1b3e005d21b8c9253b266e53315d9c9",
-        "description": "ac: use ResetAllOptionOccurrences instead of ResetCommandLineParser",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "7e2874dc93acbde89b89e353bc7e9e07fe69af20"
-    },
-    {
-        "sha": "2c70b1a21771a4490279dd38fd6744e3c950df58",
-        "description": "v3d: release all color buffers on context destroy",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8381f64251d2cf79a8b65a600264dcfba6d1fa9b",
-        "description": "intel: Fix build of mi_builder_tests by including c99_compat.h",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "9f717b5f23cbf24dc4c58bc688c931af91975e80"
-    },
-    {
-        "sha": "c06b265ec75dfe311934e2bc52a22b2f17abb680",
-        "description": "dzn: Emit missing transition barriers for rendering attachments",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "2d0798440b4f89068a855e1ff6d78f302ef3c93f"
-    },
-    {
-        "sha": "f06da59fd75d7ce7708d159753fcdbc11de16f9e",
-        "description": "radv: report the marketing name as part of the device name",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "42b3735716bd3464b061eb815849ca205c2564fa",
-        "description": "radv/winsys: add get_chip_name() to the null winsys",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ad8f9d5d583429755617565c10a8c63da6a94f73",
-        "description": "gallium: rename PIPE_CAP_MAX_SHADER_BUFFER_SIZE -> *_UINT",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fd6b8999d7157c2c96c3374227338525cd14085f",
-        "description": "gallium: rename PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE->MAX_TEXEL_BUFFER_ELEMENTS_UINT",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dc4a3a18e9fbeb33da15726a2257cc448ad6fe3d",
-        "description": "gallium: add PIPE_CAP_MAX_CONSTANT_BUFFER_SIZE_UINT for UBOs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "406cf871b2a4082d21fbf50e698b0f30be32c356",
-        "description": "gallium: rename PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE to *_BUFFER0_*",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2a151238a08eb98ebf3b4b0162dde21024277d51",
-        "description": "st/mesa: round down MaxUniformBlockSize to a multiple of 4 for piglit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0081925856d10a2702baf4c3cb89d221f1f25531",
-        "description": "st/mesa: limit MaxComputeWorkGroupCount to INT_MAX - 1 due to failing tests",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9c7256fb8de80cc22000003d92b7d4d56df62bed",
-        "description": "mesa: change GL_MAX_SHADER_STORAGE_BLOCK_SIZE to UINT",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "939d2e0860998df5b8f11d33ea2c0bc32acedd75",
-        "description": "mesa: change GL_MAX_TEXTURE_BUFFER_SIZE to UINT",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "eaac8a1986d2975b111028978ea7823fe7b44716",
-        "description": "mesa: change GL_MAX_UNIFORM_BLOCK_SIZE to UINT",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e76d5c7bc5977c407dafa0b9762481887043633f",
-        "description": "mesa: change GL_MAX_COMPUTE_WORK_GROUP_COUNT to UINT",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c1381daab8465730f7792bfeadfe2bcbd5805111",
-        "description": "mesa: clamp UINT values greater than INT_MAX for glGetInteger",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7acc91fe8760690043474ebf84b1dcbf94bec41d",
-        "description": "mesa/st: use util_streaming_load_memcpy for compute pbo copying",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a7831c5f6e1cac331bd5e2fa2c2ad0eec84256d7",
-        "description": "streaming-memcpy: move to src/util/ and compile unconditionally",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c370fa362b99ceaf2d4cd2b37f8d110e83b32b60",
-        "description": "mesa/streaming-memcpy: add memcpy fallback",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "03e8908e271fa604362dff815bc29b1254b44e5a",
-        "description": "ci/crocus: Drop g41's xfail for rgba_half_float_oes.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ab3a1d41c5adceb864e5f62405cdb4ad13f7f5e1",
-        "description": "glsl: Drop INT_DIV_TO_MUL_RCP lowering.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5ec0301ec7701c3fe9b1df36430d58e0b57fbfa3",
-        "description": "lima: Lower nir_op_idiv with other scalar math operations.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5c499d6d1adfb9c90b672ff7124ffbf5b4bdf56f",
-        "description": "nir: Fix idiv lowering on !NativeIntegers when lower_fdiv is also set.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "464b32c03022add93cce888bc51389afe7f44851",
-        "description": "glsl: Drop the div-to-mul-rcp lowering for floats.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "594d3982f759a55fbeddcffb47b19c8ec32ca7ad",
-        "description": "tgsi_exec: Fix inf/nan handling for divide by zero.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0fbd1b1f4ce0322ec6af96d17bb599b2a74baac9",
-        "description": "glsl: Move exp/log-to-exp2/log2 lowering to glsl-to-NIR.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d024eb6fabecab0e270af2c30d0c2eb192ad5312",
-        "description": "glsl: Remove stale lower_instructions comments.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8c4b88ee4885fcff8547238a8f752329083347d8",
-        "description": "gallium+glsl: Remove EmitNoSat/PIPE_CAP_VERTEX_SHADER_SATURATE",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7a8e3c80fd41fea5fc3730c79580682d4c92ee15",
-        "description": "nouveau/nv30: Make sure fsat is lowered in the VS.",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "ca1ec7272685bdadd4e339cb989ac503db0abd18"
-    },
-    {
-        "sha": "61c500ee9b88b0b5097b470044432ec0b5428660",
-        "description": "radeonsi: replace llvm ls/hs interface lds ops with nir lowered ones",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f7f2770e7241bf47e2aea01474bd64187d118e2c",
-        "description": "ac/nir: Add remappability to tess and ESGS I/O lowering passes.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "666dbbf1a3626fa8be3bd5f54327e50837961fc4",
-        "description": "ac/nir: skip gl_Layer/gl_ViewportIndex write for LS",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "87dfff3e6b45867f63bd31f8d5dc881ba6191243",
-        "description": "radeonsi: add tcs_vgpr_only_inputs parameter to si_get_nir_shader",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "47dd3525fb2d6b342db0b9979d71e55e5e5bb4dd",
-        "description": "radeonsi: implement load_lshs_vertex_stride abi",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6a95452ddf097b2aac2860ec967edb604c7da5f0",
-        "description": "ac/nir: use nir_intrinsic_load_lshs_vertex_stride_amd",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "33b4b923ee1fcc0573c82bd6fadaab6805e48ee2",
-        "description": "nir: add nir_intrinsic_load_lshs_vertex_stride_amd",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e35ff669b59ca2ee2ce19bdcdb90eafe1a0de67b",
-        "description": "ac/llvm: get back nir_intrinsic_load_tess_rel_patch_id_amd",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4237932685e9ac5198ee9d1dfa74afdb4187b48e",
-        "description": "glsl: tidy up link_varyings_and_uniforms()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f00be793e4a91071e61b7e64fd78578ba8731109",
-        "description": "glsl: drop extra optimise swizzles call",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7af5929b54b883bba084e3cdd5c88eea84b66dee",
-        "description": "turnip: Move tile loads back into the draw CS.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ecabd3b5a9a122c3c125d4ace2aacc44517737cf",
-        "description": "turnip: Allow nested CP_COND_REG_EXEC",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a92fad45e9580bacc070843b158bc1ac6f7ce647",
-        "description": "turnip: Allow load/store skipping in vkCmdClearAttachments().",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b8619ef343fbeba5ec9cad558d3b0f15f93ef34b",
-        "description": "turnip: Refactor a bit of subpass attachment processing.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "83ae4a5ed48730c70f0d83e02ce7865f0d60e678",
-        "description": "turnip: Include 3d-based CmdClearAttachments() in binning visibility.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "48403628a2ea19bb41efd736883a3e254f9e0d3a",
-        "description": "turnip: Refactor a bit of repeated code for subpass setup.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5b119c0148cc726de60dd4c0e48d03111fc80f23",
-        "description": "ci/turnip: Add a little forced touch-testing of XFB with no binning requested.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "046438b7a4918268c174efef5f0de1d4210e2301",
-        "description": "turnip: Use fb->binning_possible to decide on conditional tile load/stores.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6c37b4ded1006850c4b92799c9e0c6f9823eb45f",
-        "description": "turnip: Move binning decisions from FB usage time to FB creation time.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ceeaac340a6998a46d7e852614d6d5a4ef0ea9a9",
-        "description": "turnip: Refactor a bit of tu6_emit_tile_select().",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2cad0dd03b30f4bd1d9250018380fb211fbd52dd",
-        "description": "turnip: Don't bother creating tile_load/store_cs for sysmem rendering.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f69aa01c4e02bd32864d20b8546d9ae46173f4f1",
-        "description": "ci/i915: Update manual piglit job expectations.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5d0f36d8269a33878bf3467851fd932718326406",
-        "description": "ci/i915: Merge the piglit and deqp runs.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a99e85db9ebd83c41d3606568db8e8d81ca0205c",
-        "description": "iris:Duplicate DRM fd internally instead of reuse.",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "01fd789ad540f8ed5b83d729e5b5628c31b442ee",
-        "description": "docs: Document Mali-G57 conformance",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "feb90200393464550bcbcde34600feb3f5fe4d38",
-        "description": "panfrost: Enable Mali-G57",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "40db52488b6e8cbf24018e6c3667ba6e5fc71f8d",
-        "description": "aco: consider fma with multiplication by power-of-two unfused",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6489af145ca2a21db049abf45c10608ad4372976",
-        "description": "mesa: enable HardwareAcceleratedSelect",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e8658adaa8dd5fecebc88eaf9d92108c32194455",
-        "description": "virgl: return -1 for PIPE_CAP_ACCELERATED",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1b3fd8b3d2d290d6ae2a47312b2e884d864885a1",
-        "description": "zink: reset PIPE_CAP_ACCELERATED when cpu soft rendering",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9b22ab4167e6c2c0cf8868a9109545fe2c0d164b",
-        "description": "mesa/st: implement hardware accelerated GL_SELECT",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "19f373726237ff93bb2e933e1d2ca3201c154772",
-        "description": "mesa: pass select result buffer offset as attribute/varying",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c41ac0682ef6bb4945677265ee612e24b78431ca",
-        "description": "mesa: add HWSelectModeBeginEnd dispatch table",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8373248cf01f8e631f11346f97b864a3a37ead9d",
-        "description": "mesa: set CurrentServerDispatch too when glBegin/End",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "90b34c91840aac88e439ab2654f4dfd8f3b27da0",
-        "description": "mapi: add api setup header for hw select mode",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f890b49c292d92e0722b543a069c8476018d8e5f",
-        "description": "mesa/vbo: enclose none-vertex functions with HW_SELECT_MODE",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d231f955913e3265d9a560b45dba48ea6336ab90",
-        "description": "mesa: add hw select name stack code path",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "429c7fbaa1d87611a67339fa8b26e869e170c1a9",
-        "description": "mesa: refine name stack code to prepare for hw select",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b3ba33b6f15778fcf89372abfe8cb4c685fcc1e6",
-        "description": "mesa: add _mesa_bufferobj_get_subdata",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2224d6c35d38941a62682ade34a0c4a4a9fcfdeb",
-        "description": "mesa: add hardware accelerated select constant",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ff8ae4e58902a5a3252a34f21f4c2a9022b16157",
-        "description": "nir/builder: add load/store array variable helper functions",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1ef734cde681e4a66e2d726c439545e461b6cbce",
-        "description": "mesa/vbo: remove unused vbo_context->binding",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "feea8fed44331bc19f6e8869a7c0d421b50b9054",
-        "description": "mesa/program: fix nir output reg overflow",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "28801cfba03f6dfbfacd3061371c214ff23fd905",
-        "description": "pan/va: Unit test constant lowering pass",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9cfafbb09beb605585672d5b6007a80dfc9d06ce",
-        "description": "pan/va: Try widening small constants",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "72146051d5db1c51355d7b0fff4ad088b9ea9ccc",
-        "description": "pan/va: Try negating small constants when lowering",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cecfa0c44a25db063d6cc32f7ef9b4b75101be26",
-        "description": "pan/va: Record which instructions are signed",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f4c02d9116dd01629fbac850d51ba590a1af062a",
-        "description": "aco: fix SMEM load_global with VGPR address and non-zero offset",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "3e9517c7577fe1764fef2c5559afa1acd1120134"
-    },
-    {
-        "sha": "4d9f3fcf9cab04c787211b15e645bd28e34a0227",
-        "description": "aco: fix SMEM load_global_amd with non-zero offset",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "3e9517c7577fe1764fef2c5559afa1acd1120134"
-    },
-    {
-        "sha": "695f66cecd431eb3b8e38f7d3436ff9e44028384",
-        "description": "v3d: save only required states in blitter",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "92474951a3c2c6584038b4d30f72b7d98e442abe",
-        "description": "v3d: use function to initialize refcount",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e57dfed419d930849e86514a95c2e71a05f58c56",
-        "description": "pan/bi: Implement b2i with MUX",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8f3b62f87e65ba951de4a01bccf2d2817689c526",
-        "description": "pan/va: Add MUX lowering tests",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "677a66b3eb5e2059d29004039367366a3217936b",
-        "description": "pan/va: Lower MUX to CSEL where possible",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3741606b25b957edcc838e7bb1643f837ddec34c",
-        "description": "pan/va: Implement more lanes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1768afa5b969dac8e0eedc45f76e02e302329d85",
-        "description": "pan/bi: Extract MUX to CSEL optimization",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fd0f02ec4e2afb247e00460d74565533de442d91",
-        "description": "pvr: shorten error to err in label names",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8f3c60a93d7e50bec06f7fccdf7f6142d1ad2450",
-        "description": "v3d/ci: Add traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c87629771d5396f99abcb4f262913720395a4c68",
-        "description": "panfrost: Don't calculate min/max indices on v9",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ca6d06fa91dfa90403a721200203041486faa8a0",
-        "description": "panfrost: Extract panfrost_get_index_buffer helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e1fb182d90e09a522e0d6e8b8ae18bc3543d9226",
-        "description": "pan/va: Do not insert NOPs into empty shaders",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e8da8fc5b7429e3aa832e1153f900765951470d4",
-        "description": "radv: Require an alignment of 64 for accel structs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9eb40f57a2a4cb35da0dde3b99740f2012a658dc",
-        "description": "ci/virgl: traces: temporarily disable nheko trace",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "de63ccfc1e86597a0bdbece5628aa442c8826f2f",
-        "description": "zink: remove buffer valid range tracking from blit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "79685199f43faac04544112751399d718cf588ec",
-        "description": "zink: invalidate blit dsts if fully covered",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "de1e67b39d7fe78af7b7a0f36b99efb1eef2d9a8",
-        "description": "zink: hook up surface invalidation to LOAD_OP_DONT_CARE",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c7ad86b40f91204833d4a283853a04ba829ebb16",
-        "description": "zink: split out a dynamic render ternary",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e6ec9ca0ab01124af22ceab016d0b76ba83cb8bd",
-        "description": "zink: rename renderpass attrib value",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5897ade22dc34911706ed33a588b8f46ea5e37c6",
-        "description": "zink: flag renderpass for change if image resource changes valid state",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3e2c65281d7a460c8f05ff025fc9e742a509030b",
-        "description": "zink: track invalidation for image resources",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8575080990b8e73ad0bff8d624aab7b0263cdab3",
-        "description": "zink: disable EXT_primitives_generated_query on turnip",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9683de9bc41f960198ee238f087199f25dbbea34",
-        "description": "zink: remove ANV depth clip control workaround",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "06859ba69c8c29ccd4835cee7083bb3b53abe450",
-        "description": "mesa: handle atomic counter lowering for drivers with big ssbo offset aligns",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5b5eb77a87dfba362fffba680f603f01cdd2fcd9",
-        "description": "st/glsl_to_nir: call st_set_prog_affected_state_flags() as late as possible",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "93d9f086a315f1c866aa9ca7d57010d045652855",
-        "description": "mesa: conditionally set constants dirty for atomic counter binds",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b3fbd498e0a0bd240225663d5f925420dc623e9b",
-        "description": "mesa: add statevar for atomic counter offsets",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6c2959c0256167bc97ed338e12e0543a967f2fc3",
-        "description": "r300: merge simple movs with constant swizzles together",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0fcd423a6a54842cb37505c87b395f2983fd904d",
-        "description": "r300: don't check for unitialized reads when rewriting register",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a7f3584d1e1e4dc2eedccd9eacf575427cb99110",
-        "description": "r300: Update list of RV515 dEQP failures and add some flakes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bc9b2f378132ee701bd4e7f418228f15127efa08",
-        "description": "r300: don't try to use inline constants instead of constant swizzles",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2bdffe7eb212ddc10f2ed9ef51095886a55109b4",
-        "description": "r300: be less agresive with copy propagate in loops",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5a3be2db24ed6d74e2605dedcee0a767303f469b",
-        "description": "r300: deduplicate common NIR options",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5c37320eb6047441a8be3de1443cb6a3d7843f46",
-        "description": "mesa/st: bump param reservation to 28",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f160a3b2d67a03a1135df1a97e22f09188c761b1",
-        "description": "virgl: add some ci flakes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3e679219a110ecff858ef7cc94d01a7df17e884c",
-        "description": "clc: Fix build with llvm-15.",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "bcc2df489058f35fcb49f82c4069bcc756dfdd4e"
-    },
-    {
-        "sha": "4b3afed35a2b32b41e5202dba303a60e39d1e5b7",
-        "description": "d3d12: skip time-elapsed piglit tests in ci",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5aec67a1e1e3650a643db34be00980b4de5986cf",
-        "description": "glsl: remove the now unused GLSL IR loop unrolling code",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "26ff49038cf788713d5231fa4bb96791ee890f75",
-        "description": "gallium: remove PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT CAP",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8c796169845a60a9e3752ebddd122c09e0715b91",
-        "description": "svga: disable GLSL IR loop unrolling",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bc0f8455e5dd969bdcc01bb03060c3259330e100",
-        "description": "nouveau/nvc0: disable GLSL IR loop unrolling",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e5181c2e238e9616c8d23ba67113d5e45e309a4b",
-        "description": "nouveau/nv50: disable GLSL IR loop unrolling",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fa3b6a3d3217722a0411e985f860e165ba85369a",
-        "description": "nouveau/nv30: disable GLSL IR loop unrolling",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bb2f97eb272a68fce582cebf78c53987024356af",
-        "description": "lima: switch to NIR loop unrolling",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9e1ce5de40e73d13b6aa8b3b5e8f6dbe8750e572",
-        "description": "lima: fixup nir indirect unroll options to match gallium CAP",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "53df6dfb5baea9941167492d05c7f39ef0fafa8d",
-        "description": "lima: lower all undefs to zero in vs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "57dee95b854fe0ede3a6744f34e102000a118c2f",
-        "description": "freedreno: switch to NIR loop unrolling",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "34e868d882c572fae8393fb005f93e86bb6ea3f5",
-        "description": "freedreno/ir3: tidy up duplication of common nir options",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0f1cbcd6a7874da0ee36ebcec91b0a15cd643bfe",
-        "description": "gallivm: disable GLSL IR loop unrolling in LLVMPIPE",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3b3cd59fb85b5b200acce45f950869eb9d7b69a6",
-        "description": "panfrost: Launch transform feedback shaders",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a510a94b02449c3ecb9fad043a28fc8641ab66c8",
-        "description": "panfrost: Create transform feedback shaders",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ed5a5a9d6d422ed66e80ce6b85ff81679cff7139",
-        "description": "panfrost: Wire up transfrom feedback sysvals",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "45dc15d07b2f6deacf71732c6a5bd6086069318b",
-        "description": "panfrost: Don't allow vertex shaders to have side effects",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4e341e70d8b2feea6414277be0b783b1cf6160da",
-        "description": "pan/bi: Handle transform feedback intrinsics",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ae3fa6cc1d01975df1b81d75b9e4bd5df3792625",
-        "description": "pan/bi: Add transform feedback lowering pass",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dc2d8a643ff6628dd359b712e85746b4e1ed0d1b",
-        "description": "nir: Export nir_io_add_intrinsic_xfb_info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5c79d649af301283d71812df6777376284d95533",
-        "description": "nir: Add transform feedback system values",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ba09a00a5cbbcd75b59ec121985ff4d12f220eb8",
-        "description": "format_utils: properly parenthesize macro params",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2ee6206751bf456e337d5144e4a697e69d8a04dc",
-        "description": "panfrost: Use C11 static_assert for enums",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "20a57f8a05bbd31b6040b8e6da0e716cf726842c",
-        "description": "mesa/st: bump param reservation to 20",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3ec74cd1c7ddafe18cb8318aeb981964d15acd1f",
-        "description": "mesa: improve relocation problem message",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "87aaa0f9155bf73fe78832c2f286b057d25ef58c",
-        "description": "glsl: remove now unused lower_const_arrays_to_uniforms()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c573260c9beb3f6429214abc0898b5f5765e75f3",
-        "description": "glsl: switch to NIR based implementation of lower_const_arrays_to_uniforms()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1805ee8d7b02fa2ca0511b2158d3000c79496340",
-        "description": "glsl: move gl_nir_link_opts() call out of the st code",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a14e2733cef03ff6a8fb69e49308af4308c21568",
-        "description": "glsl: move common link time optimisation calls to linker code",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "64dbc3f03a33554df868902994ce80861bf86e50",
-        "description": "glsl/nir: allow the nir linker to remove dead uniforms we created",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4488b577a18e51ccb0dc229499bc2bf50255d044",
-        "description": "glsl/nir: skip adding hidden uniforms to the remap tables",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "44d6068c5b7a0e3659c3304dcbf32bd130cc1648",
-        "description": "nir: add nir based version of the lower_const_arrays_to_uniforms pass",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f3c3b8cf2aea12245f87e70d9f007e6260d3a6db",
-        "description": "zink: Use VK_USE_64_BIT_PTR_DEFINES to check for 64bit platforms.",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b0fe621459c1b02b658f05ebbaba3ca68a7830de",
-        "description": "zink: add back kms handling",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b4ef984ef3f5ff2ab1e762231f490e7407b01e00",
-        "description": "Revert \"zink: remove drm_fd\"",
-        "nominated": false,
-        "nomination_type": 2,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "c5960f64b139605dbefa34c2cc2a089ba00ae1e2"
-    },
-    {
-        "sha": "b17aa297939ed341dbf9a6ea1cf4e9e62cafa58d",
-        "description": "zink: handle aux plane imports",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d5d7279d3860760d9a6bf85ac6adca1f4550b5b0",
-        "description": "zink: rename a variable",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "08116638fd48787e83437901defafe9be2dd44d8",
-        "description": "zink: represent plane offsets using offset from plane 0 vs size of plane",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c57fa8b390414f93ca24b027c708c5f854eafcf2",
-        "description": "zink: fix dmabuf plane layout struct scoping",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "974606eb9d969651c7b70daec52fec83572eef97",
-        "description": "zink: Print the VkResult if vkCreateInstance fails",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4dd8c143a9b76b340da868f7b5186e268073fc27",
-        "description": "ci: disable unit tests",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ed4bd8738d4d222d5ccf805c9dd210d272ca2ace",
-        "description": "panfrost/ci: Mark draw_buffers_indexed.* as flakes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b6a80142178ddba9d5b970b53e1f621b95235755",
-        "description": "kopper: use get_drawable_info path for non-x11 drawables",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "20ba7596949085bcf06ba48ff4f1a0784c6a6e24",
-        "description": "egl/wayland: skip buffer creation on zink",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f67bd8adfab7eac1bd83ee5d3cc90d6dce76fbf3",
-        "description": "egl/wayland: manually swap backbuffer when using zink",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5d0f9228345d353209776c629a113746d3861932",
-        "description": "Revert \"radeon: hardcode uvd/vce encoder not_referenced value to false\"",
-        "nominated": true,
-        "nomination_type": 2,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": "96b276b3270f82ac90baea37301b96f900684860"
-    },
-    {
-        "sha": "ca700dcb0afc620d98f2e03486e9b094d835fc39",
-        "description": "microsoft/clc: Fixes compiling of microsoft clc with mingw",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1720672e3364d204c59da20f0eacfa3165193755",
-        "description": "dzn: Fixes compiling error by include `<unknwn.h>`",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0445bfdc1bd7fc6bcb65a2f9135446613e2df351",
-        "description": "dzn: Fixes compiling error when build with msys2/mingw",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6f61b1e1da4fbfd8982fd4c3f9872836394992c9",
-        "description": "d3d12/wgl/test: Fixes wgl_tests.cpp for d3d12 with mingw",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e26f58e0013aa404859e8074366001331c8c1ad6",
-        "description": "d3d12: `#include <windows.h>` instead `#include <Windows.h>` for building under linux with mingw",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "64b10ade2bcc0c7a97ddca9ad5d7cc9a8e2f0b17",
-        "description": "d3d12: Fixes compiling error by include `<unknwn.h>`",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d493e2ef7dd5aa9bed5a778535b0716a19baebc6",
-        "description": "d3d12: Move shared code that include d3d12 headers into d3d12_common.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b4f701f96229f0ecfd75a7293bd72f23e3b9c977",
-        "description": "d3d12: Fixes d3d12 compiling errors in `D3D12ResourceState.h` for mingw",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "50bc8efe18dcdec49eb8b2a3e6e90ecdd608206d",
-        "description": "zink: disable compute pbos on turnip",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3cd320c5fa22e2828c019b4be7355baca27de052",
-        "description": "meson: Use a C99 STDC_VERSION for flex",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "8575d0e84bf52b17f13bba9ba4d1de90bb6608a4"
-    },
-    {
-        "sha": "ae19e9c292f8448c7bf6cfed9d0a581b666ebc0d",
-        "description": "radv: Some acceleration structure cleanups",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5c5021de27ea76ec857976e80576476a7faeefd1",
-        "description": "radv: Add and use radv_cp_dma_wait_for_stages",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "687fd6755707ca871e5c28589aa81d9646d8cfb9",
-        "description": "zink/codegen: do not automatically consider extensions promoted",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "07565e8852970777ffe552f20444de4cd8e2f4c8",
-        "description": "zink/codegen: do not include compilation structs with extension structs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0d344e96c0ff0ba385411f1411ef6a51049fcc0c",
-        "description": "zink/codegen: remember the fields in feats/props structs of extensions",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b51e40ebdecea4bfe0afa8200d068fc35798596f",
-        "description": "st/mesa: use mutex in st_get_texture_sampler_view_from_stobj",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "ef5d427413274f5a6ccb7d2f729eb78b5af9d947"
-    },
-    {
-        "sha": "d07ec3f038ef6575781829cd1dd1e0ddc30e352c",
-        "description": "anv: use anv_cmd_dirty_mask_t type for dynamic state",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2feef505c1e93f23bfd480eced4e1f7c7755c5ad",
-        "description": "microsoft/spirv_to_dxil: Fix the push_constant UBO size calculation",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "de1e941c59090c990b2c5e301bfb349ca126d789"
-    },
-    {
-        "sha": "6783a8845566a9fdffa938d5b99127f7a3af0edf",
-        "description": "microsoft/spirv_to_dxil: Fix push_constants type declaration",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "de1e941c59090c990b2c5e301bfb349ca126d789"
-    },
-    {
-        "sha": "b56fcefa0f7bcd61b2208583d81c1ec8a21f6df2",
-        "description": "nir/opt_vectorize: refactor src rewriting to avoid unnecessary mov instructions",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fe9f1d064af05464e5a31c74ea0d063b8c20611d",
-        "description": "radv: enable radv_zero_vram for Hammerting",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "eb5f4c2f6b0d41073e33481a70ce8facf8a607ef",
-        "description": "spirv: Workaround for RelaxedPrecision on OpLogical* in 3DMark",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c21dfe3348694c23fff120b2286ff01402257294",
-        "description": "meson: add back -Werror=vla to msvc compat flags",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "45fb815a75669b32f6317ba6d53ec9465a4b0ae0",
-        "description": "util: implement STATIC_ASSERT using c++11 / c11 primitives",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f1023571e8ce7ccb6ec7bc115240cb76aef3e5e5",
-        "description": "util: use static_assert directly",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "873ec432b35805385fa0ae197773260963f27d6c",
-        "description": "broadcom/compiler: use macro for power-of-two check",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2a134347cbd22f8268f2c7e0c3541c83b7b608c8",
-        "description": "intel/compiler: use macro for power-of-two check",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9ecb6f882069d48fe60a3dbca5414080247176d1",
-        "description": "util: add IS_POT macro",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cf52d79d2472c83ae6d8de8f8fc0796174beb854",
-        "description": "v3dv: do not do STATIC_ASSERT on variables",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d8e34243ae6db2681467507bf9a55e3d2a76ade9",
-        "description": "freedreno: degrade STATIC_ASSERT to assert",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8376fb0f3336f3b7dce827ba997adf9df3e18e33",
-        "description": "iris: do not do STATIC_ASSERT on variables",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d33fe53c8d8a80ed98690a32264d6f08e123a4b0",
-        "description": "freedreno: do not do STATIC_ASSERT on variables",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "200091aad04e7e05a6c3a050af131c9809cf205e",
-        "description": "freedreno: do not use variable in STATIC_ASSERT",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "08f8ccfc604b69664cf085015569306695e8cd16",
-        "description": "turnip: do not do STATIC_ASSERT on a variable",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f7efa2858f6f2614f7d446c1d611cba3bdac8407",
-        "description": "pvr: do not use c_msvc_compat_args",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1d3727bcc6f47c550302581f2ff73bb730438fcd",
-        "description": "radv: Remove usage of `cnd_monotonic.h`",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3aad93a47ec8e1cff3586abb8e2308ed6cc920d0",
-        "description": "aux/trace: implement pipe_screen::is_compute_copy_faster",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c90c74234454094aeb358216d69552868593d6f9",
-        "description": "aux/trace: fix sampler view dumping",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "20427d01ac4f4fee6d87d658a7ca7d5992b0342b",
-        "description": "zink: fix framebuffer attachment usage asserts for dummy attachments",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 3,
-        "main_sha": null,
-        "because_sha": "3892c133811f71d7f9eefda34bf282ccd1e6859b"
-    },
-    {
-        "sha": "e90fe826a2317b1b2cb665108728bc2ba67990e1",
-        "description": "nouveau/codegen: drop gallium headers from the interface.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ee93b32fddc25d9734fd10655825419103eed772",
-        "description": "nouveau/codegen: drop all ubytes from codegen.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1f754b7aaedeae510b718e0f1109d16599014453",
-        "description": "nouveau: move codegen to a common higher level directory.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "702fbbdaa3495a5daa5b2fb9ace1d53813e4d07c",
-        "description": "nouveau: move codegen into a standalone library.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b62dd20dea64c3ab5a79673fcfd9442e4f80b855",
-        "description": "llvmpipe: handle timespec overflow on fence waits.",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "5b284fe6bc0a2a5c2d9e5da09a5b86ff8912e474"
-    },
-    {
-        "sha": "8eb5178a6db9cad5798bbb7fb4476893e2f58334",
-        "description": "turnip: clamp to 1 for negative bottom-right of viewport.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7ff3c75ef32ebcf62803005feaccace99b9b6d38",
-        "description": "zink: expand patch_vertices pipeline key bitsize",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1c0434dd954df810209e816c42bba0c05e3649ff",
-        "description": "zink: use dynamic patch vertices if available",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "76668ae4bdd3acc038cb0391e1ce8cc32c0eadba",
-        "description": "zink: break out pipeline dynamic state2 into struct",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7016055c82400d583385991025c3c836c5993d13",
-        "description": "zink: use dynamic cull mode",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "449b96e38d064928482d76314caed474c66a0b71",
-        "description": "zink: use memcmp for comparing dynamic state1 info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b82a09fe13adf7b32504f9fc57fb383a76ee2089",
-        "description": "zink: break out dynamic state1 pipeline info to struct",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bee8a7385dfeac70821f1acd871a689946e638e7",
-        "description": "zink: improve packing for pipeline dynamic state1 info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c1639d7bdac2d20a82d54febb7e0dd64727df161",
-        "description": "zink: reorder pipeline dynamic state1 substruct",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "150e95fa67621ae99401d9df95ceea69f1867ebd",
-        "description": "zink: tu ci updates",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d9ab27944d800d84296ded8489349d3240f0d2da",
-        "description": "zink: force queries to start/end out of renderpass",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7535362204642db2b59b48ac910cb74146bb96a6",
-        "description": "pan/bi: Fix clper_xor on Mali-G31",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "c00e7b729fe84d433e3c23e5c118a348e01ced87"
-    },
-    {
-        "sha": "0af1bdfaa0c1a3fa269d3501673d99dc6e19ed84",
-        "description": "i915g: Ignore the new SEPARABLE_PROGRAM property.",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "b63403054237c3e408f2662beb52ec65db0aee30"
-    },
-    {
-        "sha": "72a7d7d7a8dc46219d4131c01e5cda4ee5d66ecb",
-        "description": "intel/compiler: call ordered_unit() only once at update_inst_scoreboard()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2256314b08035d42b634f1416f4baf8b21fd2707",
-        "description": "intel/compiler: split handling of 64 bit floats and ints",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8f02e6cb19f2c743fefcebebb70f532ce988a7bf",
-        "description": "intel/compiler: compute int64_options based on devinfo->has_64bit_int",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "26bb81f3f62ff5a19f360f4b6d2f72bdcb229360",
-        "description": "intel/compiler: Fix uncompaction of signed word immediates on Tigerlake",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "12d3b11908e0a033be4f3e8b92ae4a36ce910f36"
-    },
-    {
-        "sha": "9eee4c79db7f3da69507116e925f193f55d6c85c",
-        "description": "zink: fix radv piglit fails",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2deee5ddb3e1cadb1dc9768230eb2bc2c7372b00",
-        "description": "ci/vs2019: Clear CI_COMMIT_MESSAGE and CI_COMMIT_DESCRIPTION for please meson",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c642ebf8ab7c7c027a07a72812a5bff83511159d",
-        "description": "venus: Add driconf option to enable implicit fencing",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "87a53127e9c835fd8b72602f98bf5f2e825aa4cc",
-        "description": "mesa: throw a log warning any time a fallback texture is used",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ad5c84999b9eb2522cdf78bb0890939450280cf3",
-        "description": "pan/bi: Rework Valhall register alignment",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0770e7a90ce2786cc716b12b1c5ba7a217f14c74",
-        "description": "pan/bi: Align 64-bit register sources",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8553dd97adc241bdbaff22eabe870abecdaa8360",
-        "description": "pan/bi: Allow vec6 for collects",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1bfff407b96e286ce8ef4d2089f3f3123075351a",
-        "description": "pan/bi: Use nodearrays for linear constraints",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c70daa74f03aff5985710d87fc209279d115db7e",
-        "description": "pan/bi: Add nodearray datastructure",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c24b78cceb8bc5714e15e30981d7d3ac2e678ed1",
-        "description": "pan/bi: Reverse linear constraint bits",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "65b3decd5b83c1ff9729585a3c1d5067b88f6bfd",
-        "description": "d3d12: Align output buffer offset access to D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS.CompressedBitstreamBufferAccessAlignment",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bd68559d36695bd13fecb235dc30cc915d44e9b6",
-        "description": "tu: Enable shaderTessellationAndGeometryPointSize",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "eba8671e406e66e6c10d6b0c31532d0914433995",
-        "description": "tu: Fix D32S8 resolves into D32 or S8 in sysmem mode",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e680fe224a70efe232be3443d024bde82ae8bf60",
-        "description": "radv/ci: update list of failures for Pitcairn",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "be4c1a5f527d3d2e439f1d7cc5f7b9b87b226a09",
-        "description": "radv,aco: disable shader cache when ACO debug options are used",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d8df87056c528617defe9412478c24674471c33b",
-        "description": "nir: xfb_buffer_info::stride is in bytes",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "2a22885a457e72f7b76cf3adbf6b8272c352f6fe"
-    },
-    {
-        "sha": "7c876a6b2f104ef5b6e006abcb47901cdbcc24fa",
-        "description": "nir/glsl: Use rzalloc for nir_xfb_info",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "7c5dc0b11a111cb13c4f11c0f278be3ea95a43e7"
-    },
-    {
-        "sha": "fc5a3e1e37ac1d4f081304c0b3bcd253e5b524fb",
-        "description": "lavapipe: fix dynamic patchControlPoints",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "df2dd474c73982e89d0ed71951ff723eb7060ce6",
-        "description": "include: drop c11_compat.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "18246ed06a1e5d826fae45c5f005926207b6ed3a",
-        "description": "include: drop c99_math.h",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6ed10a99bdacdcf31020e803746cf219fdea1d7a",
-        "description": "vulkan/device_select: remove needless c99_compat.h includes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "df4fe7c4a26f59384517e4edd9399a2ad17d8d2c",
-        "description": "intel/isl: remove needless c99_compat.h includes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9633b426724e48f073f55ecfb6e0f41c584a0f16",
-        "description": "include: remove needless c99_compat.h includes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "beaa26bd753b5e63fa03b5a5fcf51859e006613d",
-        "description": "gallium: remove needless c99_compat.h includes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "75f3373b34c6ec12abf16e11ec43c37a313ff10b",
-        "description": "mapi: remove needless c99_compat.h includes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "afce7ddacb69f139d2cb3563cdc5da88c3a9cb7a",
-        "description": "gallium/util: remove needless c99_compat.h includes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1613aa734192c527e1d1170b7f8453c31960ccc0",
-        "description": "egl: remove needless c99_compat.h includes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9f717b5f23cbf24dc4c58bc688c931af91975e80",
-        "description": "util: remove needless c99_compat.h includes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9ec514ded7c38556f5101df021d042405fe1dad9",
-        "description": "util: add missing c99_compat.h includes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "806272ec97274a659febe4d82655eb1916c8f8fa",
-        "description": "c99_compat.h: remove inline and __func__ shims",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8575d0e84bf52b17f13bba9ba4d1de90bb6608a4",
-        "description": "meson: modernize win_flex stdint.h logic",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a8605db504b20607b3e9461e5fbbbd2bdeff155f",
-        "description": "intel: remove stale makefile",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "134e750e16bfc53480e0bba6f0ae3e1d2a7fb87c"
-    },
-    {
-        "sha": "9bcd5386431a5a735a9d179a395af14baca7dc87",
-        "description": "freedreno: remove stale makefile",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "536f43cb96be91c95f6b4a88dfc8c2ba33dbda4d"
-    },
-    {
-        "sha": "69d55f42b63f60bd05a885972d093da8ea71e9c5",
-        "description": "radeonsi: port amdgcn_glslc build to meson",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "72cf18f54af89fea6fcf60ed80f1b5ed4bc1ed0e",
-        "description": "radv/ci: try to guess failure expectations for Fiji/Raven/Navi14/Navi22",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "205744b42dc597eabd9b08024e0ea008da98ecf7",
-        "description": "radv/ci: remove an expected fail from all families",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "836ce97f5ea89e3401fab3a769715e70669e4b70"
-    },
-    {
-        "sha": "91f93c97ddd2bb6d8ac7f2c591a5b72085bff4a1",
-        "description": "radv/ci: update the vkcts expectations for the CI machines",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "836ce97f5ea89e3401fab3a769715e70669e4b70"
-    },
-    {
-        "sha": "e58c455ca9184005fb06d76ab2ddc8f787d11910",
-        "description": "radv/ci: bump the timeout of vangogh/renoir",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "836ce97f5ea89e3401fab3a769715e70669e4b70"
-    },
-    {
-        "sha": "5af1409c1b2b9181b16dc80107424876be9be448",
-        "description": "radv: fix lowering GS intrinsics if NGG is disabled per pipeline",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a5549ebe5b876d74ea6f420d92cd8e2cefd07193",
-        "description": "docs: update calendar and link releases notes for 22.0.5",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7bd8efb74fd2255fb8555ebd0a036ba45696ef31",
-        "description": "docs: update sha256 for 22.0.5",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a6e546ab513867dbe866c6da9d36bd51fa66ce44",
-        "description": "docs: add release notes for 22.0.5",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "67280a40195358dac32e75a285fb81633489095c",
-        "description": "docs: update calendar and link releases notes for 22.1.1",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "27a1c477c902cf888a32610f80f4dd1f38780ee1",
-        "description": "docs: Add sh256sums for 22.1.1",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3e4de308a51dc913e0f2b9900714a9a6c7746be5",
-        "description": "docs: add release notes for 22.1.1",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1ef329b825c27871cec86b17bf49d9e4d0eb1637",
-        "description": "wgl, d3d12: Handle front buffer writes for double-buffered MSAA surfaces backed by swapchains",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "49dc60efa1df60563a7e992f5070ed10541ab8af",
-        "description": "freedreno/ir3: Fold 16-bit conversions into image load/store src/dsts.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f005a2d7862a86cf47846e4311fbad9125a27c16",
-        "description": "freedreno/ir3: Fix validation of half-precision image store values.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "003327dd95b2f5c43475faadd80a9f1f98a28da2",
-        "description": "freedreno/ir3: Pass 16-bit sampler coordinates when possible.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ac24c49c37896d4d3411e2d9d4a594aa0c1e99f1",
-        "description": "freedreno/ir3: Make the types of tex coord padding match.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "edb0904775b4f7dea29cfb9ba33e3a1568e99e2e",
-        "description": "freedreno/ir3: Move the texture array coord fixup to nir",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bf49d4a084be659b5aaded4e4f094fb5a049698e",
-        "description": "freedreno/ir3: Enable load/store vectorization for SSBO access, too.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6e087f96c9830da07a0c788d94d2af6112a4425e",
-        "description": "nir_lower_mediump: Drop assertion about not containing movs.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5f64bc7a3e5d01460062172a9d5828d912219aac",
-        "description": "ci/turnip: Add missing xfails for a618 full VK run",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "836ce97f5ea89e3401fab3a769715e70669e4b70"
-    },
-    {
-        "sha": "1c63a0beafefccec599ddbe355ec5a8b61df6438",
-        "description": "venus: resolve AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420 to external format",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bc4d42023dda81d3acddea35b6c0bfb6cdef48cc",
-        "description": "pan/bi: Respect swizzles in nir_op_pack_64_2x32_split",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "78315087406205df0252ed95a73b8470698a3f38",
-        "description": "panvk: Use vk_image_subresource_*_count for clears",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9ddfcbfbc6533d8538dd98087b80e99a61b313ad",
-        "description": "panfrost: Allow 2D AFBC on Valhall",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "82d3eb7f1830fd302c27e959b7e5fa3e72735398",
-        "description": "panfrost: Handle texturing from AFBC on Valhall",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9afa8cc555e8452081103f0d1258ece6c54d12ef",
-        "description": "panfrost: Support rendering to AFBC on Valhall",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c2207d27c27ce6de93c3c0ad13c0246d537177fc",
-        "description": "panfrost: Add pan_afbc_compression_mode on Valhall",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "87dcdbdad65e105c80b7f894cc975123b8daeaee",
-        "description": "panfrost: Pass arch instead of dev into afbc_format",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2cc2f217d4e686538ba52f9a9062af5efaa13b49",
-        "description": "panfrost: Fix XML for AFBC header on v9",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "c011ea6c265d6e907652e4e4105bf3bd8fc7c03a"
-    },
-    {
-        "sha": "e596a0423b7a4fef6b3412fd51783a251e5420e6",
-        "description": "pan/mdg: Print outmods when printing IR",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a099834b97e5561dca493b7c6b2368637c0ca9d7",
-        "description": "pan/mdg: Distinguish SSA vs reg when printing IR",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "520204ae1882834399ef1197cd8e67ef48c02861",
-        "description": "pan/mdg: Only print 1 source for moves",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0ee24c46e0aad500a4ef90cc03cfd319e11cb342",
-        "description": "pan/mdg: Only print 2 sources for ALU",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9c9db27e3c790a00afe1db36e882050fb7f046c6",
-        "description": "pan/mdg: Only print masked components of swizzle",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c9093554d06d401943faa278f7ebf1231e7d88a8",
-        "description": "pan/mdg: Use \"<<\" instead of \"lsl\"",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8c11f4809b8c766902ad5ac36d2dd5c0536ce682",
-        "description": "pan/mdg: Remove uppercase write masks",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9e4b45795866547a5debecd122d6e72af6a9c603",
-        "description": "pan/mdg: Scalarize with 64-bit sources",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1d815548ab957124d1c015fcde1e778f1e6a46dd",
-        "description": "radv, aco: Packed usub_sat/isub_sat.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "aa9d2d88935eda7612aa02e1fc7dc0568dff766d",
-        "description": "radv: Enable VK_INTEL_shader_integer_functions2.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "55735ed728e130a57b2efb2232a178d7b998e3f7",
-        "description": "radv: Lower 8bit isub_sat/usub_sat.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4e6667ea878660c30659e397513f5070a38ce4ef",
-        "description": "radv: Lower hadd/hradd.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cc3f03b757af81b5cbdc47d5f7fe6ad8ee2037ae",
-        "description": "radv: Lower mul_32x16.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bfc25d6ec9f34329792d74934cc588e9ad0563c7",
-        "description": "nir: Add optional lowering for mul_32x16.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "83f51212c1099bf675c0ef060a9c749b19614af5",
-        "description": "ac/llvm: Implement uclz.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8671b866bf4b7909227f8d28307937eedfb347b9",
-        "description": "ac/llvm: Implement usub_sat and isub_sat.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d404f1964cdb820c92216cc3590a23fc97255f0d",
-        "description": "aco: Implement isub_sat.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "faa2a894876a387c8945bb46f6ce71f495db1d44",
-        "description": "aco: Implement usub_sat.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "529ec3d7dc1dd74060bda205743e1e3ae4a88349",
-        "description": "aco: Implement uclz.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "79e266fffc919bf9ef6ee0df71b6d02dbc873adc",
-        "description": "ir3: Force late-z if FS has global store/atomic",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5067a26f4432ae5e9690e70ef2498ea24798593e",
-        "description": "pan/bi: Use flow control lowering on Valhall",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a394c32cd257baed82aab92081cd2ec8a3b37e2f",
-        "description": "pan/va: Unit test flow control merging",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4b06e7f5b69210691499fe84a206da2120650b83",
-        "description": "pan/va: Unit test flow control insertion",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0fa9204049e043f08d196a82523a0b5bbf6df6b7",
-        "description": "pan/va: Respect assigned slots",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "492f4055dd22a7ce999efbf1e8281a419b2dbc99",
-        "description": "pan/va: Assign slots roundrobin",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "aa7393f81a17b8b3b3510ac78211ef28b3017468",
-        "description": "pan/va: Add flow control merging pass",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "03d8439c0aa6b57e3de85d0969204cab76a51d3e",
-        "description": "pan/va: Terminate helper threads",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "41b39d6d5d80e549733985775d07492b6bd34a51",
-        "description": "pan/va: Do scoreboard analysis",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7e3b9cf75403ff2cc11238e18db99aa8f0ae9baf",
-        "description": "pan/va: Add pass to insert flow control",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "82b1897900857dd40e199073a35389fb6da7cc31",
-        "description": "pan/bi: Print flow control on instructions",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c0180f6bd3765a5f461487b621dfdb575330e74e",
-        "description": "pan/bi: Export helper termination analysis",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7bb635316b008ab1ae8213ec41f7f997abfd3c3b",
-        "description": "pan/bi: Export bi_block_add_successor",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d7c6b7c9d2e354ec17cc1d8b38d0010fec5ea679",
-        "description": "pan/bi: Extract bit_block helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b0edd92156d9f6b3365b460c0879728cdf5a44ff",
-        "description": "pan/bi: Add a trivial ctx->inputs for unit tests",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "218148d38afb636ef1aa90c8ef1a075af955e8c0",
-        "description": "pan/bi: Add ASSERT_SHADER_EQUAL macro",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4627cd99deec432692a372f0a0288f9058ec3fe0",
-        "description": "pan/bi: Preserve flow control for non-psiz variant",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c846e0812b672d980f6d099beffd5337698b573c",
-        "description": "pan/bi: Add slot to bi_instr",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "616df0e97dd7ec0993e577e39d79854d9edf7c21",
-        "description": "pan/bi: Extend bi_scoreboard_state for finer tracking",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "68b10b39f7f5c9525169502a94327a879162bc31",
-        "description": "tu: Implement VK_EXT_image_2d_view_of_3d",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "fd132f25bafedd9c59f62add848186ff40a3fa2d",
-        "description": "anv: mask out not applicable state flags when setting up mesh pipeline",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "60c82453a1a32e7fad2a3f3bd3231e5752a2bbe6",
-        "description": "radv/ci: allow polaris10 to retry more times",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "be01e8711b34fb718337b00dc5c7d98bb306c23f",
-        "description": "nir: introduce new nir_alu_alu_width() with nir_vectorize_cb callback",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bd151a256ebe5dba2f159d1cc72a8777b1a5b84c",
-        "description": "nir/opt_vectorize: add callback for max vectorization width",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7ae206d76eff09ea8d80b371439e0688b0bec85f",
-        "description": "panfrost: always print the bad ALU op if we're failing to translate.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7472bb4badbf3bf196c1c09adbe16e70b048ab2d",
-        "description": "glsl,nir: Move i/umulExtended lowering to NIR.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6f0db3778f3e2e874d844b98b256f121680be331",
-        "description": "mesa/st: Only scalarize for doubles lowering if we're lowering doubles.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7e098db1ae49f3d4b9d66c47fe70e442869aadc4",
-        "description": "anv: Disable storage image compression for possible atomic ops",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f052e00a586302d2b19d3bec9cc9b0ea00fdb39b",
-        "description": "isl: Add an isl_format_supports_typed_atomics() helper.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8e41c66639f20671957ffd8cacd7c7328920848e",
-        "description": "aco: fix spilling of phis without temp operands",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "61a5034950a60451bd891e4b37f7e8cf4c8c58ae",
-        "description": "editorconfig: remove pl-rule",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "721b880e4cfb71044d179a58cdd6ac9a26cbfedd"
-    },
-    {
-        "sha": "799bf3d6861aa688d54249646d41ce0bb2b7a86d",
-        "description": "editorconfig: remove m4-rule",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "95aefc94a941701616fda0776a3bd15710c8c151"
-    },
-    {
-        "sha": "12aa3b82dcbfa7512908cd67b0832a027e39589e",
-        "description": "editorconfig: remove html-rule",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "44a4e34d52e68c4251afb7fb079dc9b28477195d"
-    },
-    {
-        "sha": "7a088d3583db84fd73256bc3ff6c1660800812bf",
-        "description": "editorconfig: remove scons-ism",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "6e6cd7d93cc54fc8c279377c2d552761f4457174"
-    },
-    {
-        "sha": "8901df12ab0379ec30bc5ce12cf049ff11ceb3de",
-        "description": "dzn: add debug option to redirect stdout/stderr",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9f3a5b43134976adcf4ddcac75c0a31c295921de",
-        "description": "dzn: add a debug-flag to wait for the debugger",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "19044cf1de0bdb10515808d60fb160a4640e4776",
-        "description": "tests/graw: rename shaders from .sh to .txt",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b968b99c451d786c0ee773ff4cfe7db2e72d066e",
-        "description": "radv: reduce radv_discard_rectangle_info::count to 8-bit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b62f1cdee83cafdd7250b1d732446f0b0d1c2395",
-        "description": "radv: reduce radv_rasterization_info::polygon_mode to 8-bit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "38b6f2e0ce56e99bb9a8852b3eab8a99e2d23a94",
-        "description": "radv: reduce radv_input_assembly_info::primitive_topology to 8-bit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2f176f86c20c1410f4328e1a03ed8514e21c42af",
-        "description": "radv: reduce radv_tessellation_info::patch_control_points to 8-bit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c869a5d5502ec4df2039e9376b9f4543fd935d68",
-        "description": "radv: ignore DYNAMIC_STENCIL_OP if stencil test isn't enabled",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "18985e803087bdac8ac6448839554af0fabffe03",
-        "description": "v3dv: use the global RCL EZ disable if we don't have any EZ draws in the job",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0f65838933bfee7c189ffbd17fa1d04a005db8c3",
-        "description": "v3dv: don't be too aggressive disabling early Z",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2f7f4060ee400b0345832dbc298f7f817547dff6",
-        "description": "radv/ci: update the list of flakes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5078b4fff1752b45266516b87f0c4d52a2a44720",
-        "description": "nir/divergence: handle load_ray_num_dss_rt_stacks_intel",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d3c1b0ac2815617fe12a0969cbb384ee4e466d79",
-        "description": "nir/divergence: handle load_scratch_base_ptr",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6dfaedd607d7e174226b17f56cf9310f8c1f79c0",
-        "description": "d3d12: Remove unnecessary NULL check.",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "d8206f628659d468c870430daa271d5bec6e860d"
-    },
-    {
-        "sha": "2e9c53549bc77d828f060e9e16b3ef8630b9bfd8",
-        "description": "tu: Expose VK_KHR_synchronization2",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "59259a0167184e0cf9f472d379ac9723a2842139",
-        "description": "tu: Convert to sync2 entrypoints",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "abe4536c51ea24443542028a0817b5eac2470559",
-        "description": "ci: uprev piglit 2022-05-31",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d67a3ecc9a2e2baea58d0d1e57f7a5aad704d066",
-        "description": "st/texture: allow compute blits for (some) non-finalized textures",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "debb016d96f23defd80e6e23e5b2fb7e5b1d9ea4",
-        "description": "st/texture: use base teximage for compute blits",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9f7029169bc0fd1b0a0f2419b8aba9a1a4461c8e",
-        "description": "zink: make swapchain kill message more descriptive",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "964a651e6f49319582c7ec5fa33310dd010b9733",
-        "description": "zink: add a #define for descriptor compaction",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "517894e819b416c8727fa5adb49d98684e2f977a",
-        "description": "zink: flag all cached descriptors as needing update on program change",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9d34cab4a8412baded94d6baa1727302890f2ca9",
-        "description": "zink: fix change flagging for compact descriptor cache",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ddcd9c730c986ba790c3c3e50967fc3ddde52bb8",
-        "description": "zink: store the real (non-compact) binding usage for programs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "41fce7ae57bdc7da7f5928a4eade617ccb06df76",
-        "description": "zink: drop requirement for 6 descriptorsets to use bindless",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3304e5b5fb1e596286c359cb5f495d1f11b4c851",
-        "description": "zink: only infer modifiers if winsys handle has a stride",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "d79c716331fa92457cf6fae3cab2e0b660d5fcab"
-    },
-    {
-        "sha": "2a22885a457e72f7b76cf3adbf6b8272c352f6fe",
-        "description": "st,nir: Use nir_shader::xfb_info in nir_lower_io_passes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "16b0719441ab42986989b5c3940d6d7071cfc553",
-        "description": "glsl/nir: Stash the xfb_info in the nir_shader when linking XFB",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "36d8a2f1d7ed0b1778756481940a73f348de9367",
-        "description": "glsl/nir: Stop leaking varyings_info",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "34b3b92bbee1f68a9c121cd26e30e113c8cd39a8"
-    },
-    {
-        "sha": "7c5dc0b11a111cb13c4f11c0f278be3ea95a43e7",
-        "description": "glsl/nir: Populate nir_shader::xfb_info after linking varyings",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "64cc35d2ac1f6cb1bce8057c8112395a69c4ba5a",
-        "description": "nir: Drop nir_shader_get_xfb_info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7003ff2e3a7d5f8ad0a68d33b90c280f86049c74",
-        "description": "radv: Use nir_gather_xfb_info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c8e191e3696548e0dea853fcfe6f7dc3a28aebd2",
-        "description": "turnip: Use nir_gather_xfb_info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0eab41559f376da326f90ef7ab2a33ff58529520",
-        "description": "lavapipe: Use nir_shader_gather_xfb_info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e5ff2c224266e9dd26db45bef1905b4e41c0a3a7",
-        "description": "anv: Use nir_shader_gather_xfb_info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "23b55dcff41a5b29390c57f59c21e17632eb60f5",
-        "description": "nir: Add a nir_xfb_info to nir_shader",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3e04432b3a5b0ecdcb75b97b9cc5bb7fdc5ca218",
-        "description": "nir: Rename nir_gather_xfb_info to nir_shader_get_xfb_info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f812cc0fe62565675555a93dfc20e5abf0dd60ce",
-        "description": "nir: Consider PNTC to be a varying",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "3528dcdfa18d688ec3fc69132095e93a8fe380c4"
-    },
-    {
-        "sha": "1c019ee1bac47a2e07901b87498ece739613f464",
-        "description": "st/pbo_compute: fix z coords for compute pbos",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 3,
-        "main_sha": null,
-        "because_sha": "e7b95619596167025d26f07efb04dc5bfd5e9aee"
-    },
-    {
-        "sha": "15f37d8d6f9fb6765573dc68a04417af14a41024",
-        "description": "st/pbo_compute: make compute download conditional in shader slightly more readable",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "70fb3a47003a956fa68825b3c617bbbfe9d24178",
-        "description": "st/pbo_compute: use different calc for non-3d compute buffer sizing",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "e7b95619596167025d26f07efb04dc5bfd5e9aee"
-    },
-    {
-        "sha": "5b02facc8c8abea3a2cdc4c91c0c1434a5465143",
-        "description": "st/pbo_compute: do pbo readback directly to the buffer object if it exists",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4b5bb2131866d5ee24d2ee5bb3f890eb11bee6bd",
-        "description": "zink: drop largePoints requirement",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "63a9e0a98610199f6dc1f38cc6e44cbdeda62694",
-        "description": "zink: drop wideLines requirement",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9bb9511edcabe77b18c412a9a62ff8c9332c8312",
-        "description": "zink: remove first_frame stalling",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 3,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7f81333f7142eae799ec46f22ef648b62f9dd592",
-        "description": "CI: Re-enable Windows builds",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cb2cc69ebb2627dcca17ce3291abd2525220a204",
-        "description": "dzn: Update fails/flakes",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b819f80d87a5e73212b0c0b51495e86dfae45c9b",
-        "description": "CI/windows: Move --fraction for deqp-runner to run command line",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ad96c3079f99253d23dfdc20f1c2f3613de00a74",
-        "description": "CI/windows: Disable LLVM CMake developer warnings to shrink log size",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4a51a81217976d4d3b6e076f6e8be0db2258d1d1",
-        "description": "CI/windows: Disable chocolatey progress printing to shrink log size",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f6d3625d4ae224c483868452530521aa9df89c95",
-        "description": "CI/windows: Delete comment for installing vulkan-runtime",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a1951b2d0b9537b14eddd92260e3908e0aa76c54",
-        "description": "CI/windows: Install Vulkan SDK from LunarG directly isntead of Chocolatey",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8edecb3c1e03fccb0107b7bd5290361926a36315",
-        "description": "CI/d3d12: Add skips and update baselines",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "863b3abbbce3ae93ba371f25939cbe076887887d",
-        "description": "d3d12: Re-add missed bitmasks to shader key comparison",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "a064e63e8367d843d67391989bc9f14aebd4edca"
-    },
-    {
-        "sha": "f61788d7d315045cc0684db711c7be389a926f1d",
-        "description": "nir_lower_task_shader: Fix return from lower_task_intrin (bool, not void*)",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "8aff8d3dd42ecc399f1d7d23ddd641e7e3fce777"
-    },
-    {
-        "sha": "982cc9bcf5c8993a5872f3d555e3ba9c8b86f904",
-        "description": "aco/tests: update for GFX11's removal of SDWA",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e68e6c75ca14c768b50d9ad85c37b2443699dcbb",
-        "description": "aco: use v_perm_b32 to copy 0xff00/0x00ff/0xff/0x00",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dae1629778de81ecb24f3790f8404dd2c24dd338",
-        "description": "aco: disable sdwa on gfx11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d51dd7527b41b89c059950b2f8cfdc9026330827",
-        "description": "aco/tests: fix gfx11 variants printed as gfx12",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c8bde76a42f5791d3b6926a2044c964f65e7aafb",
-        "description": "aco/tests: disable regalloc.subdword_alloc.reuse_16bit_operands on GFX11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9b60a678413a31addb4220f1a6f6d2928f6c1fa4",
-        "description": "aco: clarify a portion of do_pack_2x16",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8384189b6c9a98624ac6c5fbeb1ac3eef5ebf0b5",
-        "description": "aco: use p_parallelcopy for uniform reduction with zero source",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3e73fd40a679263528151548dad2a7ad5a3b7a4f",
-        "description": "v3d: expose GL_ARB_draw_buffers_blend",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4357dff4e98ba68a5daac3d4010c6ec920d9479d",
-        "description": "v3d: fix blending for mixed RT formats",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "836ce97f5ea89e3401fab3a769715e70669e4b70",
-        "description": "ci: bump VK-GL-CTS to 1.3.2.0",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e1f46524e31997727258006ddbd1f8fdcec524eb",
-        "description": "zink: lower subgroup width to 1 for unsupported subgroup vote stages",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e342a57ea6e5b53f3b99cd73284f35650a91fc2f",
-        "description": "zink: fix subgroup vote detection",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "566033beb94615d8f857d91baf0e858276465acf",
-        "description": "zink: use correct scope for subgroup vote ops",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "aaf0d4490ea4e036e0c75cbe2494e2f4ffda398a",
-        "description": "zink: emit spirv cap for subgroup vote ops",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "591da8cf5d6bd87067059228bbf8dac83922e47e",
-        "description": "zink: require draw params ext/cap in ntv if drawid is used",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "eb0d571ce42b1232bd35b5126bd09a333cd8a0cf",
-        "description": "nir: Add a correctness note for nir_lower_phis_to_regs_block",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4a4d6cdc80bb4e153bf263d1fed919a5026cff2a",
-        "description": "nir: Handle register sources in lower_phis_to_regs_block",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "a620f66872c27fa24a1ccdd1d0a6e563eefbaad6"
-    },
-    {
-        "sha": "faa51a10edbd92cc3f9cf2c5766360f759edeea2",
-        "description": "isl: Add some asserts about multisampled surfaces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8d8fb6429cf186be3900bb197be2ce66c4d1104a",
-        "description": "anv: Implement VK_EXT_image_view_min_lod",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a19ed1f46ad56e1c4c34e022e14027461c90278e",
-        "description": "intel/isl: Add isl_view::min_lod_clamp for IVB+",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "56b66abc0b9edc23bb75e47ad25f34356c019f88",
-        "description": "vulkan/runtime: Add min_lod to vk_image_view",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "dad36b5f12414ebd3e83af16aa67dbf280cd9551",
-        "description": "radeonsi: enable use_waterfall_for_divergent_tex_samplers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9776c1cff204ff3a38b7dd6e8c6a171d2719f556",
-        "description": "ac/llvm: add use_waterfall_for_divergent_tex_samplers option",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9ff04985b9a208843a5e93759f43caff7b2a0b2f",
-        "description": "nir/gce: pin call instructions",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ad34d81c4841a47a731030d64de4f4793347bbaa",
-        "description": "nir/gather_info: allow to run it before inlining",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "abc7f51455ca220d4c4b760212577f9e92d4b2e8",
-        "description": "nv50: Fix tlsSpace alignment",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2027f28b30b1678b5c15ea23012ee3a64cdee620",
-        "description": "ac/nir/taskmesh: Use 3 dimensional workgroup ID.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c6d12a510cd9ad5681c411f5f94243296d06cee0",
-        "description": "ac/nir/taskmesh: Use task shader lowering from common NIR code.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c69b771e35fede00b6754d4578903e698715b170",
-        "description": "radv, ac/nir: Fix multiview layer export for mesh shaders.",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 0,
-        "main_sha": null,
-        "because_sha": "d32656bc65a7c0165e53d551e23462d626bbf870"
-    },
-    {
-        "sha": "c636660585b7b5684eb12829d334c1caf53bb7c8",
-        "description": "lima/ci: reenable lima-mali450-piglit-gpu:arm64",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4cb4c3b755263ae951a2ddb6ae45f6807af1beef",
-        "description": "lima/ci: update piglit ci expectations",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d98290b8aded9c0ab827e963fa68ea8f257477f6",
-        "description": "ci: update docs for linux kernel uprevs",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3d7b2f0186cca878ec0eb54caf0b54d3c0f4defe",
-        "description": "ci: update linux kernel to v5.17",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0ce346368f3a1d7a7b12ade87645b466850c0f82",
-        "description": "v3dv: limit sync for barriers to hw queues selected by source mask",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ad249e902016a287c4aadafeba063c5688608efc",
-        "description": "v3dv: track sources of barriers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f7ce42636c2553a12a842a16789db97023a0ec31",
-        "description": "v3dv: use an explicit struct type to track barrier state",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "eccc0e6a0b57c0ae018c94868ffdfd8b8b5428c6",
-        "description": "v3dv: only clear BCL barrier state if we don't have pending graphics barriers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "24ebcbbaa77761cf058b2a7252251d3284383431",
-        "description": "v3dv: consume barriers at the right stages",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "a981ac053964b3fa129fda124e89bff01a572394"
-    },
-    {
-        "sha": "05eb9530ca4e06f124f79bd03cbd531eb2ce4b8f",
-        "description": "ac/gpu_info: always retile DCC on gfx10 and newer chips",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 3,
-        "main_sha": null,
-        "because_sha": "f8cf5ea982adc4e1d5b6a531f83eea938583c830"
-    },
-    {
-        "sha": "b35991dbcbfae014583ffef103654458dc2d501a",
-        "description": "amd: Initialize Gfx11Lib members in constructor.",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "4fdf42b3c29a385ed2d8b5a2bc524956e02e414e"
-    },
-    {
-        "sha": "90ff3c350b5188e9f6ca44234ac48d653cb2c38e",
-        "description": "nv50/ir: fix ALD/AST where address comes from AL2P",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9fd1602fb5174b952c682f3094ae82d8d6517175",
-        "description": "nv50/ir: fix scope of memory ops on ampere",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "ca04eff60084240f9d8456ef0626069061897427",
-        "description": "nv50/ir: fix OUT.FINAL on ampere",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e06c373c6bca36ca32dcc3ea488b0055c63bce96",
-        "description": "nv50/ir: recoginse Ampere",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "16ea41c901d5d2ab5ea85775f54066df494140cf",
-        "description": "ir3: handle intrinsic_load_draw_id when scanning driver constants",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "00313effdbb188659141155c1fb812588d463998",
-        "description": "nir/gcm: fix pushing instructions into if blocks",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2cf7f08b0433d9c41d7634972d91aab58a70df79",
-        "description": "ci: traces: temporarily disable nheko trace",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "017050062760220d269d81da1b1e06df5d63f191",
-        "description": "pan/bi: Interpolate varyings at 16-bit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "93f69e4b1c02c00b523debb5d2b2fe2a51bf5e94",
-        "description": "pan/bi: Model Valhall source formats",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "06886c3861526d94bb98fc36b46fcb97df00505b",
-        "description": "pan/bi: Make LD_VAR w=format instead of w=vecsize",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "a9b13a1867cf7fb0c267da5c80621be64857ca5a",
-        "description": "pan/va: Fill in missing src_flat16 enum",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e898e2466b545eee3ad6607a76fe6edc43b80dd7",
-        "description": "pan/bi: Add VAR_TEX fusing unit test",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1727310ea15357841a32254ccd49f598a5ea080a",
-        "description": "radv: Use vk_buffer",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7f1e967c02656a795b34e8f9fd8a504d52898012",
-        "description": "vulkan: Use the correct enum in vk_buffer",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "f6ae21b864cabb468ecc452841fcb7b8ba975d3e"
-    },
-    {
-        "sha": "27f3fb5699e35cdaca29cd7309c4ac9a2fd21ff6",
-        "description": "mesa: Drop dead #include \"sparc/sparc.h\"",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "e030d5ba8ac321b4d75587d72a0a381bb906d70e"
-    },
-    {
-        "sha": "cd2b4c319aa49f9e995ae7825393a661e40b6e64",
-        "description": "aco/ra: fix usage of invalidated iterator",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "58bd9a379efada22efc3d1ac0848f681c2dd811a"
-    },
-    {
-        "sha": "42a4a123a6f5436537e2689472db8c68da18c5d9",
-        "description": "pan/bi: Don't allow spilling coverage mask writes",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "3df5446cbd460aee6c02c570ecbc285102abc9f0"
-    },
-    {
-        "sha": "67f57213493c688691fda042caecf2f08823cf92",
-        "description": "panfrost: Set allow_rotating_primitives",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e7a7679b9a77bd4b4300c19bc6b3365756f03c5b",
-        "description": "panfrost: Set overdraw_alpha[01] flags",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "776fa19db2ccf4b96be0da0ef650da6492e312ef",
-        "description": "panfrost: Allow FPK on Valhall",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2981ee5c7b1b35a17f0e29c39a3ead0346ac78a2",
-        "description": "radv: init states from VkPipelineFragmentShadingRateState at only one place",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8fdc4bf3ba61b00ec361cca18f26c04350f50ea3",
-        "description": "radv: init states from VkPipelineDiscardRectangleState at only one place",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b36bee672fb91dcada5264344508d9710e2ce425",
-        "description": "radv: init states from VkAttachmentSampleCountInfo at only one place",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "23ba9a6249e6bd83050f3e2a8d440ef62ab26a3d",
-        "description": "radv: init states from pColorBlendState at only one place",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1dff2a92042ce43fcafb6bddf225a9ea65fbe42a",
-        "description": "radv: use AMD values for computing blend related state",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d423d1c6835639b2701e62220eb5278963344796",
-        "description": "radv: init states from VkPipelineRenderingCreateInfo at only one place",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6e8e926e1b4a3cc03e6288fe634a94f6e7914e15",
-        "description": "radv: init states from pDepthStencilState at only one place",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8e9b3fabc56186ce507deedc3f74f2e0190517c6",
-        "description": "radv: init states from pMultisampleState at only one place",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1f8db5702371ffdb569df7477abb1b36da8b537d",
-        "description": "radv: copy viewport/scissor when initializing radv_viewport_info",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0f46a8fbfe18bb46c86afd4d35f5bc3a57952efb",
-        "description": "anv: remove invalid copy/pasted comment",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "34b5a717c0d264f1f18a951ab3fbbf0d9c7ea66b",
-        "description": "anv: remove redundant code calculating dynamic states mask",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "092d03a90e9a809ed1a40f8b54914db280c4a10a",
-        "description": "ci/iris: skqp: remove flaking atlastext for TGL (gl version)",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "250b6eb908f37bf16a3d152a61f4f7e9d3be68e4",
-        "description": "radv/ci: skip image.sample_texture.*_compressed_format*",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6eb5a110ddc964c59f6e67d1b3a1e1d45f7573ba",
-        "description": "radv/ci: Move transient_attachment_bit from fail to skip list",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "cd14431b8caa5e27982f3c53cab244e409bf6988"
-    },
-    {
-        "sha": "a56d47b0bae8487ac0c1cab26ac81da267b76365",
-        "description": "microsoft/compiler: Fixup sampler derefs in tex instrs that don't *need* samplers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8aecb3ed58ce50484e7e4d0e40c46c481eeec0f8",
-        "description": "radv: Ignore transformOffset if transformData is 0",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9be00573c4cc04614e902a11fe9128191c70d280",
-        "description": "radv: Fix handling of primitiveOffset",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "0dad88b4694cf82664f633187442ec65c14f3812"
-    },
-    {
-        "sha": "f2e36463218f598aae27b3fac73ddff24b73f057",
-        "description": "Revert \"radeonsi: Set display_remote for non-refernced frames\"",
-        "nominated": false,
-        "nomination_type": 2,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "ef76b83633dc34eefed11f295cb3185c3991fecd"
-    },
-    {
-        "sha": "55f9ff03c288e4d93105bedfeb91d9c86de156a5",
-        "description": "d3d12: Fix forward decl for sw_winsys",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "77a6feff89cfad1d78effa8d09876cd80daa7815",
-        "description": "radeonsi/vcn : update enc->dpb ref_use for index 0",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "09caa8902c5faeb6e7dd621569cbe2b6f4bce805",
-        "description": "anv: move internal RT shaders to the internal cache",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "7f1e82306c9b59fe534b9712d85f9324b0bfb5a4"
-    },
-    {
-        "sha": "0eee071038966a94c15249af9b64bc135debf43e",
-        "description": "panvk: Use the vk_buffer base struct",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5d0b09be5b5fc764dfc258436f9fbd40c120f48b",
-        "description": "anv: Use the base vk_buffer struct",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f6ae21b864cabb468ecc452841fcb7b8ba975d3e",
-        "description": "vulkan: Add a base struct for buffers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f38bc633f789396c352038a475edf1515813bd48",
-        "description": "d3d12: Initialize d3d12_video_encoder_bitstream member m_uiOffset.",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "b171a6baa21977395a72d578306f30faa521dd87"
-    },
-    {
-        "sha": "dfedeccc1395e7a43d41165dc09d9ab4e5f16c3c",
-        "description": "intel: Only set VectorMaskEnable when needed",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7c1498daba053b8d05dba1216f0e308b30076375",
-        "description": "egl: Fix DETECT_OS macro usage",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "54b7227f158010886be752fa9a52f1c30382eebf"
-    },
-    {
-        "sha": "0d28de212a4b71749f3e0bef8768aa58c0ca354d",
-        "description": "anv: Don't disable the fragment shader if XFB is enabled",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "36ee2fd61c8f943be1d1e2b0354f7a121ffef28f"
-    },
-    {
-        "sha": "73b3efcd59ade6b9dc8c4cce994d7fbe5c1f0cac",
-        "description": "anv: Handle the null FS optimization after compiling shaders",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "36ee2fd61c8f943be1d1e2b0354f7a121ffef28f"
-    },
-    {
-        "sha": "9fe6caf4e707bad36c60262b5f28407309f922c7",
-        "description": "anv: Drop alpha_to_coverage from the NULL FS optimization",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "36ee2fd61c8f943be1d1e2b0354f7a121ffef28f"
-    },
-    {
-        "sha": "1b9248e761d7ff04415326de18f8fc2468bcbcd3",
-        "description": "intel/fs: Copy color_outputs_valid into wm_prog_data",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "36ee2fd61c8f943be1d1e2b0354f7a121ffef28f"
-    },
-    {
-        "sha": "8379993223b98c81c73580c8934719a8acee7a75",
-        "description": "intel/fs: Drop fs_visitor::emit_alpha_to_coverage_workaround()",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3394e81eb1ab47acdd9e2bc56233e544d41ff83c",
-        "description": "vtn: assert that composite members have the same bit size as the result",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "54e1072ff696c007d65218f2351b7d245f15385b",
-        "description": "vtn: assert that vector shuffle indices are in-bounds",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "01ba3460a99d5488ac93ef126714a97808df7ad9",
-        "description": "pan/bi: Test CMP result_type optimization",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "501a66cb5ce76ffca6aa663ea9f8b31d2cd71f07",
-        "description": "pan/bi: Fuse result types",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "112a856813eb2649ea7ff81768bab594033ce00a",
-        "description": "nir: Keep track of cross-invocation mesh shader output access.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "cd14431b8caa5e27982f3c53cab244e409bf6988",
-        "description": "radv/ci: skip dEQP-VK.fragment_operations.transient_attachment_bit",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "211db6d3336a05697d825cbef10f6d4fd8511315",
-        "description": "radv: Fix redundant subpass barriers due to erroneous comparison",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1a8b03732fd08f594fb81d575335db93949a6193",
-        "description": "vulkan/wsi: fix extra free if buffer_blit_queue",
-        "nominated": true,
-        "nomination_type": 1,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": "7bd5aa111cffb5c266d220ce44a2d6bfc1190ba9"
-    },
-    {
-        "sha": "77a67f11151d9d7d99a07636a8d98a7a6329bdcd",
-        "description": "radv: Add mesh and task stage names to pipeline executable properties.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "8aff8d3dd42ecc399f1d7d23ddd641e7e3fce777",
-        "description": "nir: Add common task shader lowering to make the backend's job easier.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9eaf918ed29def18162a83fcf8f312561a739d59",
-        "description": "nir: Add new launch_mesh_workgroups intrinsic.",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c9f0a511e067c767eedcf7e446eca34ca8aa6b57",
-        "description": "ci/panfrost: add RoR and Nheko traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "da70c1b9f08c02ce9f144929db00226d83cf76d7",
-        "description": "ci/virgl: traces: add RoR and Nheko traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0a9461caf54295430136fa4f115d02fb9343bc22",
-        "description": "ci/radeonsi: add RoR and Nheko traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2d42335fb8601e16017430e32ee30870049f559e",
-        "description": "ci/llvmpipe: add RoR and Nheko traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9f3c91850b79c240be9dbb0005cb178f17b2d458",
-        "description": "ci/crocus: add RoR and Nheko traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b19c858f3d50a0bbed07192e53d838985ff86d4e",
-        "description": "ci/intel: add RoR and Nheko traces and reenable most of Valve traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "270e0d45fb413e8fb86a5a2426c1b999d44200a1",
-        "description": "ci/i915: add entries for RoR and Nheko traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b8381aaa376d005116de0d766bbcf80b12ca2b6e",
-        "description": "ci/freedreno: enable ROR and Nheko traces",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6bbe457f6835317aea32580b9edaf9ad2ff5417a",
-        "description": "ci/virgl: fix checksum for valve traces which run on iris",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "7577ca7e6a41029be3a336a48382e73549573a5d",
-        "description": "mesa: Avoid temp images in _mesa_texstore_*_dxt* for stride = 0",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "035e6e32f1c368c57fd2ed872bf0fb37a4eb5d11",
-        "description": "mesa: Require temp images in _mesa_texstore_*_dxt* with SkipImages",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6910891c7f71d97379c43914adc6443ae9e99aef",
-        "description": "mesa: Avoid temp images in _mesa_texstore_rgb_dxt1 for GL_RGBA source",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5602f424c3561e63fc249d1e9eaf5e5b4ae225f0",
-        "description": "mesa: Split tx_compress_dxtn into per-format functions",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "eb673c55f1f2e6a31e7148b1d1d08fcc8c606aa5",
-        "description": "st/mesa: remove unused GENERIC input and output from the clear VS",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3d6e44fd2a1a2790263fcd6d24a1cc606fed0de9",
-        "description": "r300,r600,svga: save the FS constant buffer for u_blitter to fix a regression",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "773a23eb6daa470766a537ea34891237b790c2e6"
-    },
-    {
-        "sha": "d827d433ce530ca558bc8a66a8b01d8a1d59aeb5",
-        "description": "util: Fixes typo in test_util_get_process_exec_path",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "aa7446b17edb64b196d501a97cca5463a03d7317",
-        "description": "util: Fixes test_util_get_process_exec_path on windows host with msys2/mingw",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "746287d221874802feb2d51471a9528be96ca42e",
-        "description": "v3dv/format: Add support for VK_KHR_format_feature_flags2",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "11a0ea76a26abb1b2ab5ee081b31dbacc94cea36",
-        "description": "v3dv/format: no need for GetPhysicalDeviceFormatProperties",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0c4a65ef34521b47fda4c5b59acfc4a8e97703f5",
-        "description": "zink: update radv piglit fails",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6450037b321563b367aa660334956329c04f33d4",
-        "description": "panfrost: Use tiled AFBC textures",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0255f554f39319e336b166e50fd0e6cef580975d",
-        "description": "panfrost: Advertise 16x16 tiled AFBC",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1f1da58ed180bf173e73903e0bf0e2232febd081",
-        "description": "panfrost: Gate tiled AFBC on GPUs that support it",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "3fbfd356af209391eb72b836d189fe9ab1f215dc",
-        "description": "panfrost: Add helper checking tiled AFBC support",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5fa274fee4451421eed3fc4d3138362fb54c2109",
-        "description": "panfrost: Handle AFBC Tiled",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b63dad3ce5dfcc5ffade6e35ad38e19188a4c09c",
-        "description": "panfrost: Put comment in correct #ifdef",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "bd529b79833b86dc05f5277b6824e86284304954",
-        "description": "panfrost: Fix AFBC flags on v6",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "166d879ff092022218ced089ff7568d7e2f54def",
-        "description": "panfrost: Add 1x1 layout unit tests",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "65ba39f84cc721c20ac1c7351fd8222d9f718059",
-        "description": "panfrost: Add a tiled 16x16 layout unit test",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d11945cd857102fcdf5e572d6d431b53c84f154e",
-        "description": "panfrost: Calculate header_size based on row_stride",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0cf6091bd019d59ed74a461a29865d496d25b6d6",
-        "description": "panfrost: Add 3D texture layout unit test",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5944bbfa949004452b9419af110e84d21ed6506f",
-        "description": "panfrost: Add AFBC stride unit tests",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "544a8894fc156cbbe428bb97067f9843482a8dc1",
-        "description": "panfrost: Align layouts to tiles of superblocks",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9c9b7f7a427727c52f4a49514eafed47618e6346",
-        "description": "panfrost: Support tiled AFBC in stride helpers",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "5c86f53112e486198082ca2f4cb165837da47a04",
-        "description": "panfrost: Add pan_afbc_tile_size helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "b7c18160d3a50e17584d90bd7919c45b86e72fd3",
-        "description": "panfrost: Fix is_wide return type",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "e4ee2c213a0f1597d8c2c89fb408ce8367434310"
-    },
-    {
-        "sha": "6b0ff7da48ef3fc6fddf1bb75efa455a1241a387",
-        "description": "panfrost: Extract pan_afbc_row_stride helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d8a4c9b5057831ccb62416800b2e9f85331dc002",
-        "description": "panfrost: Extract afbc_stride_blocks helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "9773ed1dc74b98019640d909cdc2b5d6cffae85a",
-        "description": "panfrost: Fix crash with GALLIUM_HUD",
-        "nominated": false,
-        "nomination_type": 1,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": "0fcddd4d2c401a7678139456702cbe15288eebf1"
-    },
-    {
-        "sha": "ef76b83633dc34eefed11f295cb3185c3991fecd",
-        "description": "radeonsi: Set display_remote for non-refernced frames",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "713f5040337cce93636259c0d8dd8eb365ce7afa",
-        "description": "ir3: handle gl_Layer and gl_ViewportIndex when there is TES + GS",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "1046c2a1c01b27c2bec47f1575236499e7071e53",
-        "description": "radv: fix writing buffer markers with non-zero memory offset",
-        "nominated": true,
-        "nomination_type": 0,
-        "resolution": 1,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "6f854ac2f29551208e528c8f6fcca0a4e8f48f3d",
-        "description": "radv: use pipeline->slab_bo in more places",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "0393cba27b9161f66880c05b63dfac29da014406",
-        "description": "radv: disable attachementFragmentShadingRate on GFX11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "4ffc7a50cbe5f09e4a40b5c1e3c8c0dae8974ff6",
-        "description": "radv: disable VK_AMD_shader_fragment_mask on GFX11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "779e09639b543958698c1e40a134b41631099197",
-        "description": "radv: configure DB_Z_INFO.NUM_SAMPLES correctly on GFX11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "00c649339bdc4ab0910e70e6f788b1d8619cf1b8",
-        "description": "radv: fix VK_BLEND_FACTOR_CONSTANT_COLOR translation on GFX11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "97dc28b177649e40a4f2a15af65ebb69ee06b6fe",
-        "description": "radv: fix configuring COLOR_INVALID on GFX11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "aa439d7f46a3e7659f50b22d5baceea0f96a55a3",
-        "description": "radv: report adjusted LDS size for fragment shaders on GFX11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "2fd5aa79b2d4fb2daa42ed4c20f4eaf7cf18af2b",
-        "description": "radv: use the fragment resolve path by default on GFX11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "f7b1ad7c06d24a4521a6d64e1e9f10888f4d1fd8",
-        "description": "radv: update VRS rates on GFX11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e210ffb4d0dc6b91fad79134a9712a5d5694f2f8",
-        "description": "radv: update framebuffer registers on GFX11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "d88c859b4e96e67b20710ebd2b4582dc362b7a5b",
-        "description": "radv: do not emit more non-existent registers on GFX11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "c5d8ef97faefb1cda7bbbb2fbc0eb81de5537a7e",
-        "description": "radv: rename VERT_GRP_SIZE to VERTS_PER_SUBGRP on GFX11",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e1811af75d5b9385f9811724557a81570d0ef98e",
-        "description": "util/perf: add options to enable/disable tracepoints",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "419274773750673da992e5bcb2292a1065434e31",
-        "description": "util/debug: add an enable parsing helper",
-        "nominated": false,
-        "nomination_type": null,
-        "resolution": 4,
-        "main_sha": null,
-        "because_sha": null
-    },
-    {
-        "sha": "e6660890827a42698dd5627e1aba0015584c7c22",
-        "description": "intel/disasm: add missing handling of <1;1,0>",
-        "nominated": false,
-     