Three things kept Valve's mangoapp from drawing the overlay in a session:
- GLFW 3.4 takes XDG_SESSION_TYPE=wayland with WAYLAND_DISPLAY set as
Wayland-only, and mangoapp needs gamescope's X server; the wrapper sets
XDG_SESSION_TYPE=x11.
- On a Qualcomm display driver it opens a tracefs instance for the GPU memory
total and aborts when that fails, which it always does for an Android app.
The session preload now places the instance in an empty directory of its own
when the real one cannot be made.
- gamescope sends it each frame's timings through a System V message queue,
and Android kernels have no System V IPC. sysv.c now emulates the queue
operations gamescope and mangoapp use, beside its semaphores and shared
memory.
Lifts Bannerlator's Linux/gamescope runtime out into an app of its own: the
Wayland compositor, the proot session, the runtime installer, the fake-evdev
controller path and the PulseAudio server, with none of the Wine, container or
store machinery around them.
One activity installs the runtime from the same winlator-contents catalog and a
second one runs the session: compositor on a SurfaceView, gamescope and Valve's
native arm64 client under proot, a physical pad republished into the fake-input
rings, and the session's milestones on screen until the first frame arrives.