From 8c6379dccf2a98e6b364f152405561cd7c6d85a0 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Tue, 6 Aug 2024 17:23:38 -0700 Subject: [PATCH] fix(ally): Fix VRR stutter --- spec_files/gamescope/gamescope.spec | 4 +- spec_files/gamescope/revert-299bc34.patch | 65 +++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 spec_files/gamescope/revert-299bc34.patch diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index bb095772cf..dd1280caf3 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -7,7 +7,7 @@ Name: gamescope Version: 100.%{gamescope_tag} -Release: 1.bazzite +Release: 2.bazzite Summary: Micro-compositor for video games on Wayland License: BSD @@ -25,6 +25,8 @@ Patch2: disable-steam-touch-click-atom.patch Patch3: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch # https://github.com/ValveSoftware/gamescope/issues/1398 Patch4: drm-Separate-BOE-and-SDC-OLED-Deck-panel-rates.patch +# https://github.com/ValveSoftware/gamescope/issues/1369 +Patch5: revert-299bc34.patch BuildRequires: meson >= 0.54.0 BuildRequires: ninja-build diff --git a/spec_files/gamescope/revert-299bc34.patch b/spec_files/gamescope/revert-299bc34.patch new file mode 100644 index 0000000000..891a001ab7 --- /dev/null +++ b/spec_files/gamescope/revert-299bc34.patch @@ -0,0 +1,65 @@ +diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp +index 4216555..48c017d 100644 +--- a/src/steamcompmgr.cpp ++++ b/src/steamcompmgr.cpp +@@ -3236,7 +3236,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. +@@ -5963,28 +5963,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 ) + {