mirror of
https://github.com/terrapkg/packages.git
synced 2026-07-02 00:08:27 +00:00
* 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:
Regular → Executable
+1
@@ -34,3 +34,4 @@ index 072d439..e4bb633 100644
|
||||
|
||||
--
|
||||
2.41.0
|
||||
|
||||
|
||||
@@ -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>
|
||||
@@ -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
@@ -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 '?':
|
||||
@@ -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
|
||||
|
||||
Regular → Executable
+27
-47
@@ -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
|
||||
Executable
+2439
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -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}
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
curl -o ./1483.patch https://patch-diff.githubusercontent.com/raw/ValveSoftware/gamescope/pull/1483.patch
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user