diff --git a/anda/lib/mesa/gamescope.patch b/anda/lib/mesa/gamescope.patch
deleted file mode 100644
index fba308b2bc..0000000000
--- a/anda/lib/mesa/gamescope.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-diff --git a/src/gallium/frontends/dri/loader_dri3_helper.c b/src/gallium/frontends/dri/loader_dri3_helper.c
-index 2c8caba08fd..2c9159672dc 100644
---- a/src/gallium/frontends/dri/loader_dri3_helper.c
-+++ b/src/gallium/frontends/dri/loader_dri3_helper.c
-@@ -297,6 +297,30 @@ dri3_update_max_num_back(struct loader_dri3_drawable *draw)
- }
- }
-
-+static unsigned
-+gamescope_swapchain_override()
-+{
-+ const char *path = getenv("GAMESCOPE_LIMITER_FILE");
-+ if (!path)
-+ return 0;
-+
-+ static simple_mtx_t mtx = SIMPLE_MTX_INITIALIZER;
-+ static int fd = -1;
-+
-+ simple_mtx_lock(&mtx);
-+ if (fd < 0) {
-+ fd = open(path, O_RDONLY);
-+ }
-+ simple_mtx_unlock(&mtx);
-+
-+ if (fd < 0)
-+ return 0;
-+
-+ uint32_t override_value = 0;
-+ pread(fd, &override_value, sizeof(override_value), 0);
-+ return override_value;
-+}
-+
- void
- loader_dri3_set_swap_interval(struct loader_dri3_drawable *draw, int interval)
- {
-@@ -311,10 +335,12 @@ loader_dri3_set_swap_interval(struct loader_dri3_drawable *draw, int interval)
- * PS. changing from value A to B and A < B won't cause swap out of order but
- * may still gets wrong target_msc value at the beginning.
- */
-- if (draw->swap_interval != interval)
-+ if (draw->orig_swap_interval != interval)
- loader_dri3_swapbuffer_barrier(draw);
-
-- draw->swap_interval = interval;
-+ draw->orig_swap_interval = interval;
-+ if (gamescope_swapchain_override() != 1)
-+ draw->swap_interval = interval;
- }
-
- static void
-@@ -443,6 +469,12 @@ loader_dri3_drawable_init(xcb_connection_t *conn,
-
- draw->swap_interval = dri_get_initial_swap_interval(draw->dri_screen_render_gpu);
-
-+ draw->orig_swap_interval = draw->swap_interval;
-+
-+ unsigned gamescope_override = gamescope_swapchain_override();
-+ if (gamescope_override == 1)
-+ draw->swap_interval = 1;
-+
- dri3_update_max_num_back(draw);
-
- /* Create a new drawable */
-@@ -1085,6 +1117,12 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw,
- if (draw->type == LOADER_DRI3_DRAWABLE_WINDOW) {
- dri3_fence_reset(draw->conn, back);
-
-+ unsigned gamescope_override = gamescope_swapchain_override();
-+ if (gamescope_override == 1)
-+ draw->swap_interval = 1;
-+ else
-+ draw->swap_interval = draw->orig_swap_interval;
-+
- /* Compute when we want the frame shown by taking the last known
- * successful MSC and adding in a swap interval for each outstanding swap
- * request. target_msc=divisor=remainder=0 means "Use glXSwapBuffers()
-diff --git a/src/gallium/frontends/dri/loader_dri3_helper.h b/src/gallium/frontends/dri/loader_dri3_helper.h
-index 26f138d1b83..3f0f3f66fac 100644
---- a/src/gallium/frontends/dri/loader_dri3_helper.h
-+++ b/src/gallium/frontends/dri/loader_dri3_helper.h
-@@ -169,6 +169,7 @@ struct loader_dri3_drawable {
- bool block_on_depleted_buffers;
- bool queries_buffer_age;
- int swap_interval;
-+ int orig_swap_interval;
-
- const struct loader_dri3_vtable *vtable;
-
diff --git a/anda/lib/mesa/horizon5.patch b/anda/lib/mesa/horizon5.patch
deleted file mode 100644
index 1b660810de..0000000000
--- a/anda/lib/mesa/horizon5.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/src/util/00-radv-defaults.conf b/src/util/00-radv-defaults.conf
-index e36357b9e4a..68a1957ee7b 100644
---- a/src/util/00-radv-defaults.conf
-+++ b/src/util/00-radv-defaults.conf
-@@ -311,5 +311,9 @@ Application bugs worked around in this file:
-
-
-
-+
-+
-+
-+
-
-
diff --git a/anda/lib/mesa/mesa.spec b/anda/lib/mesa/mesa.spec
index 4877b9b228..d1c0cc0226 100644
--- a/anda/lib/mesa/mesa.spec
+++ b/anda/lib/mesa/mesa.spec
@@ -5,16 +5,18 @@
%ifnarch s390x
%global with_hardware 1
%global with_kmsro 1
-%global with_nvk 1
%global with_radeonsi 1
%global with_spirv_tools 1
%global with_vmware 1
%global with_vulkan_hw 1
-%global with_va 1
%if !0%{?rhel}
%global with_r300 1
%global with_r600 1
%global with_opencl 1
+%global with_va 1
+%endif
+%if !0%{?rhel} || 0%{?rhel} >= 9
+%global with_nvk %{with_vulkan_hw}
%endif
%global base_vulkan %{?with_vulkan_hw:,amd}%{!?with_vulkan_hw:%{nil}}
%endif
@@ -82,10 +84,10 @@
Name: %{srcname}
Summary: Mesa graphics libraries
-%global ver 25.3.3
+%global ver 25.3.4
Epoch: 1
Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)}
-Release: 2
+Release: 1
Packager: Kyle Gospodnetich
License: MIT AND BSD-3-Clause AND SGI-B-2.0
URL: http://www.mesa3d.org
@@ -116,12 +118,9 @@ Source15: https://crates.io/api/v1/crates/rustc-hash/%{rustc_hash_ver}/dow
# Teflon: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38532
Patch12: mesa-38532.patch
-# Add required patches for Wine Wayland (From Proton-GE Release Notes)
-Patch21: wine-wayland.patch
-
-# SteamOS Patches
-Patch30: gamescope.patch
-Patch31: horizon5.patch
+# Open Gaming Collective Patches
+Patch30: https://raw.githubusercontent.com/OpenGamingCollective/mesa/refs/heads/%{ver}/limiter.patch
+Patch31: https://raw.githubusercontent.com/OpenGamingCollective/mesa/refs/heads/%{ver}/radv-defaults.patch
BuildRequires: meson >= 1.3.0
BuildRequires: gcc
diff --git a/anda/lib/mesa/wine-wayland.patch b/anda/lib/mesa/wine-wayland.patch
deleted file mode 100644
index 85764678a0..0000000000
--- a/anda/lib/mesa/wine-wayland.patch
+++ /dev/null
@@ -1,293 +0,0 @@
-diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c
-index 5cbfc6f344a..622406fee25 100644
---- a/src/amd/vulkan/radv_instance.c
-+++ b/src/amd/vulkan/radv_instance.c
-@@ -154,7 +154,7 @@ static const struct debug_control trace_options[] = {
- static const driOptionDescription radv_dri_options[] = {
- DRI_CONF_SECTION_PERFORMANCE
- DRI_CONF_ADAPTIVE_SYNC(true)
-- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
-+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
- DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
- DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
- DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
-diff --git a/src/asahi/vulkan/hk_instance.c b/src/asahi/vulkan/hk_instance.c
-index 1fd2c844681..a872018d923 100644
---- a/src/asahi/vulkan/hk_instance.c
-+++ b/src/asahi/vulkan/hk_instance.c
-@@ -80,7 +80,7 @@ hk_EnumerateInstanceExtensionProperties(const char *pLayerName,
- static const driOptionDescription hk_dri_options[] = {
- DRI_CONF_SECTION_PERFORMANCE
- DRI_CONF_ADAPTIVE_SYNC(true)
-- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
-+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
- DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
- DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
- DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
-diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc
-index 05ffad6424d..e32862161de 100644
---- a/src/freedreno/vulkan/tu_device.cc
-+++ b/src/freedreno/vulkan/tu_device.cc
-@@ -1748,7 +1748,7 @@ tu_destroy_physical_device(struct vk_physical_device *device)
-
- static const driOptionDescription tu_dri_options[] = {
- DRI_CONF_SECTION_PERFORMANCE
-- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
-+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
- DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
- DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
- DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
-diff --git a/src/intel/vulkan/anv_instance.c b/src/intel/vulkan/anv_instance.c
-index 7967313f1f5..96cc0b5707e 100644
---- a/src/intel/vulkan/anv_instance.c
-+++ b/src/intel/vulkan/anv_instance.c
-@@ -10,7 +10,7 @@
- static const driOptionDescription anv_dri_options[] = {
- DRI_CONF_SECTION_PERFORMANCE
- DRI_CONF_ADAPTIVE_SYNC(true)
-- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
-+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
- DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
- DRI_CONF_VK_WSI_DISABLE_UNORDERED_SUBMITS(false)
- DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
-diff --git a/src/intel/vulkan_hasvk/anv_device.c b/src/intel/vulkan_hasvk/anv_device.c
-index d111c96ae7a..42e3f82eff9 100644
---- a/src/intel/vulkan_hasvk/anv_device.c
-+++ b/src/intel/vulkan_hasvk/anv_device.c
-@@ -66,7 +66,7 @@
- static const driOptionDescription anv_dri_options[] = {
- DRI_CONF_SECTION_PERFORMANCE
- DRI_CONF_ADAPTIVE_SYNC(true)
-- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
-+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
- DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
- DRI_CONF_VK_XWAYLAND_WAIT_READY(true)
- DRI_CONF_ANV_ASSUME_FULL_SUBGROUPS(0)
-diff --git a/src/nouveau/vulkan/nvk_instance.c b/src/nouveau/vulkan/nvk_instance.c
-index e2413045455..2261dc080a8 100644
---- a/src/nouveau/vulkan/nvk_instance.c
-+++ b/src/nouveau/vulkan/nvk_instance.c
-@@ -98,7 +98,7 @@ nvk_init_debug_flags(struct nvk_instance *instance)
- static const driOptionDescription nvk_dri_options[] = {
- DRI_CONF_SECTION_PERFORMANCE
- DRI_CONF_ADAPTIVE_SYNC(true)
-- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
-+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
- DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
- DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
- DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
-diff --git a/src/panfrost/vulkan/panvk_instance.c b/src/panfrost/vulkan/panvk_instance.c
-index bb425414bb1..39f137d5ab3 100644
---- a/src/panfrost/vulkan/panvk_instance.c
-+++ b/src/panfrost/vulkan/panvk_instance.c
-@@ -178,7 +178,7 @@ panvk_kmod_free(const struct pan_kmod_allocator *allocator, void *data)
- static const driOptionDescription panvk_dri_options[] = {
- DRI_CONF_SECTION_PERFORMANCE
- DRI_CONF_ADAPTIVE_SYNC(true)
-- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
-+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
- DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
- DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
- DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
-diff --git a/src/util/00-mesa-defaults.conf b/src/util/00-mesa-defaults.conf
-index 1dc9d17af82..ce4d7d3399d 100644
---- a/src/util/00-mesa-defaults.conf
-+++ b/src/util/00-mesa-defaults.conf
-@@ -649,24 +649,24 @@ TODO: document the other workarounds.
-
-
-
--
-+
-
-
-
-
--
-+
-
-
-
-
--
-+
-
-
-
-
-
--
-+
-
-
-
-@@ -727,10 +727,12 @@ TODO: document the other workarounds.
-
-
-
-+
-
-
-
-
-+
-
-
-
-diff --git a/src/util/driconf.h b/src/util/driconf.h
-index 8399c21e383..2d8fbcbd81f 100644
---- a/src/util/driconf.h
-+++ b/src/util/driconf.h
-@@ -456,8 +456,8 @@
- DRI_CONF_OPT_B(vk_wsi_disable_unordered_submits, def, \
- "Disable unordered WSI submits to workaround application synchronization bugs")
-
--#define DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(def) \
-- DRI_CONF_OPT_I(vk_x11_override_min_image_count, def, 0, 999, \
-+#define DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(def) \
-+ DRI_CONF_OPT_I(vk_override_min_image_count, def, 0, 999, \
- "Override the VkSurfaceCapabilitiesKHR::minImageCount (0 = no override)")
-
- #define DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(def) \
-diff --git a/src/virtio/vulkan/vn_instance.c b/src/virtio/vulkan/vn_instance.c
-index 523f0590e9a..b1f642f1c2e 100644
---- a/src/virtio/vulkan/vn_instance.c
-+++ b/src/virtio/vulkan/vn_instance.c
-@@ -70,8 +70,8 @@ static const struct vk_instance_extension_table
- static const driOptionDescription vn_dri_options[] = {
- /* clang-format off */
- DRI_CONF_SECTION_PERFORMANCE
-+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
- DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
-- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
- DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
- DRI_CONF_VK_XWAYLAND_WAIT_READY(true)
- DRI_CONF_VENUS_IMPLICIT_FENCING(false)
-diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c
-index 0c4a4ce652e..2a95cfd557b 100644
---- a/src/vulkan/wsi/wsi_common.c
-+++ b/src/vulkan/wsi/wsi_common.c
-@@ -220,7 +220,7 @@ wsi_device_init(struct wsi_device *wsi,
- #endif
-
- #ifdef VK_USE_PLATFORM_WAYLAND_KHR
-- result = wsi_wl_init_wsi(wsi, alloc, pdevice);
-+ result = wsi_wl_init_wsi(wsi, alloc, pdevice, dri_options);
- if (result != VK_SUCCESS)
- goto fail;
- #endif
-diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h
-index abe771b5bfc..d67f953c42a 100644
---- a/src/vulkan/wsi/wsi_common.h
-+++ b/src/vulkan/wsi/wsi_common.h
-@@ -161,6 +161,10 @@ struct wsi_device {
- struct {
- /* Don't use the commit-timing protocol for pacing */
- bool disable_timestamps;
-+
-+ /* Override the minimum number of images on the swapchain.
-+ * 0 = no override */
-+ double override_minImageCount;
- } wayland;
-
- /*
-diff --git a/src/vulkan/wsi/wsi_common_private.h b/src/vulkan/wsi/wsi_common_private.h
-index 9fe64cfba95..c20174f6175 100644
---- a/src/vulkan/wsi/wsi_common_private.h
-+++ b/src/vulkan/wsi/wsi_common_private.h
-@@ -456,7 +456,8 @@ void wsi_x11_finish_wsi(struct wsi_device *wsi_device,
- const VkAllocationCallbacks *alloc);
- VkResult wsi_wl_init_wsi(struct wsi_device *wsi_device,
- const VkAllocationCallbacks *alloc,
-- VkPhysicalDevice physical_device);
-+ VkPhysicalDevice physical_device,
-+ const struct driOptionCache *dri_options);
- void wsi_wl_finish_wsi(struct wsi_device *wsi_device,
- const VkAllocationCallbacks *alloc);
- VkResult wsi_win32_init_wsi(struct wsi_device *wsi_device,
-diff --git a/src/vulkan/wsi/wsi_common_wayland.c b/src/vulkan/wsi/wsi_common_wayland.c
-index cf3749be6d4..04278d3c8a3 100644
---- a/src/vulkan/wsi/wsi_common_wayland.c
-+++ b/src/vulkan/wsi/wsi_common_wayland.c
-@@ -58,6 +58,7 @@
- #include
- #include
- #include
-+#include
-
- #include
-
-@@ -1703,9 +1704,12 @@ wsi_wl_surface_get_support(VkIcdSurfaceBase *surface,
- #define WSI_WL_DEFAULT_NUM_IMAGES 3
-
- static uint32_t
--wsi_wl_surface_get_min_image_count(struct wsi_wl_display *display,
-+wsi_wl_surface_get_min_image_count(struct wsi_device *wsi_device, struct wsi_wl_display *display,
- const VkSurfacePresentModeEXT *present_mode)
- {
-+ if (wsi_device->wayland.override_minImageCount)
-+ return wsi_device->wayland.override_minImageCount;
-+
- if (present_mode) {
- return present_mode->presentMode == VK_PRESENT_MODE_MAILBOX_KHR ?
- WSI_WL_BUMPED_NUM_IMAGES : WSI_WL_DEFAULT_NUM_IMAGES;
-@@ -1754,7 +1758,7 @@ wsi_wl_surface_get_capabilities(VkIcdSurfaceBase *icd_surface,
- display = &temp_display;
- }
-
-- caps->minImageCount = wsi_wl_surface_get_min_image_count(display, present_mode);
-+ caps->minImageCount = wsi_wl_surface_get_min_image_count(wsi_device, display, present_mode);
-
- if (!wsi_wl_surface->display)
- wsi_wl_display_finish(&temp_display);
-@@ -3516,7 +3520,7 @@ wsi_wl_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
- const VkSurfacePresentModeEXT mode =
- { VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT, NULL, pCreateInfo->presentMode };
-
-- uint32_t min_images = wsi_wl_surface_get_min_image_count(wsi_wl_surface->display, &mode);
-+ uint32_t min_images = wsi_wl_surface_get_min_image_count(wsi_device, wsi_wl_surface->display, &mode);
- bool requires_image_count_bump = min_images == WSI_WL_BUMPED_NUM_IMAGES;
- if (requires_image_count_bump)
- num_images = MAX2(min_images, num_images);
-@@ -3711,7 +3715,8 @@ fail:
- VkResult
- wsi_wl_init_wsi(struct wsi_device *wsi_device,
- const VkAllocationCallbacks *alloc,
-- VkPhysicalDevice physical_device)
-+ VkPhysicalDevice physical_device,
-+ const struct driOptionCache *dri_options)
- {
- struct wsi_wayland *wsi;
- VkResult result;
-@@ -3737,6 +3742,14 @@ wsi_wl_init_wsi(struct wsi_device *wsi_device,
-
- wsi_device->wsi[VK_ICD_WSI_PLATFORM_WAYLAND] = &wsi->base;
-
-+ if (dri_options)
-+ {
-+ if (driCheckOption(dri_options, "vk_override_min_image_count", DRI_INT)) {
-+ wsi_device->wayland.override_minImageCount =
-+ driQueryOptioni(dri_options, "vk_override_min_image_count");
-+ }
-+ }
-+
- return VK_SUCCESS;
-
- fail:
-diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c
-index 2cd023dadcf..7872a2a899f 100644
---- a/src/vulkan/wsi/wsi_common_x11.c
-+++ b/src/vulkan/wsi/wsi_common_x11.c
-@@ -2924,9 +2924,9 @@ wsi_x11_init_wsi(struct wsi_device *wsi_device,
- }
-
- if (dri_options) {
-- if (driCheckOption(dri_options, "vk_x11_override_min_image_count", DRI_INT)) {
-+ if (driCheckOption(dri_options, "vk_override_min_image_count", DRI_INT)) {
- wsi_device->x11.override_minImageCount =
-- driQueryOptioni(dri_options, "vk_x11_override_min_image_count");
-+ driQueryOptioni(dri_options, "vk_override_min_image_count");
- }
- if (driCheckOption(dri_options, "vk_x11_strict_image_count", DRI_BOOL)) {
- wsi_device->x11.strict_imageCount =