Skip to content

V-cycle re-requests a denied rendering mode forever — skip denied / non-requestable modes (runtime #1499 denial) #17

Description

@dfattal

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).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions