45462 Commits
Author SHA1 Message Date
Jeremy Bowers 70d096f8d7 Fix issue with intermittent slowdown.
An error in the way frames were submitted to XR resulted in intermittent
slowdown that fooled me for a while as being shader compilation stutter,
and had me down the wrong track of investigating that.

However this was actually the root cause. This should bring Baiji up to
performance parity with the current Dolphin release, as near as I can tell.

Resolves Issue #13.
2026-10-16 01:00:07 -04:00
Jeremy Bowers 38fc6d9a95 Remove the arrow in the help dialogs.
The previous fix to fit them in their dialog box often unseated
the arrow from the widget it is trying to point at. With the user
so actively interacting with the widgets to get the help,
including having to hold the pointer steady to keep it where they
can read it (arguably a problem of its own), I don't think we need
to quite that aggressively point at the target widget.
2026-10-16 00:56:49 -04:00
Jeremy Bowers 3d27e75026 Update Readme with Gamecube emulation notes
Added remarks about Gamecube games performance on Steam Frame and emulation challenges.
2026-10-14 10:04:29 -04:00
Jeremy Bowers f395e45ddf Move the wish list of PRs into Issues. 2026-10-12 21:56:32 -04:00
Jeremy Bowers 14effdb34e Fix the tooltips so they don't exceed the dialog's boundaries.
Steam OS intepreted that as a resize of the window and recentered it.
This caused a lot of displeasing UI churn.

This still leaves the little chevrons pointed at the wrong places
sometimes but it is still a much better user experience.
2026-10-12 19:49:33 -04:00
Jeremy Bowers 8b4a0723fc Tone down my stridency about issues, and rewrite the contribution guide Github links to. 2026-10-12 19:16:59 -04:00
Jeremy Bowers 982671b53f Move default + and - button mappings. 2026-10-12 14:56:55 -04:00
Jeremy Bowers 38cf5cf933 Make the best fix for Room View in S3D we can, given what the OS gives us. 2026-10-11 22:16:20 -04:00
Jeremy Bowers 24634ba1bd Fix the flat backend's way of requesting a surface to draw on. 2026-10-11 12:20:31 -04:00
Jeremy Bowers 0775c13109 Some Readme.md updates. 2026-10-11 11:53:04 -04:00
Jeremy Bowers 6b197206e8 Enhance Readme with UI and VR emulation suggestions
Added suggestions for improving the UI and VR emulation experience.
2026-10-09 14:31:10 -04:00
Jeremy Bowers 89dc31c6e8 Update Readme.md 2026-10-09 09:35:59 -04:00
Jeremy Bowers 46a987148d Update the Readme.md for release. 2026-10-06 09:13:02 -04:00
Jeremy Bowers 0cef1d3651 Add a note acknowledging the QT GUI has this issue too. 2026-10-05 22:37:42 -04:00
Jeremy Bowers dbb7283447 Installation instructions. 2026-10-05 22:27:59 -04:00
Jeremy Bowers 52ffacb887 Update about shortcut mappings. baiji-v0.1-alpha 2026-10-05 22:18:30 -04:00
Jeremy Bowers ac2b377e23 Remove some spurious mappings. 2026-10-05 21:48:18 -04:00
Jeremy Bowers 20c13cc035 Update about the immersive VR. 2026-10-05 21:04:01 -04:00
Jeremy Bowers 57f026c120 Put the proper executable into Gamescope/Big Picture. 2026-10-05 21:00:05 -04:00
Jeremy Bowers 122721b259 Fix odd formatting on the compile instructions. 2026-10-05 20:54:54 -04:00
Jeremy Bowers 23b616ebf8 Note about the immersive VR not working well. 2026-10-05 20:47:38 -04:00
Jeremy Bowers 652ee1ef1b Compile a release build instead of a debug build. 2026-10-05 20:41:10 -04:00
Jeremy Bowers f55ab9b06e Install the flatpak-based SDK if needed. You're up, Ubuntu. 2026-10-05 20:11:38 -04:00
Jeremy Bowers ce1c7928a7 OK, builds on Ubuntu, let's try on SteamOS again. 2026-10-05 19:44:51 -04:00
Jeremy Bowers c4eb076a49 Further attempts to build this elsewhere. 2026-10-05 18:13:10 -04:00
Jeremy Bowers 6712e7cdbf Try to update build scripts to work on something other than the original system. 2026-10-05 18:07:59 -04:00
Jeremy Bowers 3a5060500c Make a note that I don't care to own this. 2026-10-05 17:47:38 -04:00
Jeremy Bowers fbeefedb2a Updates to the Readme.md and compiling scripts. 2026-10-05 17:06:08 -04:00
Jeremy Bowers 97f1160707 Initial Readme.md. 2026-10-05 16:25:04 -04:00
Jeremy Bowers c652e2d702 Frame: remind users to release laser pointer focus
In flat Vulkan mode, Steam Frame controller buttons can appear not to
reach the game while the system's laser-pointer mode still owns focus.
This is an easy mistake to make when starting a game from the headset.

