mirror of
https://github.com/terrapkg/packages.git
synced 2026-05-31 09:01:55 +00:00
[f41] feat: Add Valve's gamescope patch for Mesa (#2843)
* [f41] feat: Add Valve's gamescope patch for Mesa * fix: Update Valve patch for latest mesa --------- Co-authored-by: Cappy Ishihara <cappy@cappuchino.xyz>
This commit is contained in:
committed by
GitHub
parent
1bf1593982
commit
329b366274
@@ -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
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
From 04afaf13b208f5c58c0b057f3dfc2dfa5c19a334 Mon Sep 17 00:00:00 2001
|
||||
From: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
|
||||
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:
|
||||
<application name="Rocket League" executable="RocketLeague">
|
||||
<option name="radv_zero_vram" value="true" />
|
||||
</application>
|
||||
+
|
||||
+ <application name="Forza Horizon 5" application_name_match="ForzaHorizon5.exe">
|
||||
+ <option name="vk_x11_override_min_image_count" value="4" />
|
||||
+ </application>
|
||||
+
|
||||
<application name="Crystal Project" executable="Crystal Project.bin.x86_64">
|
||||
<option name="radv_zero_vram" value="true" />
|
||||
</application>
|
||||
|
||||
2.42.0
|
||||
|
||||
|
||||
From b1c0d3de07bf958317f386585ce541b1c336e929 Mon Sep 17 00:00:00 2001
|
||||
From: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
|
||||
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
|
||||
Reference in New Issue
Block a user