submit_wait = 1 (default) keeps TransferSurface(surface, TRUE): the CPU
waits for the GPU to finish the frame before IVRCompositor::Submit.
submit_wait = 0 passes FALSE: the TRANSFER_SRC_OPTIMAL transition is still
a barrier in DXVK's command list, and submit_openvr's LockSubmissionQueue
(Flush + SynchronizeCsThread + lockSubmission, which drains DXVK's submit
queue into vkQueueSubmit) runs before Submit, so the compositor's copy is
queued behind the frame on the same VkQueue and the next frame's writes
behind the copy. This is DXVK's own D3D11 interop pattern for OpenVR.
OpenXR is unchanged (its mirror already exists as xr_copy_wait).
Startup log: "submit: GPU wait before Submit on/off (submit_wait=N)".
Menu A/B (singlepass, OpenVR, 2 runs each): 43-45 fps / submit 4.2-4.5 ms
with 1, 67-70 fps / submit 0.4-0.5 ms with 0; no errors, no crashes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- stereo_single_begin: one vr_substitute_c0_stereo call in one
PerfDrawMath bracket; both substituted flags from its result (on
failure neither output is written and the carry-over fills both).
- Two-pass: pass 0 makes both eyes' c0 with vr_substitute_c0_stereo and
pass 1 uploads the kept right eye (M4-M: nothing between the passes
changes the inputs).
- Both gated on vr_stereo_shared_math(): [vr] stereo_shared_math = 0
restores the legacy per-eye calls exactly.
- config: [vr] stereo_shared_math (default 1) and [vr] vr_capture_c0
(default 0, debug, writes c0_capture.bin), with ini comments and
migration defaults; vr_session.cpp read_shared_math_settings now reads
them from config().
Built with toolchain/build.sh (mingw, proxy): ok.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
[vr] stereo_mode = twopass|singlepass (default twopass until M5 sign-off)
and [vr] stereo_stats = 0|1, with ini comments and migration defaults.
The vr_runtime comment notes that the Steam Frame uses openvr.
Agreed with lane M3-K (hotkey/panel), declared in src/vr/stereo.h:
void stereo_set_single_pass(bool on);
bool stereo_single_pass_active();
Stubbed here; the single-pass path follows.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- OpenXR by default (openxr_loader.dll, Khronos 1.1.63), falling back to
OpenVR / SteamVR; [vr] vr_runtime = auto|openxr|openvr. OpenXR grip poses
converted to the OpenVR grip so the hands sit the same under both.
- Settings panel in the headset (both sticks held, or the Touch menu
button), worked with a main-hand pointer; TR7-Menu-Hook's options built
in when it is installed.
- God mode pick-up, carry and throw; third-person chest and rear physics;
body push.
- Smooth view transitions; picture brightness and contrast; 4:3 movies;
version and runtime on the main menu.
- Palm sliders: third "side" slider, per-preset scale/zoom/side, notches
at the defaults, index-fingertip grab from Lara's drawn finger.
- Per-model caching of the body measurements (stutter with some player
model mods).
- Docs, release notes and notices for 1.1.0.
Switch view any time: with immersive controls on, long-press the right stick (or press \) in gameplay to swap between first and third person. Set third_person_mode = all to cycle classic → shoulder → board → first person instead.
Hand Calibration (Pause → VR Settings → Hand Calibration): Lara holds her hands out with guns drawn, wire boxes show your real controllers, and you squeeze each grip to lock your hands in. Fixes hands not lining up with your controllers (common on Quest).
PDA is now on the right stick double-click, and tutorial prompts show it.
One crosshair everywhere: the game's flat lock-on rings are replaced by the VR crosshair. First person aims straight from your controller; third person puts it on the game's auto-target.
One-hand catches: a clear yellow GRIP pill fixed in your view (higher for swing bars), and about 6 seconds to grab instead of 1.5 (catch_extra_time). auto_secure_catch now takes off, bars or all.
Quest and other headsets with an uneven vertical field of view: fixed the world warping with head movement.
Ledge pull-ups in first person always use the quick animation.
The shoulder camera now turns like classic (follows camera_auto_center).
The pause menu's Display page is now VR Settings; holster setup has more reliable menu entries and on-screen messages when it can't start.
Pausing no longer leaves your pistols floating beside your hands.
Fixed a black slab that could appear in front of you in third person.
Holster setup is cancelled with the menu button (left stick click).