After a successful boot, show an informational dialog for explicit Flat
Display (Vulkan) mode and for legacy configurations with OpenXR disabled.
The check happens after boot metadata and per-game VR settings are loaded,
so immersive VR and Stereo 3D Screen launches are not interrupted.

Add the requested reminder text and a Never See This Dialog Again
checkbox. Persist the opt-out in Main.Interface, and leave it unchecked by
default so the reminder appears for new users.
2026-10-05 00:33:01 -04:00
Jeremy Bowers 18e1811dec Build: carry OpenXR loader workaround as a patch
Keep Externals/OpenXR pinned to Khronos' upstream 1.1.63 commit
instead of carrying local source edits as an unreachable submodule commit.
Record the three Frame loader compatibility changes in the parent tree as
OpenXR-Loader-Exceptions.patch.

When ENABLE_VR is configured, copy the pinned SDK into the binary tree,
apply the patch to that copy, and build the loader from there. This leaves
the checked-out submodule clean and supports read-only source mounts in
container builds. CMake verifies the patch applies to the expected SDK
files before adding the patched copy to the build.
2026-10-05 00:32:47 -04:00
Jeremy Bowers 9dd817d864 OpenXR: add independent stereo separation control
Immersive VR previously used the full runtime-reported left/right view
positions, with Units per Meter scaling both world geometry and the
per-eye offsets. That left no direct way to soften strong near-field
pop-out without also changing the apparent world scale.

Add Graphics.VR.StereoSeparation as a 0-200 percent setting, defaulting
to 100 percent. Scale each eye's positional offset around the average
eye center independently of shared head translation. At 100 percent the
projection is unchanged, 0 percent brings the virtual view positions
together toward mono, and values above 100 percent amplify stereo depth.
Units per Meter continues to set world scale and head-motion mapping.

Expose the setting in the global VR pane and per-game VR configuration,
include it in game VR override application/reset, and refresh cached
projection rows when it changes. Help text explains the scale/depth
tradeoff, possible near-field comfort benefit, and that Stereo 3D Screen
continues to use the existing Stereoscopic Depth control.
2026-10-05 00:21:28 -04:00
Jeremy Bowers 8a150c187e Checkpoint - add some files that have fallen through the cracks. 2026-10-04 23:46:15 -04:00
Jeremy Bowers 75d1994b9c Checkpoint with some stuff that needs to be committed. 2026-10-04 23:17:49 -04:00
Jeremy Bowers 6c95b40453 Steam Frame: complete stereo eye writes before XR release
StereoScreen previously submitted and released each Vulkan eye separately
while its image writes could still be in flight. On native Steam Frame
this produced conspicuous doubled/stale-image hiccups and apparent
backward jumps, even though API-side frame identities remained ordered.
A capture covering 16,699 XFB copies found no gameplay source regression,
GPU-submit reversal, XR display-time reversal, or eye-ID mismatch.
SteamVR motion smoothing was already forced off.

For Baiji StereoScreen, defer eye releases until both blits are recorded,
submit their GPU work together, wait once for completion, release both
images under the graphics-queue lock, then publish the quad layers.
Keep this wait even with timeline semaphores enabled: submitted writes
alone were insufficient for correct image delivery on Frame. The wait
trades some CPU/GPU overlap for a completed stereo pair.

