android: A33 lifts the startup blind on the first commit newer than the override's binding (GL guests with a dormant Vulkan swapchain)
Symptom
Tomb Raider I-III Remastered (OpenGL) under gamescope on the RP6: audio plays, the panel stays black for the whole session, HUD FPS 0.0, while the game draws (verified with WINEDEBUG=+opengl: ~200 swaps/s) and Xwayland receives its frames over MIT-SHM. (Reached only once the guest libGL fix GameNative/mesa#58 is in place; before it the game crashed at window map.)
The blind's one-shot log says it all: session-blank: blank=1 reaper=0 window=present override_bound=1 saw_game_window=1 right after the window maps, never followed by blank=0. Dave the Diver (DXVK) on the same device logs blank=1 then blank=0 143 ms later; SteamWorld Dig 2 (GL, no Vulkan) never binds an override and is never blanked.
Cause
A33 judges "is the game's content on screen" by the surface of the window's newest done commit: a commit from the window's own surface was taken to be wine's desktop. A GL guest hands its frames to Xwayland (the xlib libGL's XShmPutImage), so they arrive on the window's own surface, and this game also loads dxgi/d3d11, so the WSI shim binds an override surface for a swapchain that never presents. Judged by surface, every frame looks like the desktop.
Change
A33 is corrected in place (the A28 precedent), not re-issued as a new patch. What tells the desktop from content is time, not surface: the window's newest done commit id is stamped when the override is first seen bound, and the startup blind holds until a done commit newer than that arrives, from either surface. The exit case (override gone after having been bound) and the reaper blank are unchanged. The blind's log line now also states bound_commit and last_done_commit.
Expected: DXVK guests keep the startup blank until their first presented frame (their desktop commit precedes the swapchain). GL guests with a dormant Vulkan swapchain unblank on their first XShmPutImage frame.
android/README.md gains a section on the guest libGL beside glamor's Mesa: what it is, that it is the same file on both display servers, where it comes from and how it is built. That is where the stack is documented, so the note lives here and not on the Mesa branch.
Testing
- RP6 (payload 20261104.1 + this gamescope + mesa#58 libGL): Tomb Raider I-III, Dave the Diver (DXVK, startup transition), SteamWorld Dig 2 (GL, no override): pending, results to follow here.