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 =