Repository navigation
DisplayXR Runtime v2.31.0
Highlights
2D→3D lift gets a viewpoint policy. XR_DXR_lift moves to spec v2 (ADR-048): lifted content is now rendered from viewpoints relative to the lifted window/region rather than the whole display, with per-stream IPD/parallax gains, axis selection and an ease-back recentering filter. Android weave is much cheaper: the input and overlay import caches now hit across IPC frames, taking the browser's whole-page-overlay path on a Leia tablet from ~36 to ~48 fps.
Features
- feat(lift): window-relative viewpoints + lift viewpoint policy (gains, axis mode, ease-back) (#1864, part of #1858/#1859)
XR_DXR_liftSPEC_VERSION 2: newXrLiftViewControlDXR(chained onXrLiftOptionsDXRorXrWeaveRectLiftDXR;ipdFactor,parallaxFactor,axisModeX/XY/XYZ,maxOffsetMeters,recenterModeOFF/EASE_BACK, hold + time constant) andXrLiftResultViewpointsDXR, which echoes the viewpoints, rect centre and size a result was synthesized for.- Every lift viewpoint is rebased to the centre of the lifted region — the weave rect on the client's window, or the session window for
xrSubmitLiftFrameDXR(panel centre when there is none). The display processor is told the frame (viewpoint_frame = RECT) and the region's size in metres. - Tracked viewpoints run through the stream's policy before conversion: IPD and parallax gains, axis mask (X by default), x/y clamp, and a frame-rate-independent ease-back filter (default 1 s hold, 2 s time constant) that resets on stream create and tracking loss.
DXR_LIFT_RECENTER=offdisables recentering for A/B. - Plug-in interface:
xrt_dp_lift_paramsgainsrect_width_m,rect_height_m,baseline_m,axis_mode,max_offset_m,viewpoint_frame, announced byXRT_DP_LIFT_HAS_VIEWPOINT_POLICY— append-only per ADR-020, no plug-in ABI bump. - Behaviour change for existing lifted content: rect-centred viewpoints and ease-back recentering are now the defaults.
- Docs: ADR-048,
XR_DXR_lift.md§4.1, plug-in interface reference. Pure-C math inu_lift_viewpoint.{h,c}with Catch2 tests.
Fixes
- fix(weave/android): key the input + overlay import caches by AHardwareBuffer id, not pointer (#1865, PR #1869) — every IPC receive produced a new
AHardwareBuffer*, so both caches missed every frame: the input and the v4 2D overlay were re-imported on every submit, and the overlay logged a WARN per frame. Measured on a Leia tablet with the browser's opt-in whole-page overlay: ~36 → ~48 fps, browser submit 12.1 → 7.75 ms, frame total 24.3 → 17.8 ms; one import each instead of one per frame.
Other
- chore(versions): bump runtime → v2.30.0