Repository navigation
DisplayXR Runtime v2.34.0
Highlights
Android head tracking at panel rate (#1905). In-process Android apps now refresh the woven view, and the eye position fed to the display plug-in, at the panel's 60 Hz whatever the app's own frame rate. Two pieces do this: the repaint loop can now fill while the app is mid-frame (#1910), and xrEndFrame hands the frame off without blocking, with the weave served on the runtime-owned queue and bounded to one frame in flight (#1923). Measured on a Leia phone running earthview, face refresh went from 25 Hz to 59.8 Hz at a flat 60 Hz present cadence, the app gained 11% fps, and the xrEndFrame wait dropped from 6.7 ms to 0.5 ms.
- Both features switch on only when
VK_LAYER_DXR_queue_lockis live in the app process. The layer serialises each queue, Chromium-style, which stops an Adreno shared-GSL-context race: an app submit overlapping a runtime submit made the next submit return -3. The layer is now built for Android (#1915), also interceptsvkDeviceWaitIdle(#1924), and ships inside the DisplayXR client AAR (#1922), so any app depending on the AAR gets it in its native lib dir. Apps must bump their client AAR pin to pick this up (the demos follow in separate PRs). Kill switches:debug.dxr.midframe_fill=0,debug.dxr.async_handoff=0. - GPU-clock diagnostics for Android 13 Adreno devices (#1917, #1921). The ADPF preferred update rate is now logged when the hint session fails.
debug.dxr.sustained_perfturns on sustained-performance mode (off by default). The build guide now states the rule: keep at least 2 frames in flight.
Multi-screen. ADR-052 adds a workspace that spans N screens:
- one workspace presenter per claimed 3D screen
- each workspace window rendered from the screen it is on (per-screen views)
XR_DXR_spatial_workspacev25: screen enumeration and per-screen placement
XR_DXR_weave v19 cuts present-owner weave rects per screen, and an element wholly on a second screen gets that screen's views. The in-process OpenGL and Windows Vulkan compositors now weave a window that spans monitors per screen, with per-segment views (M6). The crop fix for a sliver leaking across the seam during a drag (#1883) now covers D3D11, GL and Vulkan.
Linux. The .deb and the tarball now ship the DisplayXR Dashboard. Window-geometry publishers now use per-compositor conflicts, so GNOME and KWin publishers can be installed side by side (#1929). CI pulls Ubuntu images from public.ecr.aws to avoid the Docker Hub rate limit (#1909).
Features
- feat(android): build + ship
VK_LAYER_DXR_queue_lockon Android with a per-queue lock (#1905) (#1915) - feat(vk_native/android): non-blocking
xrEndFramehand-off; the weave is served asynchronously on the runtime queue, bounded to one frame (#1905) (#1923) - android: ship
VK_LAYER_DXR_queue_lockin the DisplayXR client AAR (#1919) (#1922) - android: sustained-performance mode behind
debug.dxr.sustained_perf+ ADPF preferred-rate log (#1917) (#1921) - feat(workspace):
XR_DXR_spatial_workspacev25: workspace screens, per-screen placement (ADR-052) - feat(d3d11_service): one workspace presenter per claimed 3D screen (ADR-052 D1/D2)
- feat(workspace): per-screen views; a workspace window is rendered from the screen it is on (ADR-052 Amendment 1)
- feat(weave): segment present-owner weave rects per screen (
XR_DXR_weavev19) - feat(weave): a present-owner's element on screen 2 gets screen 2's views; cheap split signal
- feat(gl): weave a window spanning monitors per screen, with per-segment views (multi-screen M6 + M3, Windows)
- feat(plugin): append
create_dp_gl_for_screen+ GLset_present_origin(multi-screen M6; append-only, ABI stays 5) - feat(vk_native): multi-screen segments on Windows, on and off the #918 split (M6)
- feat(test_apps):
cube_handle_vk_winrenders per-segment view sets (M3) - feat(comp_segments): record the segment partition an atlas was painted with (#1883)
- feat(linux): ship the DisplayXR Dashboard in the .deb and the tarball
Fixes
- fix(vk_native/android): repaint fills at panel rate while the app is mid-frame, auto-enabled under the queue-lock layer (#1905) (#1910)
- fix(vk_layer): queue-lock layer intercepts
vkDeviceWaitIdle(takes every queue's lock) (#1905) (#1924) - fix(compositor): crop a spanning window's views where they were painted, not at the live seam (#1883)
- fix(gl): crop a spanning window's views where they were painted (#1883 on the GL segment path)
- fix(vk_native): crop a spanning window's views where they were painted (#1883)
- fix(d3d11_service): grab the workspace pointer capture on the presenter the press went down on (ADR-052)
Docs
- docs(adr): ADR-052 workspace on N screens
- docs(adr-047): Amendment 6, the in-process Vulkan compositor on Windows
- docs(multi-screen): OpenGL segments (ADR-047 Amendment 5, comp-segments, roadmap M6)
- docs(multi-screen): ADR-047 Amendment 4 and the
XR_DXR_weavev19 contract
CI / Build
- build(deb): per-compositor publisher conflicts, so GNOME and KWin publishers coexist (#1928) (#1929)
- ci(linux): pull ubuntu images from public.ecr.aws (Docker Hub rate limit) (#1909)
Other
- test(weave-probe): log the v19 per-screen segments and rect parts
- chore(versions): bump runtime → v2.33.0