fix: gamescope (bazzite port) (#2845) (#2848)

* fix gamescope (bazzite port)

* It's 2025 lol

Signed-off-by: Owen Zimmerman <123591347+Owen-sz@users.noreply.github.com>

---------

Signed-off-by: Owen Zimmerman <123591347+Owen-sz@users.noreply.github.com>
(cherry picked from commit 4fc6a555dc)

Co-authored-by: Owen Zimmerman <123591347+Owen-sz@users.noreply.github.com>
This commit is contained in:
Raboneko
2025-01-02 20:26:44 -08:00
committed by GitHub
parent b1494998cf
commit 93816bfe0b
14 changed files with 2475 additions and 2306 deletions
+1
View File
@@ -34,3 +34,4 @@ index 072d439..e4bb633 100644
--
2.41.0
-21
View File
@@ -1,21 +0,0 @@
From 88ce1e5de62886aa14c74421cde6130e16e70d7d Mon Sep 17 00:00:00 2001
From: psykose <alice@ayaya.dev>
Date: Sat, 6 Jul 2024 20:52:50 +0200
Subject: [PATCH] utils: include limits.h for PATH_MAX
---
src/Utils/Process.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/Utils/Process.cpp b/src/Utils/Process.cpp
index e71786f75..3e748e0d3 100644
--- a/src/Utils/Process.cpp
+++ b/src/Utils/Process.cpp
@@ -21,6 +21,7 @@
#include <pthread.h>
#include <stdlib.h>
#include <dirent.h>
+#include <limits.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
-34
View File
@@ -1,34 +0,0 @@
From ca58cb2453e6d9ef44d799e394ee9950b7a35b30 Mon Sep 17 00:00:00 2001
From: Cappy Ishihara <cappy@cappuchino.xyz>
Date: Wed, 21 Aug 2024 03:56:53 +0700
Subject: [PATCH] Check if current GPU supports Vulkan DRM modifiers when
`--backend=auto` is used.
This works around #1218 by making use of the new backend option added in #1321,
but adds a check to automatically fall back to the SDL backend if the current
GPU does not support Vulkan DRM modifiers.
---
src/main.cpp | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/main.cpp b/src/main.cpp
index ca4001249..bc6b16904 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -817,9 +817,13 @@ int main(int argc, char **argv)
if ( eCurrentBackend == gamescope::GamescopeBackend::Auto )
{
if ( g_pOriginalWaylandDisplay != NULL )
- eCurrentBackend = gamescope::GamescopeBackend::Wayland;
- else if ( g_pOriginalDisplay != NULL )
- eCurrentBackend = gamescope::GamescopeBackend::SDL;
+ // Additional check if the current GPU supports Vulkan DRM modifiers
+ // Fallback to SDL if not supported (e.g Older AMD GPUs like Polaris 10/20)
+ if ( vulkan_supports_modifiers() )
+ eCurrentBackend = gamescope::GamescopeBackend::Wayland;
+ else
+ eCurrentBackend = gamescope::GamescopeBackend::SDL;
+
else
eCurrentBackend = gamescope::GamescopeBackend::DRM;
}
Regular → Executable
+7 -6
View File
@@ -1,8 +1,9 @@
project pkg {
rpm {
spec = "terra-gamescope.spec"
}
labels {
multilib = 1
}
rpm {
spec = "gamescope.spec"
}
labels {
multilib = 1
extra = 1
}
}
File diff suppressed because it is too large Load Diff
@@ -1,51 +0,0 @@
diff --git a/src/main.cpp b/src/main.cpp
index 119e043..6c46d97 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -148,6 +148,8 @@ const struct option *gamescope_options = (struct option[]){
{ "reshade-effect", required_argument, nullptr, 0 },
{ "reshade-technique-idx", required_argument, nullptr, 0 },
+ { "disable-touch-click", no_argument, nullptr, 0 },
+
// Steam Deck options
{ "mura-map", required_argument, nullptr, 0 },
@@ -193,6 +195,7 @@ const char usage[] =
" -e, --steam enable Steam integration\n"
" --bypass-steam-resolution bypass Steam's default 720p/800p default resolution\n"
" --touch-gestures enable touch gestures for Steam menus\n"
+ " --disable-touch-click disable touchscreen tap acting as a click\n"
" --xwayland-count create N xwayland servers\n"
" --prefer-vk-device prefer Vulkan device for compositing (ex: 1002:7300)\n"
" --force-orientation rotate the internal display (left, right, normal, upsidedown)\n"
diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp
index 92bf617..d7498e5 100644
--- a/src/steamcompmgr.cpp
+++ b/src/steamcompmgr.cpp
@@ -347,6 +347,7 @@ bool g_bHDRItmEnable = false;
int g_nCurrentRefreshRate_CachedValue = 0;
gamescope::ConVar<bool> cv_bypass_steam_resolution{ "bypass_steam_resolution", false, "Workaround the 720p/800p limits Steam uses for games" };
+gamescope::ConVar<bool> cv_disable_touch_click{ "disable_touch_click", false, "Prevents touchscreen taps acting as clicks" };
static void
update_color_mgmt()
@@ -5128,7 +5129,7 @@ handle_property_notify(xwayland_ctx_t *ctx, XPropertyEvent *ev)
MakeFocusDirty();
}
}
- if (ev->atom == ctx->atoms.steamTouchClickModeAtom )
+ if (ev->atom == ctx->atoms.steamTouchClickModeAtom && !cv_disable_touch_click)
{
gamescope::cv_touch_click_mode = (gamescope::TouchClickMode) get_prop(ctx, ctx->root, ctx->atoms.steamTouchClickModeAtom, 0u );
}
@@ -7301,6 +7302,8 @@ steamcompmgr_main(int argc, char **argv)
g_reshade_technique_idx = atoi(optarg);
} else if (strcmp(opt_name, "mura-map") == 0) {
set_mura_overlay(optarg);
+ } else if (strcmp(opt_name, "disable-touch-click") == 0) {
+ cv_disable_touch_click = true;
}
break;
case '?':
-29
View File
@@ -1,29 +0,0 @@
#!/bin/sh
# Wrapper script to run Gamescope with legacy options for older GPUs
gamescope_path="/usr/bin/gamescope"
# check if $BACKEND is already defined
# todo: Probably want to patch gamescope-session-plus for this instead meow
# For compatibility, let's add the argument for nested backends too
LEGACY_BACKEND_ARGS=""
NESTED_BACKEND_ARGS=""
if [ -z "$BACKEND" ]; then
LEGACY_BACKEND_ARGS="--backend=sdl"
NESTED_BACKEND_ARGS="--backend=sdl"
else
# Only added for nested sessions, as $BACKEND should be defined only for legacy
NESTED_BACKEND_ARGS="--backend=$BACKEND"
fi
if [ -z "$DISPLAY" ]; then
$gamescope_path $LEGACY_BACKEND_ARGS $@
else
$gamescope_path $NESTED_BACKEND_ARGS $@
fi
+27 -47
View File
@@ -1,43 +1,34 @@
%if 0%{?fedora} >= 41
%global libliftoff_minver 0.5.0
%else
%global libliftoff_minver 0.4.1
%endif
%global toolchain clang
%global _default_patch_fuzz 2
%global gamescope_tag 3.16.1
%global build_timestamp %(date +"%Y%m%d")
#global gamescope_tag 3.15.11
%global gamescope_commit d3174928d47f7e353e7daca63cf882d65660cc7c
%define short_commit %(echo %{gamescope_commit} | cut -c1-8)
Name: terra-gamescope
Version: 100.%{gamescope_tag}
Name: gamescope
#Version: 100.%{gamescope_tag}
Version: 104.%{short_commit}
Release: 1%?dist
Summary: Micro-compositor for video games on Wayland - Terra patch, please read the full description
Summary: Micro-compositor for video games on Wayland
License: BSD
URL: https://github.com/ValveSoftware/gamescope
# Create stb.pc to satisfy dependency('stb')
Source0: stb.pc
Source1: gamescope-legacy.sh
Patch0: 0001-cstdint.patch
# https://github.com/ChimeraOS/gamescope
Patch1: chimeraos.patch
# https://hhd.dev/
Patch2: disable-steam-touch-click-atom.patch
Patch3: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch
# Set default backend to SDL instead of Wayland, to avoid issues with GPUs that do not support
# Vulkan DRM modifiers.
# See also: gamescope-legacy package
# https://github.com/ValveSoftware/gamescope/issues/1218#issuecomment-2123801764
Patch6: 1483.patch
# https://github.com/ChimeraOS/gamescope
Patch1: handheld.patch
BuildRequires: meson >= 0.54.0
BuildRequires: ninja-build
BuildRequires: cmake
BuildRequires: clang
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: glm-devel
BuildRequires: google-benchmark-devel
BuildRequires: libXmu-devel
@@ -65,10 +56,11 @@ BuildRequires: pkgconfig(sdl2)
BuildRequires: pkgconfig(libpipewire-0.3)
BuildRequires: pkgconfig(libavif)
BuildRequires: pkgconfig(wlroots)
BuildRequires: pkgconfig(libliftoff) >= 0.4.1
BuildRequires: pkgconfig(libliftoff)
BuildRequires: pkgconfig(libcap)
BuildRequires: pkgconfig(hwdata)
BuildRequires: pkgconfig(lcms2)
BuildRequires: pkgconfig(luajit)
BuildRequires: spirv-headers-devel
# Enforce the the minimum EVR to contain fixes for all of:
# CVE-2021-28021 CVE-2021-42715 CVE-2021-42716 CVE-2022-28041 CVE-2023-43898
@@ -90,29 +82,24 @@ BuildRequires: git
# libliftoff hasn't bumped soname, but API/ABI has changed for 0.2.0 release
Requires: libliftoff%{?_isa} >= %{libliftoff_minver}
Requires: xorg-x11-server-Xwayland
Requires: terra-gamescope-libs = %{version}-%{release}
Requires: terra-gamescope-libs(x86-32) = %{version}-%{release}
Requires: gamescope-libs = %{version}-%{release}
Requires: gamescope-libs(x86-32) = %{version}-%{release}
Recommends: mesa-dri-drivers
Recommends: mesa-vulkan-drivers
Provides: gamescope-legacy
Obsoletes: gamescope-legacy < 3.14.2
%description
Gamescope is the micro-compositor optimized for running video games on Wayland.
This specific build of Gamescope is patched to use SDL as the default backend instead of Wayland, and
includes a legacy wrapper script for older GPUs and extra configuration options. Please see
https://developer.fyralabs.com/terra/gamescope for more information.
%{name} is the micro-compositor optimized for running video games on Wayland.
%package libs
Summary: libs for Gamescope
Summary: libs for %{name}
%description libs
%summary
%prep
git clone --depth 1 --branch %{gamescope_tag} %{url}.git
# git clone --depth 1 --branch %%{gamescope_tag} %%{url}.git
git clone %{url}.git
cd gamescope
git checkout %{gamescope_commit}
git submodule update --init --recursive
mkdir -p pkgconfig
cp %{SOURCE0} pkgconfig/stb.pc
@@ -125,35 +112,28 @@ sed -i 's^../thirdparty/SPIRV-Headers/include/spirv/^/usr/include/spirv/^' src/m
%build
cd gamescope
export PKG_CONFIG_PATH=pkgconfig
%if %{__isa_bits} == 64
%meson --auto-features=enabled -Dforce_fallback_for=vkroots,wlroots,libliftoff
%else
%meson -Denable_gamescope=false -Denable_gamescope_wsi_layer=true
%endif
%meson \
--auto-features=enabled \
-Dforce_fallback_for=vkroots,wlroots,libliftoff
%meson_build
%install
cd gamescope
%meson_install --skip-subprojects
%if %{__isa_bits} == 64
install -Dm755 %{SOURCE1} %{buildroot}%{_bindir}/gamescope-legacy
%endif
%files
%license gamescope/LICENSE
%doc gamescope/README.md
%if %{__isa_bits} == 64
%caps(cap_sys_nice=eip) %{_bindir}/gamescope
%{_bindir}/gamescopectl
%{_bindir}/gamescopestream
%{_bindir}/gamescopereaper
%{_bindir}/gamescope-legacy
%endif
%{_datadir}/gamescope/*
%files libs
%{_libdir}/libVkLayer_FROG_gamescope_wsi_*.so
%{_datadir}/vulkan/implicit_layer.d/VkLayer_FROG_gamescope_wsi.*.json
%changelog
%autochangelog
* Thu Jan 2 2025 Owen-sz <owen@fyralabs.com>
- Package gamescope, port from Bazzite
+2439
View File
File diff suppressed because it is too large Load Diff
-65
View File
@@ -1,65 +0,0 @@
diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp
index d7498e5..d1800a8 100644
--- a/src/steamcompmgr.cpp
+++ b/src/steamcompmgr.cpp
@@ -3271,7 +3271,7 @@ found:;
if ( window_has_commits( focus ) )
out->focusWindow = focus;
else
- focus->outdatedInteractiveFocus = true;
+ out->outdatedInteractiveFocus = true;
// Always update X's idea of focus, but still dirty
// the it being outdated so we can resolve that globally later.
@@ -5995,28 +5995,37 @@ bool handle_done_commit( steamcompmgr_win_t *w, xwayland_ctx_t *ctx, uint64_t co
// Window just got a new available commit, determine if that's worth a repaint
// If this is an overlay that we're presenting, repaint
- if ( w == global_focus.overlayWindow && w->opacity != TRANSLUCENT )
+ if ( gameFocused )
{
- hasRepaintNonBasePlane = true;
- }
+ if ( w == global_focus.overlayWindow && w->opacity != TRANSLUCENT )
+ {
+ hasRepaintNonBasePlane = true;
+ }
- if ( w == global_focus.notificationWindow && w->opacity != TRANSLUCENT )
- {
- hasRepaintNonBasePlane = true;
+ if ( w == global_focus.notificationWindow && w->opacity != TRANSLUCENT )
+ {
+ hasRepaintNonBasePlane = true;
+ }
}
-
- // If this is an external overlay, repaint
- if ( w == global_focus.externalOverlayWindow && w->opacity != TRANSLUCENT )
+ if ( ctx )
{
- hasRepaintNonBasePlane = true;
+ if ( ctx->focus.outdatedInteractiveFocus )
+ {
+ MakeFocusDirty();
+ ctx->focus.outdatedInteractiveFocus = false;
+ }
}
-
- if ( w->outdatedInteractiveFocus )
+ if ( global_focus.outdatedInteractiveFocus )
{
MakeFocusDirty();
- w->outdatedInteractiveFocus = false;
- }
+ global_focus.outdatedInteractiveFocus = false;
+ // If this is an external overlay, repaint
+ if ( w == global_focus.externalOverlayWindow && w->opacity != TRANSLUCENT )
+ {
+ hasRepaintNonBasePlane = true;
+ }
+ }
// If this is the main plane, repaint
if ( w == global_focus.focusWindow && !w->isSteamStreamingClient )
{
Regular → Executable
+1 -1
View File
@@ -4,4 +4,4 @@ includedir=${prefix}/include/stb
Name: stb
Description: Single-file public domain libraries for C/C++
Version: 0.1.0
Cflags: -I${includedir}
Cflags: -I${includedir}
-3
View File
@@ -1,3 +0,0 @@
#!/bin/bash
curl -o ./1483.patch https://patch-diff.githubusercontent.com/raw/ValveSoftware/gamescope/pull/1483.patch
-1
View File
@@ -1 +0,0 @@
rpm.global("gamescope_tag", gh_tag("ValveSoftware/gamescope"));
@@ -1,39 +0,0 @@
From 35e001dc59a44227d670c667a85a6ef5472eee58 Mon Sep 17 00:00:00 2001
From: antheas <git@antheas.dev>
Date: Sat, 20 Jul 2024 01:23:19 +0300
Subject: [PATCH v2] always send ctrl+1/2 to steam's wayland session
---
src/wlserver.cpp | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/wlserver.cpp b/src/wlserver.cpp
index 1852be9..7de737d 100644
--- a/src/wlserver.cpp
+++ b/src/wlserver.cpp
@@ -369,7 +369,12 @@ static void wlserver_handle_key(struct wl_listener *listener, void *data)
keysym == XKB_KEY_XF86AudioLowerVolume ||
keysym == XKB_KEY_XF86AudioRaiseVolume ||
keysym == XKB_KEY_XF86PowerOff;
- if ( ( event->state == WL_KEYBOARD_KEY_STATE_PRESSED || event->state == WL_KEYBOARD_KEY_STATE_RELEASED ) && forbidden_key )
+
+ // Check for steam keys (ctrl + 1/2)
+ bool is_steamshortcut = (keyboard->wlr->modifiers.depressed & WLR_MODIFIER_CTRL) && (keysym == XKB_KEY_1 ||
+ keysym == XKB_KEY_2);
+
+ if ( ( event->state == WL_KEYBOARD_KEY_STATE_PRESSED || event->state == WL_KEYBOARD_KEY_STATE_RELEASED ) && (forbidden_key || is_steamshortcut) )
{
// Always send volume+/- to root server only, to avoid it reaching the game.
struct wlr_surface *old_kb_surf = wlserver.kb_focus_surface;
@@ -378,6 +383,9 @@ static void wlserver_handle_key(struct wl_listener *listener, void *data)
{
wlserver_keyboardfocus( new_kb_surf, false );
wlr_seat_set_keyboard( wlserver.wlr.seat, keyboard->wlr );
+ // Send modifiers to steam for it to work
+ if (is_steamshortcut)
+ wlr_seat_keyboard_notify_modifiers(wlserver.wlr.seat, &keyboard->wlr->modifiers);
wlr_seat_keyboard_notify_key( wlserver.wlr.seat, event->time_msec, event->keycode, event->state );
wlserver_keyboardfocus( old_kb_surf, false );
return;
--
2.45.2