Repository navigation
Conversation
…reen oxr_session_locate_views never splits a zone-scoped locate, and its one view set was framed from the screen holding most of the window. A zone wholly on the other screen of a straddling window (an XR_DXR_display_zones app on an in-process D3D11/D3D12/GL/Vulkan/Metal compositor, or a direct client of the D3D11 service) was therefore rendered from the wrong viewer and framed against the wrong panel, though that screen's DP wove it. Now oxr_segment_views_zone_segment picks the segment holding the whole zone, and the locate frames that screen's whole-window metrics with its eyes and nominal viewer before the usual zone rebase. A zone on the primary takes the single-screen path. A straddling zone keeps the majority's set, as before. This is the in-process / direct-IPC twin of the present-owner rule (ADR-047 Amendment 4 addendum, u_weave_zone_screen_segment), and it picks the same screen wherever that rule re-frames (swept in tests_weave_segments). ADR-047 Amendment 9; XR_DXR_display_zones multi-screen note updated. No extension revision: the locate API is unchanged. Refs DisplayXR/displayxr-browser-pvt#272 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Design for the full fix of displayxr-browser-pvt#272: a zone-scoped locate returns per-part view sets (XrDisplayZonePartsDXR, one m2v per zone), the weave crops at the painted partition, and the browser exposes each part as a view pair with a sub-viewport. Proposal only, with the open questions that need David's sign-off. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…isplayZonePartsDXR, spec v4) A zone-scoped xrLocateViews of a zone that straddles the seam between two screens can now return one view set per part, chained on XrViewState (XR_DXR_display_zones v4, type 1004999155). Each part is located like a window segment over the parts' own table (u_weave_zone_part_table -> oxr_segment_views_zone_parts): that screen's eyes carried into the frame of the zone's majority screen, the part as the Kooima canvas on its own screen, and one m2v for the whole zone under a display rig, so the parts meet at the seam. XrView[] keeps the zone's one set. The one set of a straddling zone is framed from the screen holding most of the ZONE on every path (u_weave_rect_majority_segment): the present-owner rule (u_weave_zone_screen_segment) used the primary, every other session the window's majority. At most DXR_ZONE_PARTS_MAX (default 4) zones per display time are split, first located first served. Camera-centric locates are never split; PRIMARY_MULTIVIEW_DXR gets per-part zone views through the struct only. In-process segmenting compositors and direct D3D11-service clients locate the parts client-side from the segment table (no wire change). Present-owner parts (server-side) and the painted-partition weave crop are a follow-up. ADR-047 Amendment 10; XR_DXR_display_zones.md 3.3.2; census entry for DXR_ZONE_PARTS_MAX; type-value registry row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Per-part views via XrDisplayZonePartsDXR (runtime returns the parts), majority framing for unaware callers everywhere, extra XRViews with a sub-viewport on the web (DisplayXR-only), seam accepted, a per-frame cap of split zones, PRIMARY_MULTIVIEW_DXR via the struct only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dfattal
force-pushed
the
feat/zone-locate-per-screen
branch
from
October 12, 2026 21:58
8edf458 to
ae65363
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Runtime side of DisplayXR/displayxr-browser-pvt#272. Stacked follow-up: #2018 (present-owners + the painted-partition weave crop).
(A) A zone is framed from its own screen on every segmenting session (ADR-047 Amendment 9)
oxr_session_locate_viewsnever splits a zone-scoped locate, and its one view set was framed from the window's majority screen. On sessions whose own compositor segments the window (in-process D3D11 / D3D12 / GL / Vulkan / Metal, or a direct client of the D3D11 service), a zone wholly on the other screen of a straddling window was rendered from the wrong viewer. It is now framed from the zone's screen: that screen's eyes and nominal viewer, the whole window relative to it, then the zone rebase. The present-owner path already did this (#1927).(B) Per-part views for a straddling zone:
XrDisplayZonePartsDXR(XR_DXR_display_zones v4, ADR-047 Amendment 10)David's § 8.3 decisions are recorded in
docs/roadmap/multi-screen.md§ 8 (now "Decided").XrViewStateof a zone-scoped locate:XrDisplayZonePartsDXR/XrDisplayZonePartDXR, type1004999155(registry row updated).SPEC_VERSION3 → 4. Spec:XR_DXR_display_zones.md§ 3.3.2.index.jsonnote updated;gen_extensions_index.py --checkis green.u_weave_zone_part_table→oxr_segment_views_zone_parts). That screen's eyes are carried into the frame of the zone's majority screen, the part is the Kooima canvas on its own screen, and a display rig gets one m2v for the whole zone (vdh_scaleand the rig offset with "window" read as "zone"), so the parts meet at the seam. This also holds across panels of different pitch.XrView[]keeps the one set, so an app that does not chain the struct is unchanged. Two-call idiom, never an error.PRIMARY_MULTIVIEW_DXRgets per-part zone views through the struct only (decision 6). Camera-centric locates are never split.DXR_ZONE_PARTS_MAX(default 4, 0 = never, max 16) zones per display time are split, first located first served. Registered in thecontrol-panel-performance-settings.mdcensus.(C) ⚠ Behaviour change: the majority rule now applies everywhere (decision 2)
A straddling zone's one view set is now framed from the screen holding most of the zone (
u_weave_rect_majority_segment; ties go to the primary, then the leftmost) on every path:u_weave_zone_screen_segment,ipc_try_get_sr_view_poses). A straddling inline-3D element was framed from the primary screen. It is now framed from its majority screen, so an element mostly on screen 2 is rendered from screen 2's viewer and geometry. The browser needs no change to get this.Tests
tests/tests_weave_segments.cppcovers the majority rule (ties, slivers, off-window, and a sweep that asserts the server and client rules agree), the part table (cut, zone-relative rects, the same cut as the weave's rect parts), the part framing (own-screen canvas, eye-relative centre, one m2v, abutting virtual canvases, different pitch), and the per-frame budget. I built it standalone with MSVC and ran it: 24 cases, 2619 assertions, all pass.tests_oxr_segment_views(17 cases) also passes.oxr_session.candipc_server_handler.ccompile locally with MSVC; CI does the rest. There was no hardware run: the panels were in use on the shared box.🤖 Generated with Claude Code