Skip to content

Add Windows support using the existing RiftLift UI - #6

Merged
Villagers654 merged 32 commits into
mainfrom
windows-native
Oct 9, 2026
Merged

Villagers654 merged 32 commits into
mainfrom
windows-native

Conversation

@Villagers654

@Villagers654 Villagers654 commented Sep 2, 2026 •

Copy link
Copy Markdown
Owner

‎

@Villagers654 Villagers654 changed the title Add experimental native Windows host and installer Add native Windows backend using the existing RiftLift UI Sep 2, 2026
@Villagers654 Villagers654 changed the title Add native Windows backend using the existing RiftLift UI Add Windows support using the existing RiftLift UI Sep 2, 2026
# Conflicts:
#	.github/workflows/release.yml
#	docs/COMPATIBILITY.md
#	src/riftlift/auth.py
#	src/riftlift/auth_browser.py
#	src/riftlift/auth_ui.py
#	src/riftlift/cli.py
#	src/riftlift/main_window.py
Use extended-length paths for downloader output and cache without changing system policy. Cover long-file assembly, cached resume, and traversal rejection.

Validated with 50 Windows regression tests and recovery of Epic Roller Coasters from 1,413 cached segments.
Unity/Unreal titles using OVRPlugin go straight to OpenXR and reject
runtimes that do not identify as Oculus, so Epic Roller Coasters fell
back to flat mode and crashed. Ship the existing OVRPlugin OpenXR layer
in the native runtime and enable it per game process, and point the game
at SteamVR's OpenXR runtime when none is registered. No registry writes.

The installer workflow never got past CMake configure: PowerShell split
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 into two arguments. Quote it.

Drop the Windows 'Run setup' settings card; the installer owns the
native runtime.
- Name games in SteamVR: write a temporary vrmanifest per game and have
  the launcher register it before IdentifyApplication, which previously
  failed for every unregistered riftlift.app key, so SteamVR showed
  executable names like TouchNUX-Win64-Shipping.
- Dark native title bars to match the dark UI.
- Hide the Steam Games button where Steam import is unsupported instead
  of showing it permanently disabled.
- List the app as 'RiftLift' in Installed apps.
- OpenVR bridge: serialize InputManager. Games poll input, poses and
  haptics from several threads while frame submission updates action
  state, and IVRInput is not safe for concurrent use. Once controllers
  are connected this corrupted the heap in Stormland about a second
  after start (0xC0000374).
- OpenXR bridge: when a runtime rejects a swapchain, retry with one mip
  level, then with color-attachment usage. SteamVR's OpenXR runtime
  rejected First Contact's mipmapped textures and Stormland's
  transfer-only texture; the first attempt is unchanged.
- An explicit OpenXR launch can use SteamVR's OpenXR runtime when no
  other runtime is registered; automatic selection is unchanged.
- Add a test-only SteamVR driver with two simulated Touch controllers
  (runtime/tests/steamvr-touch-sim) and a helper to script its input;
  CI builds it.
- OpenXR bridge: map BGRA swapchains to RGBA when the runtime only
  offers RGBA (SteamVR rejected First Contact's B8G8R8A8 textures), and
  retry static swapchains as regular ones. Trace create flags.
- OpenVR bridge: with debug logging enabled, write up to three
  minidumps of fatal exceptions to %TEMP%. Stormland's controller-time
  crash does not reproduce under a debugger.
vrclient applies input binding updates inside PollNextEvent. With
controllers connected those updates raced action-state updates on the
render thread and corrupted vrclient's heap in Stormland (crash dump:
RtlFreeHeap inside PollNextEvent under ovr_GetSessionStatus).
@Villagers654
Villagers654 marked this pull request as ready for review October 9, 2026 05:11
@Villagers654
Villagers654 merged commit a9374f3 into main Oct 9, 2026
18 checks passed
@Villagers654
Villagers654 deleted the windows-native branch October 9, 2026 09:42
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.

1 participant