Skip to content

DisplayXR Runtime v2.31.0

Choose a tag to compare

@github-actions github-actions released this 08 Oct 22:54
· 576 commits to main since this release

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_lift SPEC_VERSION 2: new XrLiftViewControlDXR (chained on XrLiftOptionsDXR or XrWeaveRectLiftDXR; ipdFactor, parallaxFactor, axisMode X/XY/XYZ, maxOffsetMeters, recenterMode OFF/EASE_BACK, hold + time constant) and XrLiftResultViewpointsDXR, 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=off disables recentering for A/B.
    • Plug-in interface: xrt_dp_lift_params gains rect_width_m, rect_height_m, baseline_m, axis_mode, max_offset_m, viewpoint_frame, announced by XRT_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 in u_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