fix(ally): Fix VRR stutter

This commit is contained in:
Kyle Gospodnetich 2024-08-06 17:23:38 -07:00
parent 51e06890df
commit 8c6379dccf
2 changed files with 68 additions and 1 deletions

View File

@ -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

View File

@ -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 )
{