Skip to content

Port Retro Rewind install, adaptive resolution and a scene-load crash fix from VR-PLUS - #6

Merged
mitch030504 merged 4 commits into
openxr-workfrom
claude/project-thread-asqg38
Oct 5, 2026
Merged

mitch030504 merged 4 commits into
openxr-workfrom
claude/project-thread-asqg38

Conversation

@mitch030504

Copy link
Copy Markdown
Owner

Requested by Mitch · project thread

Before: the Steam Frame install script could only build the base game. The headset's eye resolution was fixed at render_scale and could not drop when frames fell behind. A scene load could abort the game while building a shader for a draw that had no position data.

After: steam-frame-install.sh --retro-rewind downloads, keeps up to date, builds and installs Retro Rewind beside the base game. A new, experimental [vr] adaptive_resolution setting (off by default) lowers the race's eye resolution to as little as 70% while new frames fall behind 60 FPS, then raises it again. The scene-load abort is fixed.

All three come from heurazy/Wiicompiled_VR-PLUS, adapted to this fork.

How

  • Scene-load crash (from VR-PLUS c2b2500): Nintendo's GXClearVtxDesc, and Aurora's own version (GXGeometry.cpp:222), leave the position descriptor set to direct. The HLE mirror in gx_vertex.cpp cleared it instead. It now matches them, and the shader generator uses a zero position if a stream still arrives without one.
  • Retro Rewind: the script follows the steps of the Quest app's RetroRewindPack.kt.
    • It downloads the full pack once, then applies each published update followed by that update's deletions, and writes version.txt last.
    • Deletions only touch paths inside RetroRewind6/. Paths that climb out with .. are refused.
    • It fetches the Retro-WFC payload on every build and keeps the previous one if rwfc.net doesn't answer.
    • It builds both games with --profile both, copies the pack to the Frame only when its version changed, sets [paths] retro_rewind_root, and adds RetroRewind to the Steam library.
    • --retro-rewind-pack DIR uses a folder you already have instead of downloading.
  • Adaptive resolution: runtime/include/vr/adaptive_resolution.h decides the scale once a second. A second below 85% of the target lowers the scale by 0.1, and three seconds in a row at the target raise it again. It only measures during races.
    • The eyes render into the top-left corner of the existing swapchain image, and the projection layer's imageRect shows only that corner. The compositor does the upscaling and no swapchain is recreated.
    • The Linux same-device bridge (vulkan_win32_interop.cpp) now copies an eye that is smaller than its target. The Quest bridge and layer already supported this.
    • Windows (D3D12) copies whole eyes, so the setting isn't offered there.
  • Not ported: VR-PLUS's fix for the headset going black during race transitions. In this fork, a dropped packet is cancelled after 50 ms (TryCancelPendingPacket), so the 10-second stall it fixes does not happen here.

Testing

  • vr_adaptive_resolution_tests (new) and vr_config_tests pass.
  • openxr_integration.cpp, openxr_vulkan_win32.cpp and settings_overlay.cpp pass a clang -fsyntax-only check for Linux.
  • The Retro Rewind download and update logic ran against a local stand-in for the server. It installed the full pack, applied two updates and their deletions, refused a .. path, and did nothing on a second run.
  • shellcheck reports no warnings on the install script.
  • Not tested: a full build, anything on the headset, or the real rwfc.net server, which the build sandbox can't reach.
    • VR-PLUS says that server rejects clients without Wheel Wizard's user agent. Like the Quest app, the script sends none, so the first --retro-rewind run will show whether that matters.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Sabhzu6VgoWcHtpSk4C9KZ


Generated by Claude Code

claude added 3 commits October 5, 2026 12:27
Nintendo's GXClearVtxDesc, and Aurora's, keep GX_VA_POS at GX_DIRECT. The
HLE mirror cleared it to GX_NONE, so the next draw could publish no
position attribute and abort shader generation while a scene loads.
Keep the mirror in step, and give the shader a zero position if a
stream still arrives without one.

Ported from heurazy/Wiicompiled_VR-PLUS (c2b2500).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sabhzu6VgoWcHtpSk4C9KZ
The Steam Frame install script built only the base game. With
--retro-rewind it now fetches the Retro Rewind pack from Retro Rewind's
update server, as the Quest app and Wheel Wizard do: the full download
once, then each published update and its deletions. It also fetches the
Retro-WFC payload online play needs, builds both products from one
translation, copies the pack beside the disc on the Frame, sets
[paths] retro_rewind_root and adds RetroRewind to the Steam library.
--retro-rewind-pack uses a RetroRewind6 folder the player already has.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sabhzu6VgoWcHtpSk4C9KZ
[vr] adaptive_resolution (off by default, in the VR tab) lowers the
race's eye resolution by 10% steps, down to 70%, while new eye frames
fall below 85% of the game's 60 FPS, and raises it again after three
seconds on time. Adapted from heurazy/Wiicompiled_VR-PLUS.

The eyes render into the top-left corner of the full swapchain image
and the projection layer shows only that corner, so the compositor
upscales them and no swapchain is recreated, unlike render_scale. The
Linux same-device bridge now copies an eye smaller than its target;
the Quest's bridge and layer already did. The PC's D3D12 path copies
whole eyes, so the setting is not offered on Windows.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sabhzu6VgoWcHtpSk4C9KZ
@mitch030504 mitch030504 self-assigned this Oct 5, 2026
@mitch030504
mitch030504 marked this pull request as ready for review October 5, 2026 12:45
@mitch030504
mitch030504 merged commit a532ffa into openxr-work Oct 5, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants