Commit Graph
142 Commits
Author SHA1 Message Date
lbgos 59d3eddac1 Keep exact controller head queries outside the pose mutex 2026-10-13 06:51:36 +03:00
lbgos 5c23f4b9a2 Require advancing native vsync before ending display recovery 2026-10-13 05:31:02 +03:00
lbgos dce2075d43 Recover SteamVR display sessions after Rift S reattachment 2026-10-13 05:24:49 +03:00
lbgos 37ce53bbbc Reconfirm saved bounds after tracking loss and verify drift at one hertz 2026-10-13 04:45:39 +03:00
lbgos 10e56431ce Recognize the saved room from sparse samples and skip matching off-head
Hold world confirmations across invalid SLAM samples instead of
resetting on every miss; a candidate drops only when stale (>3 s) or
from an older SLAM session. The 3-vote bar, 4 cm / 3 deg agreement and
the chained 3 s window are unchanged, so transient wrong matches still
cannot accumulate votes.

Wait up to 250 ms for the exposure's SLAM sample and accept the same
250 ms gap the display pose path tolerates, so a loaded backend does
not make recognition samples unusable while published poses stay valid.

Skip feature matching while proximity reports off-head standby, and
verify at 0.2 Hz once the room is localized; match every queued pair
while searching or recording. Attempts and diagnostics freeze visibly
while skipping.

Count the first failing usability gate per unusable attempt
(paused/sample/gap/flags/generation/guard) in diagnostics, the
per-second world log, the pending-room warning and the status file, so
the next worn session shows which condition dominates.

Triangulate at most one landmark per second-view pixel, with separate
live and reference-image sets so temporal pairs keep their own domain.
Replay: same-room recognition still confirms in ~0.5 s with tighter
votes on fewer map points; sparse valid samples confirm where the old
window reset could not.
2026-10-13 04:23:11 +03:00
lbgos e1ee4a8c2d Invalidate the retained tracker pose used by attached hand devices on loss 2026-10-13 02:22:59 +03:00
lbgos 66015ec751 Initialize online state in controller fixture constructors 2026-10-13 02:19:38 +03:00
lbgos ae84e8b785 Retry bounded EIO failures and model attached hardware in pose fixtures 2026-10-13 02:18:19 +03:00
lbgos 505aa3352a Require radio recovery after ambiguous timeouts and register queue tests 2026-10-13 02:14:54 +03:00
lbgos 720d93e12e rift_s: bound radio queue with monotonic deadline and HID backoff
Add per-command monotonic deadline (1500 ms, beyond the device 1000 ms
timeout) so a missing response fails the head instead of wedging the
queue. Bound send and poll transport errors (8 each) with 5 ms doubling
to 100 ms backoff so a persistent STALL cannot spin HID ioctls.

Retries resend only the unsent head with identical bytes; once sent the
head is polled, never resent. The response carries no command echo
(seqnum/busy only), so a late reply after a timeout can be misattributed
to the next command; last seq is retained to ignore duplicates and
callers must validate payload status/length.

Fail callbacks once via a shared helper; clear stays safe after timeouts.
HID -1/errno semantics unchanged; valid busy polls every tick.

Add fake-HID/fake-time tests for success pipelining, busy timeout
advance, send/poll/short backoff bounds, clear-once safety, stale seq,
and null HID expiry.
2026-10-13 02:13:48 +03:00
lbgos 40b6ed4944 Test USB interruption classification and tracker epoch loss 2026-10-13 02:13:48 +03:00
lbgos 32d1033475 Halve LSH lookup memory and align public key-loader rows 2026-10-13 01:48:21 +03:00
lbgos 8d6203d303 Use direct LSH bucket lookup with identical candidate ordering 2026-10-13 01:42:09 +03:00
lbgos 284e6c6998 rift_s_world: memoize exact knnMatch 4-neighbor results per bank
Cache bounded FIFO (8192/bank) exact 32-byte ORB query -> ordered
k-neighbor lists incl empties against unchanged index. Batched misses
preserve row order, queryIdx/trainIdx, tie order; same matcher params,
gates untouched. Clear on index rebuild and map replace/clear/reload.

Tests cover cached vs uncached equality for repeats, reorder, changed
bytes, ties, mixed hit/miss batches, empty/short lists, per-bank
isolation, invalidation (stale without clear, exact after), FIFO bound,
BF small and LSH map >2000.
2026-10-13 01:33:11 +03:00
lbgos af5928adbb rift_s: precompute passthrough resampling indices and weights
Bake the fixed per-pixel resampling (integer base pixel plus dx/dy and
1-dx/1-dy weights) at camera-create time instead of re-deriving it from
the float UV map on every conversion. The per-frame path keeps the live
source bounds check (integer form, exactly equivalent for validated
payloads) and per-capture stride, and preserves the original float
expression ordering so converted bytes match bit-for-bit.

Skipped in-place output reuse: get_frame hands out references that
outlive the provider, so a fresh conversion buffer per timestamp stays
required for torn-frame safety.

Adds a focused comparison test: verbatim original scalar path vs the new
path over the full 320x320x2 map on a fisheye/rolled calibration with
per-eye distortion, at tight and padded source strides, frames held
immutable.
2026-10-13 01:31:41 +03:00
lbgos e3fcd5df1c rift_s: specialize unchanged room LSH search with native Hamming popcount 2026-10-13 01:31:41 +03:00
lbgos 7371dd5300 rift_s: test haptic replacement, coalescing, expiry and retry scheduling 2026-10-13 00:58:49 +03:00
lbgos 14c9c49175 rift_s: dispatch native raw controller haptics on the radio worker 2026-10-13 00:45:39 +03:00
lbgos d4f5f9ec47 steamvr_drv: identify each drain independently of reused handles 2026-10-13 00:39:10 +03:00
lbgos 047a0e9b93 steamvr_drv: release dispatch lock across transfer-queue drain with drain ownership
recover_rings ran vkQueueWaitIdle while holding the global layer mutex,
stalling every other thread in any intercepted Vulkan call for the whole
GPU drain. Collect candidates under the lock, wait unlocked, then revalidate
before resetting the cursor.

The wait window allows destroy/recreate reusing the same buffer handle, a
concurrent recovery, or a disable (unmap, author change) to land mid-drain.
Each drain carries its ring's slot, buffer/memory identity, cursor, and reset
count plus a per-ring draining flag: a replacement (draining==false, own
slot/identity) is left alone instead of being reset or disabled, a concurrent
drain skips instead of double-resetting, and a ring disabled during the wait
is never reset. A failed wait stays a failure even if the cursor reads zero.
2026-10-13 00:38:42 +03:00
lbgos bcc353520c rift_s: exercise failed radio transfers and malformed reports 2026-10-13 00:34:49 +03:00
lbgos e86a145ee6 rift_s: cover corrupt rig landmarks and invalid observation storage 2026-10-13 00:33:01 +03:00
lbgos ace645bc95 Prepare an unbounded session origin before native SteamVR startup 2026-10-12 16:59:37 +03:00
lbgos 1545a37319 Restore validated controller bias and capture confirmed initial tilt 2026-10-12 16:56:27 +03:00
lbgos fd744f411a Pool camera matches in gravity-aware room recovery 2026-10-12 16:44:33 +03:00
lbgos 43ebc19a06 Exercise installed Basalt defaults in the complete test suite 2026-10-12 00:23:31 +03:00
lbgos 2966b3eaf1 Keep Rift S controllers uninitialized before optical acquisition 2026-10-11 22:19:46 +03:00
lbgos 855ccd6a3c Use observed VIO history for room-map camera exposures 2026-10-11 21:54:35 +03:00
lbgos 55e27157ee Sync the verified Rift S r25 runtime and tracking fixes 2026-10-11 21:45:52 +03:00
lbgos dff6cab92c Rift S: SLAM guard, Touch controller tracking, native room setup and SteamVR integration
Squashed from the working branch. Adds the Basalt patches, constrained
constellation pose solver, Rift S optics, world anchor and boundary
persistence, SteamVR camera queue and room setup guard, and tests.
2026-10-09 22:49:57 +03:00
Jakob Bornecrantz 090f9688ae xrt: Change is_form_factor_supported to return xrt_result
Make all functions on xrt_device return a xft_result_t
so that ttings like IPC errors can be surfaced.

Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2792>
2026-03-20 09:20:24 +00:00
Jakob Bornecrantz 6b8b6ff99d st/oxr: Move action code into own directory
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2752>
2026-02-18 16:09:06 +00:00
Bernhard Jung 16fb777074 c/render: Fix gfx pipeline for projection layer with multiple layers
Fix split layer_shared.frag into quad and projection to prevent misalignment issues of the UBOs in vert/frag.

Also: fix spelling: tanget -> tangent
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2744>
2026-02-12 13:35:52 +01:00
Jakob BornecrantzandKorcan Hussein 457302b507 a/glue: Add C++ wrapper for device
Co-authored-by: Korcan Hussein <korcan.hussein@collabora.com>
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2623>
2026-02-03 15:06:11 +00:00
Jakob BornecrantzandKorcan Hussein f874b12e43 u/extension_list: Refactor and rename from u_string_list
Co-authored-by: Korcan Hussein <korcan.hussein@collabora.com>
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2693>
2026-02-03 10:30:00 +00:00
Simon Zeni e356bfef18 tests: specify enum underlying type
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2714>
2026-01-29 15:35:20 +00:00
Simon Zeni 5acb185fc6 tests: use \n instead of std::endl in tests_pacing
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2714>
2026-01-29 15:35:16 +00:00
Krzysztof LesiakandKorcan Hussein a651592db1 tests: Don't use wil types in test code. It will call CloseHandle on KMT handles leading to exceptions while debugging
Co-authored-by: Korcan Hussein <korcan.hussein@collabora.com>
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2579>
2025-11-20 10:55:43 +00:00
Krzysztof LesiakandKorcan Hussein 314529d079 tests: Explicitly set is_dxgi_handle to true in test code since the d3d11 allocator gives us non-NT handles
Co-authored-by: Korcan Hussein <korcan.hussein@collabora.com>
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2579>
2025-11-20 10:23:07 +00:00
Krzysztof LesiakandKorcan Hussein a5301c6fd8 tests: Fix tests_aux_d3d_d3d11 failing in DuplicateHandle before importing
Co-authored-by: Korcan Hussein <korcan.hussein@collabora.com>
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2579>
2025-11-20 10:23:07 +00:00
Krzysztof Lesiak 85aeeeec24 tests: Port aux d3d11 import tests to d3d12
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2577>
2025-11-19 13:57:22 +00:00
Andrei Aristarkhov 6d59798fc2 cmake: Group tests together in a folder for IDEs that support it
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2619>
2025-11-10 15:29:46 +00:00
Korcan Hussein 06e62fc7d9 xrt: refactor vk queue mutex into mutex per queue
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2594>
2025-10-06 15:11:32 +01:00
Korcan Hussein c0c10fd34d cmake: fix eigen cmake packages for v5.0 (3.5)
Eigen changed from 3.x versioning to semver (3.5 became 5.0) and
dropped FindEigen3.cmake module support (deprecated in prior versions)
for config discovery.

Switch from find_package version constraints to manual version checking
to maintain compatibility with both versioning schemes (>= 3.3 old or
>= 5.0 new).

See: https://gitlab.com/libeigen/eigen/-/merge_requests/485
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2583>
2025-09-22 15:17:57 +01:00
Korcan Hussein d5cf67f6aa a/vk: refactors vk queues into dedicated type
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2572>
2025-09-03 15:50:35 +01:00
averyv c53a690421 u/json: Implement rule of 5 in JSONNode
`operator=(JSONNode)` and `operator=(JSONNode &&)` conflict with each other
resulting in neither, and particularly the move operator, being usable.

Implement the missing traditional operators instead:
- `JSONNode(const JSONNode&)`,
- `operator=(const JSONNode&)`, and
- `operator=(JSONNode&&)`

Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2426>
2025-07-16 23:04:13 +01:00
Simon Zeni f0e79b15ac Revert "a/math: Add filtered motion vectors to relation history"
See https://gitlab.freedesktop.org/monado/monado/-/issues/528

This reverts commit 339a2b536e.

Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2495>
2025-07-14 09:33:16 -04:00
Beyley Cardellio 339a2b536e a/math: Add filtered motion vectors to relation history
The one-euro parameters were hand-tuned for what "felt okay" for the razer hydra specifically

Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2471>
2025-05-23 12:36:05 -07:00
Moshi Turner 84d5c8b02c all: Update Moshi's name
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2414>
2025-02-04 19:44:34 +00:00
Jakob Bornecrantz 574457b72c tests: Only build st/oxr tests if XRT_FEATURE_OPENXR is set
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2401>
2025-01-21 21:19:17 +00:00