Replay each VR eye in one render pass

- Added eye_pass_plan.hpp: an eye keeps drawing in the render pass it has open across the frame's
  GX copies (only the mono render performs them), skips passes a later clear of the whole color and
  depth erases, and splits only for a clear of color alone or depth alone.
- render_stereo_eye follows that plan; the cockpit fallback is drawn inside the last pass instead of
  a render pass of its own that loaded the eye back.
- The stencil is now cleared where the eye actually starts, so a cockpit mask drawn in an erased pass
  can no longer punch holes in the HUD.
- [vr] single_pass_eyes (default on, live from F10) and debug.wiicompiled.eye_passes 0/1 on the Quest
  switch back to one render pass per recorded pass for A/B timing.
- Each new plan shape is logged once ("Eye replay plan: ...").
- Tests: EyePassPlan cases in gx_fifo_tests; stereo_multiplayer_smoke and stereo_frame_worker_smoke
  pass on D3D12.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
iChris4andClaude Opus 5.5 committed 2026-09-24 18:18:08 +02:00
1 parent 13311ea626
commit ceeeba0332
12 files changed
+527 -18

No files matched your search

+4
View File
@@ -405,6 +405,10 @@ void set_stereo_stop_at_display_copy(bool value) noexcept;
bool get_stereo_stop_at_display_copy() noexcept;
void set_stereo_skip_copy_clears(bool value) noexcept;
bool get_stereo_skip_copy_clears() noexcept;
// Replays each eye in as few render passes as its clears allow (gfx/eye_pass_plan.hpp). On by
// default and live, like the two above.
void set_stereo_single_pass_eyes(bool value) noexcept;
bool get_stereo_single_pass_eyes() noexcept;
// Places orthographic draws on a fixed virtual screen during immersive replay.
// `width` and `distance` are in game world units; the screen's height follows