gamescope: payload 20261102.4, shim from gamenative-drm master

Merged
UT
8d ago
+1-1

Description

This ships the gamescope shim built from gamenative-drm master now that GameNative/gamenative-drm#44 is merged, as payload 20261102.4. App master runs payload 20261102.3, whose shim was built from #44's branch head (5831f1e) before the merge.

drm master (2bfe8b3) has one change beyond #44:

  • GameNative/gamenative-drm#45 (d3c4bdf, Joshua Tam), "icd_shim: the X11 wrapper's feature lift, served by the shim". It touches only the shim and docs (icd_shim/src/advertise.rs (new), lib.rs, placed.rs, proxy.rs, docs/04-gamenative-app.md).
    • The shim now reports the same ten core VkPhysicalDeviceFeatures bits that the X11 path's libvulkan_wrapper.so lifts.
    • At vkCreateDevice it masks them back to what the driver actually answers. textureCompressionBC is not lifted.
    • On a driver that reports its own capabilities this is a no-op.
    • It needs no gamescope, Xwayland or daemon change.

What changes in this PR

  • GamescopePayload.VERSION = 20261102.4.
  • jniLibs/arm64-v8a/libgamenative_drm.so does not change. Built from drm master, the daemon is 9d3619681d9d5e382f78f2953c98ba1eff645334df8b7af8e88bc166ea774828, byte-identical to the one already on master (5144ef9c… in the APK after stripping), because the daemon sources are unchanged since #44's head.

Build (NDK 27.3, rustc 1.98.1, daemon and shim in one cargo invocation, SOURCE_DATE_EPOCH = head commit time)

  • Test gate passes in rust:1-bookworm: gndrm-daemon 99 unit + 36 golden + 8 diag, gndrm-android, gndrm-uapi 19 + 2 ABI.
  • Shim: cargo test -p adrenotools_gamescope --lib, 75 passed.
  • cargo clippy --target aarch64-linux-android -p adrenotools_gamescope -p gndrm-android -p gndrm-daemon --all-targets -- -D warnings is clean.
  • tools/check-exports.sh passes.

Payload 20261102.4

gamescope-gamenative-20261102.4.tzst, 14303755 B, sha256 b3b30389f635effb5909e71f09f1dd5e43e030df3b19fed729fdda69b2929ad9. It is uploaded and verified on both CDN hosts, including the members from the served copy. It is 20261101.6 with only the shim replaced; every other member is byte-identical. 20261102.3 stays on the CDN.

membersha256from
lib/libadrenotools_gamescope.so814601e954cf0a1e61b5632264dc6608af4e38fac5236301bc6aca5892787698gamenative-drm master 2bfe8b3, build string 2026110210062bfe8b3
bin/gamescope (unchanged)65d024fcee6af1b1f81b2281cc5223ee07615daa05aa8d9ecebe865526f8df69as in 20261101.6
bin/Xwayland (unchanged)4dded8566661423ee3c91490523d96240c85906bd00e0774adc912df9dd38698as in 20261101.6

Device

The re-anchoring runs (Retroid Pocket 6, Odin 3) will be added to this PR when they are done.

Test steps

  1. Install the APK and open a game with the display server set to gamescope. On first launch payload 20261102.4 downloads. In logcat, expect Gamescope payload 20261102.4 ready, and gn-vkshim: ICD loaded [shim 202611021006 2bfe8b3] in the game process.
  2. Set the FPS limit to 60 on a 60 Hz panel.
    • Every 10 s: gn-vkshim: present mode: declared=fifo … cap=60 … feedback=on … discarded=0 fallback=0.
    • gndrm-daemon: vsync: check … late=0.
  3. A DXVK game at a D3D11 feature level that needs the lifted bits (for example multiViewport) creates its device. On a driver that already reports them, nothing changes, and no mask line is printed.
  4. Regression check: Dave the Diver with in-game VSync on still holds about 60 at cap 60.

Device re-anchor (RP6, this APK + payload 20261102.4 via the CDN)

gamepathSF fps / panelintervalsshimdaemon
Dave the Diver, in-game VSync on, cap 60, 60 Hzgamescope DXVK59.980 / 59.9803597 single, no gaps3600 commits, 3600 presented, 0 discarded, 0 fallback4200/4200, late 0
SteamWorld Dig 2, cap 60, 60 Hzgamescope GL59.862 / 59.9953583 single, 8 doublen/a3593/3600, late 6

Payload re-downloaded on the first launch (.payload.version 20261102.4; members gamescope 65d024fc, Xwayland 4dded856, shim 814601e9; ICD loaded [shim 202611021006 2bfe8b3]). Screenshots unchanged against the .3 build; no new shim/daemon/gamescope log patterns; 0 panics.

Recording

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

Bumps the gamescope payload to 20261102.4, replacing the shim built from the gamenative-drm #44 branch head with one built from master once #44 merged. The shim now reports the same ten core Vulkan physical device features that the X11 wrapper lifts, masking them back to the driver's real answers at vkCreateDevice; drivers that report their own capabilities see no change. The daemon is byte-identical to the one already on master, so only the shim member changes in the payload.

Summary by CodeRabbit

  • Updates
    • Updated the Gamescope payload version. The app now recognizes installations as ready when their version stamp matches the current payload; installations with an older stamp are not considered current.