Also exclude xrEndFrame from the video blit/completion/release/publish
transaction with a handoff mutex. The previous atomic flag had a
check-to-submit race. Take the handoff lock before publish/queue locks,
and never hold the graphics-queue lock during the completion wait.
PresentBackbuffer already advances frame resources; the stereo submit
must not advance them again.

CPU-side handoff locking alone did not cure the artifact. Headset tests
with the completed-pair handoff in Super Mario Galaxy 2 at 2x/120 Hz
confirmed that remaining misses look like ordinary dropped frames,
rather than doubled images or huge hiccups. The clean Frame SDK build
and launcher CLI smoke check passed. Remove the temporary timing/order
capture code and retain the findings and lock-order guidance in AGENTS.md.
2026-10-04 23:10:20 -04:00
Jeremy Bowers 4465c932fb Steam Frame: decouple XR heartbeat from game timing 2026-10-04 20:54:26 -04:00
Jeremy Bowers 22f6884ca0 Checkpoint. This has a number of things including defaulting eager_heartbeat to true. 2026-10-04 14:41:52 -04:00
Jeremy Bowers ef1a3a0500 OpenXR: synchronize flat-screen reanchor cache 2026-10-04 14:38:56 -04:00
Jeremy Bowers 8c549d2036 DolphinQt: hide raw motion mappings for Frame 2026-10-03 23:16:44 -04:00
Jeremy Bowers 7df6a30691 DolphinQt: defer Frame mappings until controller loads 2026-10-03 23:03:54 -04:00
Jeremy Bowers 5fa8d90d8b Steam Frame: use dropdown controller mappings and defaults 2026-10-03 22:58:52 -04:00
Jeremy Bowers d3bdaab03a DolphinQt: remove VR mapping configure button 2026-10-03 22:36:43 -04:00
Jeremy Bowers ce93e0606d DolphinQt: pin controller mapping to Steam Frame 2026-10-03 22:26:21 -04:00
Jeremy Bowers 834cdddd2e OpenXR: add Steam Frame controller input 2026-10-03 22:21:35 -04:00
Jeremy Bowers bec9d1beae OpenXR: keep controller input in Flat Vulkan mode 2026-10-03 21:00:54 -04:00
Jeremy Bowers 3ec01541fd OpenXR: add configurable presentation modes 2026-10-03 20:06:38 -04:00
Jeremy Bowers 0e74b57e09 OpenXR: remove temporary recenter/aim debug logging
Diagnosis confirmed: the runtime rebases the reference space on system
recenter (logged head_yaw matched the user's per-run offset exactly), and
controllers share the HMD's tracking frame. Keep only the low-volume
reference-space-change and recenter log lines.
2026-10-03 13:51:35 -04:00
Jeremy Bowers 2e826d8914 OpenXR: re-anchor flat screen on reference space change
The runtime rebases the reference space on system recenter, universe
switches, and relocalization, and notifies apps via
XrEventDataReferenceSpaceChangePending. Dolphin only logged the event, so
the world-locked flat-screen quad kept its stale coordinates and appeared
to jump by the rebase yaw every time the user used the system recenter
(the HMD's yaw in the runtime's arbitrary local frame — random per run).

On the event, invalidate the cached flat-screen pose so the panel is
re-placed in front of the user's current gaze, which is also the expected
behavior after a system recenter. Log the event's poseInPreviousSpace yaw
delta, and add a throttled view-yaw vs aim-yaw diagnostic to check whether
the runtime reports controllers in a different tracking frame.
2026-10-03 13:20:18 -04:00
Jeremy Bowers 1190e903be OpenXR: add minimal recenter/screen-pose debug logging
Log head yaw, screen yaw, and screen direction at initial flat-screen
placement and after recenter, to diagnose the underlying offset issue.
2026-10-03 12:44:50 -04:00
Jeremy Bowers a02a554c86 OpenXR: revert recenter changes to pre-d9ed82e state
Remove the reference-space recreation recenter, ScreenYawOffset config, and
debug logging. Restore the original home-position recenter and world-locked
flat screen placement so we can diagnose the underlying issue from a clean
baseline.
2026-10-03 12:41:08 -04:00