mirror of
https://github.com/thejerf/baijiSteamVR.git
synced 2026-10-25 12:03:04 +01:00
StereoScreen previously submitted and released each Vulkan eye separately while its image writes could still be in flight. On native Steam Frame this produced conspicuous doubled/stale-image hiccups and apparent backward jumps, even though API-side frame identities remained ordered. A capture covering 16,699 XFB copies found no gameplay source regression, GPU-submit reversal, XR display-time reversal, or eye-ID mismatch. SteamVR motion smoothing was already forced off. For Baiji StereoScreen, defer eye releases until both blits are recorded, submit their GPU work together, wait once for completion, release both images under the graphics-queue lock, then publish the quad layers. Keep this wait even with timeline semaphores enabled: submitted writes alone were insufficient for correct image delivery on Frame. The wait trades some CPU/GPU overlap for a completed stereo pair. Also exclude xrEndFrame from the video blit/completion/release/publish transaction with a handoff mutex. The previous atomic flag had a check-to-submit race. Take the handoff lock before publish/queue locks, and never hold the graphics-queue lock during the completion wait. PresentBackbuffer already advances frame resources; the stereo submit must not advance them again. CPU-side handoff locking alone did not cure the artifact. Headset tests with the completed-pair handoff in Super Mario Galaxy 2 at 2x/120 Hz confirmed that remaining misses look like ordinary dropped frames, rather than doubled images or huge hiccups. The clean Frame SDK build and launcher CLI smoke check passed. Remove the temporary timing/order capture code and retain the findings and lock-order guidance in AGENTS.md.