OFXR Bridge v0.2.6 (V334)
An unofficial build on
tig3rmast3r's v0.2.1.
A follow-up to 0.2.5.
What's new
- A rewritten pipeline for D3D11 games: the D3D11 bridge. Every D3D11
game now runs on the same path as a native D3D12 game. The bridge gives the
OpenXR runtime a D3D12 session on the bridge's own device and the game
renders straight into textures shared with it, so the runtime never touches
the game's D3D11 device again. That removes the NVIDIA D3D11 driver crash
that froze DCS World and SkyrimVR, gives D3D11 games the SteamVR pacing that
D3D12 games already had, and saves one GPU copy per generated frame. On by
default. Tested with DCS World, Assetto Corsa, SkyrimVR and Cyberpunk 2077,
on SteamVR and Virtual Desktop. - DCS World is supported. It froze before the menu, or a few seconds into
a mission (this fork's issues #2 and #3). Both are fixed: the bridge now
follows DCS's frame loop, which waits for the next frame on a second thread
while the current one is still being rendered, and the driver crash at
mission start is gone with the new D3D11 path above. Runs on SteamVR and
Virtual Desktop. - Eye tracking works with Cheeky Foveated DLSS. With the bridge armed,
Cheeky reported "Eye tracking unavailable or awaiting mapping" and fell
back to a fixed sharp region, on every runtime (Cheeky's issue #37).
Cheeky asks the layer beneath it whether the headset
offers eye tracking before the OpenXR instance exists, and the bridge
answered "no". It now answers correctly, and gaze drives the foveation
with the bridge armed exactly as without it.
The D3D11 bridge
Nothing to set up. A D3D11 game gets the bridge automatically when the
runtime offers D3D12, which SteamVR, Virtual Desktop and PimaxXR all do; a
runtime without D3D12 keeps the previous path.
What changed underneath. Until now, a D3D11 game and the OpenXR runtime
shared the game's D3D11 device, and the bridge moved every frame across into
its own D3D12 device for optical flow and moved the results back. NVIDIA's
D3D11 driver could crash when the bridge's presenter thread drove the
runtime's work on that shared device, which is what killed DCS World and
SkyrimVR at mission start. Now the runtime's session lives on the bridge's
D3D12 device from the start. The game still renders in D3D11, into textures
the bridge shares between the two devices, and everything after that,
generation, pacing and submission, is the D3D12 path that UEVR games already
use. Depth, multisampled and mipmapped swapchains are carried across by copy
or resolve where the two APIs cannot share them directly.
Turning it off, for diagnosis only: close the tray, set d3d11_bridge=0
under [tray] in %LOCALAPPDATA%\OFXR Bridge\tray.ini, and start the tray
again. There is no menu entry, and editing the ofxr_bridge.ini beside the
tray does nothing, because the tray rewrites the layer's settings from
tray.ini every time it arms.
Other changes
- NVIDIA Medium is the default backend, with a silent fallback to
FidelityFX on GPUs where NVIDIA optical flow cannot start (AMD, Intel, and
NVIDIA cards without the hardware). This closes 0.2.5's known issue where
selecting NVIDIA on such a card silently did nothing. The tray keeps
showing the selection you made; the flight log records when the fallback
ran. If you are upgrading, the tray keeps the backend you had chosen
before, so select NVIDIA Medium in the menu once if you want the new
default. - Games that run their next-frame wait on another thread, DCS's shape, no
longer deadlock against a runtime that holds that wait until the current
frame is begun, which SteamVR does.
Known issues
- Packed depth-stencil swapchains (
D24_UNORM_S8_UINT,
D32_FLOAT_S8X24_UINT) are untested on the D3D11 bridge. The common VR
depth formats,D32_FLOATandD16_UNORM, are covered. - Cheeky Foveated DLSS at high resolutions can show a flashing grid of
small white coded squares and fail to lock its eye calibration. That is
Cheeky's own calibration, not the bridge: it happens without the bridge
armed too, and Cheeky's Standard corners calibration method avoids it.
Set your resolution before launching the game; every change restarts
Cheeky's calibration. - No FPS overlay in Vulkan games. Unchanged from 0.2.5.
- SteamVR: turn off "fixed frame rate at half" and Motion Smoothing for the
game in SteamVR's per-application video settings, or SteamVR holds the
game to half rate and the bridge can only deliver half. - Dips are often a resolution ceiling, not the bridge. Disarm the bridge
and play the same scene: if the dips remain, lower the per-eye resolution. - Pick a refresh rate close to double your game's frame rate. If double
is still short of the refresh rate, the bridge fills the difference with
repeated frames and the image judders.
Installing
Unzip anywhere and run OFXRBridgeTray.exe. It arms the bridge by itself.
Keep OFXRBridgeTray.exe and the ofxr folder together; it holds the OpenXR
layer, its settings and the Vulkan layer. If an earlier version is armed,
disarm it and close its tray first.
Tested
With a Pimax Crystal Super on an RTX 5090:
- DCS World (D3D11) on SteamVR and Virtual Desktop, through the menu and
into a mission - Assetto Corsa, SkyrimVR and Cyberpunk 2077 (D3D11) on SteamVR
- Hogwarts Legacy (UEVR, D3D12) with Cheeky Foveated DLSS on SteamVR and
PimaxXR, gaze driving the foveation - Microsoft Flight Simulator 2024 and The Callisto Protocol (UEVR),
unchanged
Please report results, working or not, on this fork's
GitHub Issues, with an OFXR flight log where you can. To
record one, enable Bridge flight recorder in the tray, reproduce the
problem, then use Open bridge logs. Logs are written under
%LOCALAPPDATA%\OFXR Bridge\RuntimeLayer\v334\.