What happens
With runtime main ≥ d21eb46e2 (displayxr-runtime#1499 / PR #1519), a PRIMARY_STEREO session — which the Unity provider always is — gets xrRequestDisplayRenderingModeDXR for a rendering mode it cannot fill (sim-display's 4-view Quad, mode index 4) answered with XR_SUCCESS plus XrEventDataDisplayModeRequestDeniedDXR (reason = XR_DISPLAY_MODE_DENIAL_REASON_VIEW_CONFIG_CANNOT_FILL_DXR, 6).
Measured on the win box (urp-singlepass-ui, provider #328 DLL, sim-display, V×20 via scancode injection): 0 mode crossings, 18 DENYING rendering mode 4 lines — the V-cycle (DisplayXRInputController.cs:95) computes "next = current + 1", requests 4, is denied, stays on the current mode, and next V requests 4 again. The cycle is stuck. desktop-avatar toggles 2D↔Anaglyph directly and is unaffected.
Fix
- On
XR_TYPE_EVENT_DATA_DISPLAY_MODE_REQUEST_DENIED_DXR, advance past the denied index (or rebuild the cycle list from xrEnumerateDisplayRenderingModesDXR honouring isRequestable).
- Prefer building the cycle list only from modes with
viewCount <= 2 (the provider is stereo-fixed — DXR_PROV_MAX_VIEWS 2) so the request is never made; runtime-side complement tracked as displayxr-runtime (see the linked issue) to report such modes isRequestable = XR_FALSE for the session.
Refs
displayxr-runtime#1499, #1519 (denial), displayxr-unity#328 / #329 (where it was measured), displayxr-runtime#1528 (unrelated frame-edge grace measured in the same run).
What happens
With runtime
main≥ d21eb46e2 (displayxr-runtime#1499 / PR #1519), aPRIMARY_STEREOsession — which the Unity provider always is — getsxrRequestDisplayRenderingModeDXRfor a rendering mode it cannot fill (sim-display's 4-view Quad, mode index 4) answered withXR_SUCCESSplusXrEventDataDisplayModeRequestDeniedDXR(reason = XR_DISPLAY_MODE_DENIAL_REASON_VIEW_CONFIG_CANNOT_FILL_DXR, 6).Measured on the win box (urp-singlepass-ui, provider #328 DLL, sim-display, V×20 via scancode injection): 0 mode crossings, 18
DENYING rendering mode 4lines — the V-cycle (DisplayXRInputController.cs:95) computes "next = current + 1", requests 4, is denied, stays on the current mode, and next V requests 4 again. The cycle is stuck. desktop-avatar toggles 2D↔Anaglyph directly and is unaffected.Fix
XR_TYPE_EVENT_DATA_DISPLAY_MODE_REQUEST_DENIED_DXR, advance past the denied index (or rebuild the cycle list fromxrEnumerateDisplayRenderingModesDXRhonouringisRequestable).viewCount <= 2(the provider is stereo-fixed —DXR_PROV_MAX_VIEWS 2) so the request is never made; runtime-side complement tracked as displayxr-runtime (see the linked issue) to report such modesisRequestable = XR_FALSEfor the session.Refs
displayxr-runtime#1499, #1519 (denial), displayxr-unity#328 / #329 (where it was measured), displayxr-runtime#1528 (unrelated frame-edge grace measured in the same run).