diff --git a/anda/lib/mesa/mesa.spec b/anda/lib/mesa/mesa.spec index b57ee702a7..9ef2a40443 100644 --- a/anda/lib/mesa/mesa.spec +++ b/anda/lib/mesa/mesa.spec @@ -71,7 +71,7 @@ Name: %{srcname} Summary: Mesa graphics libraries %global ver 24.3.2 Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)} -Release: 2%?dist +Release: 3%?dist License: MIT AND BSD-3-Clause AND SGI-B-2.0 URL: http://www.mesa3d.org @@ -92,10 +92,14 @@ Source0: https://archive.mesa3d.org/%{srcname}-%{ver}.tar.xz Source1: Mesa-MLAA-License-Clarification-Email.txt #Patch10: https://src.fedoraproject.org/rpms/mesa/raw/e89544b7a4d811a64ca23b402add29524cc6f704/f/gnome-shell-glthread-disable.patch -# Patch11: https://src.fedoraproject.org/rpms/mesa/raw/e89544b7a4d811a64ca23b402add29524cc6f704/f/0001-llvmpipe-Init-eglQueryDmaBufModifiersEXT-num_modifie.patch +#Patch11: https://src.fedoraproject.org/rpms/mesa/raw/e89544b7a4d811a64ca23b402add29524cc6f704/f/0001-llvmpipe-Init-eglQueryDmaBufModifiersEXT-num_modifie.patch #Patch12: https://src.fedoraproject.org/rpms/mesa/raw/e89544b7a4d811a64ca23b402add29524cc6f704/f/0001-Revert-ac-radeonsi-remove-has_syncobj-has_fence_to_h.patch + +# https://gitlab.com/evlaV/mesa/ +Patch20: valve.patch + # s390x: fix build -# Patch100: https://src.fedoraproject.org/rpms/mesa/raw/e89544b7a4d811a64ca23b402add29524cc6f704/f/fix-egl-on-s390x.patch +#Patch100: https://src.fedoraproject.org/rpms/mesa/raw/e89544b7a4d811a64ca23b402add29524cc6f704/f/fix-egl-on-s390x.patch BuildRequires: meson >= 1.3.0 BuildRequires: gcc diff --git a/anda/lib/mesa/valve.patch b/anda/lib/mesa/valve.patch new file mode 100644 index 0000000000..d4eb3da790 --- /dev/null +++ b/anda/lib/mesa/valve.patch @@ -0,0 +1,143 @@ +From 04afaf13b208f5c58c0b057f3dfc2dfa5c19a334 Mon Sep 17 00:00:00 2001 +From: Bas Nieuwenhuizen +Date: Fri, 14 Jan 2022 15:58:45 +0100 +Subject: [PATCH 5/8] STEAMOS: radv: min image count override for FH5 + +Otherwise in combination with the vblank time reservation in +gamescope the game could get stuck in low power states. +--- + src/util/00-radv-defaults.conf | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/util/00-radv-defaults.conf b/src/util/00-radv-defaults.conf +index 1cbb2e087c9..43488ada6bc 100644 +--- a/src/util/00-radv-defaults.conf ++++ b/src/util/00-radv-defaults.conf +@@ -207,6 +207,11 @@ Application bugs worked around in this file: + + ++ ++ ++ ++ + + + +2.42.0 + + +From b1c0d3de07bf958317f386585ce541b1c336e929 Mon Sep 17 00:00:00 2001 +From: Bas Nieuwenhuizen +Date: Mon, 21 Feb 2022 18:43:54 +0100 +Subject: [PATCH 6/8] STEAMOS: Dynamic swapchain override for gamescope limiter + +--- + src/gallium/frontends/dri/loader_dri3_helper.c | 42 +++++++++++++++++++++++++++++++-- + src/gallium/frontends/dri/loader_dri3_helper.h | 1 + + src/loader/meson.build | 2 +- + 4 files changed, 80 insertions(+), 3 deletions(-) + +diff --git a/src/gallium/frontends/dri/loader_dri3_helper.c b/src/gallium/frontends/dri/loader_dri3_helper.c +index 2631a9e2fd5..dbf6db349c6 100644 +--- a/src/gallium/frontends/dri/loader_dri3_helper.c ++++ b/src/gallium/frontends/dri/loader_dri3_helper.c +@@ -276,6 +276,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) + { +@@ -290,10 +314,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 +@@ -422,6 +448,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 */ +@@ -1066,6 +1098,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 cc2362dd599..fe73b3f329c 100644 +--- a/src/gallium/frontends/dri/loader_dri3_helper.h ++++ b/src/gallium/frontends/dri/loader_dri3_helper.h +@@ -170,6 +170,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/src/gallium/frontends/dri/meson.build b/src/gallium/frontends/dri/meson.build +index a98c8c0..0d4f816 100644 +--- a/src/gallium/frontends/dri/meson.build ++++ b/src/gallium/frontends/dri/meson.build +@@ -23,7 +23,7 @@ if with_platform_x11 + deps_for_libdri += dep_xcb + if with_dri_platform == 'drm' + deps_for_libdri += [dep_xcb_dri3, dep_xcb_present, dep_xcb_sync, +- dep_xshmfence, dep_xcb_xfixes] ++ dep_xshmfence, dep_xcb_xfixes, dep_xcb_xrandr, idep_mesautil] + files_libdri += files('loader_dri3_helper.c') + endif + endif