Gamescope payload 20261101.1: flip events at SurfaceFlinger latch, Xwayland finishes GPU work before presenting

Draft
UT
9d ago
+1-1

Description

Points the app at payload gamescope-gamenative-20261101.1.tzst and ships the gamenative-drm daemon that reports page flips at SurfaceFlinger's latch.

Two tearing bugs under gamescope, both measured on the Retroid Pocket 6:

  1. Cursor-showing games tear and crawl (Two Point Campus class). With the cursor on its own plane (A55) the game's buffer is scanned out directly, and the daemon reported the flip at apply time, so gamescope handed the buffer back to the game while the panel was still showing it. Fix: the daemon sends the flip event when SurfaceFlinger latches the frame (GameNative/gamenative-drm#40) and gamescope releases the framebuffers a flip replaced at the next flip (A56, GameNative/gamescope#25). Blazing Chrome at the 60 cap: 59.5 fps, no stalls.
  2. GL games tear (SteamWorld Dig 2). Xwayland assumed implicit sync and committed the window buffer while glamor's upload of the frame was still running. Fix: Xwayland finishes its GPU work before each present on gamenative-drm (GameNative/xserver#1). Same scripted motion: 0 tears in 25 s, against 23 on the shipped build.

Payload uploaded 2026-11-01 to https://downloads.gamenative.app/gamescope-gamenative-20261101.1.tzst, re-downloaded and verified: sha256 d4e674a5af358a0baae95a24be74154c240892cfbc03a90203918f31400d4997, 14292391 bytes. It is the shipped 20261031.3 with two members replaced (1014 members):

memberfrom
bin/gamescopeGameNative/gamescope a56-release-one-flip-later @ 68241ca (A56), CI run 41304925663, md5 6c4d06a5c6060046ec93b571f63ed399
bin/XwaylandGameNative/xserver xwayland-no-implicit-sync-gamenative @ d486914 built by the same run, md5 6d117df905d008162d75c52f9cc2d379 (links libxcvt.so like the shipped one)
app filefrom
jniLibs/arm64-v8a/libgamenative_drm.soGameNative/gamenative-drm scanout-flip-at-latch @ 6aded49, md5 e90fbdff817cc8307ceabd402118e23d

Not changed: the shim (lib/libadrenotools_gamescope.so), the FPS limiter, the cursor plane.

Recording

None attached; recordings and tear analysis under the RP6 test logs (swd2-tearing-20261101).

Type of Change

  • Bug fix
  • Performance / stability improvement
  • Compatibility improvements
  • Other (requires prior approval)

Checklist

  • If I have access to #code-changes, I have discussed this change there and it has been green-lighted. If I do not have access, I have still provided clear context in this PR. If I skip both, I accept that this change may face delays in review, may not be reviewed at all, or may be closed.
  • This change aligns with the current project scope (core functionality, stability, or performance). If not, it has been explicitly approved beforehand.
  • I have attached a recording of the change.
  • I have read and agree to the contribution guidelines in CONTRIBUTING.md.

Summary by cubic

Points the app at gamescope payload 20261101.1 to fix two tearing bugs on the Retroid Pocket 6. The gamenative-drm daemon now sends the page-flip event when SurfaceFlinger latches the frame instead of at apply time, so gamescope releases replaced framebuffers one flip later; Xwayland finishes its GPU work before each present instead of assuming implicit sync.

Verification

  • Payload is the shipped 20261031.3 with only gamescope, Xwayland, and libgamenative_drm.so replaced; verified by sha256 d4e674a5af358a0baae95a24be74154c240892cfbc03a90203918f31400d4997.
  • At a 60 fps cap: Blazing Chrome runs at 59.5 fps with no stalls; SteamWorld Dig 2 shows 0 tears in 25 s vs 23 on the shipped build.
  • No recording attached; tear analysis is under the RP6 test logs (swd2-tearing-20261101).

Summary by CodeRabbit

  • Chores
    • Updated the Gamescope version to 20261101.1.