Skip to content

IPC clients cannot capture their frame: MCP capture_frame 'not wired', per-exe atlas trigger and service screenshot trigger not serviced #1810

Closed

Description

@dfattal

On the IPC / service path there is no way to capture a client's frame from that client's side. Every per-app capture route fails, so a standalone forced-IPC (or shell) client's composited output can't be measured from the app.

Repro (win box, dev runtime built from fix/1795-local2d-flatten-honest, 2026-10-03)

Start the service, then run cube_zones_d3d11_win with XRT_FORCE_MODE=ipc DISPLAYXR_ZONES=1 DISPLAYXR_MCP=1.

route result
per-app MCP capture_frame on \.\pipe\displayxr-mcp-<pid> {"error":"capture_frame not wired: compositor has not registered a handler. Rebuild with the MCP capture hooks enabled for this graphics API."}. The IPC client compositor (client_d3d11) never calls oxr_mcp_tools_set_capture_handler().
per-exe file trigger %TEMP%\displayxr_atlas_trigger.<exe> never consumed: the trigger file stays on disk and no PNG is written
service %TEMP%\workspace_screenshot_trigger never consumed for a standalone client whose DP runs transparency = client-present. No capture WARN at all, so the pipeline never reached a capture site.

The in-process compositors serve all of these, and CLAUDE.md says xrCaptureAtlasDXR routes through an "IPC branch". In practice none of the per-app paths reach the service's per-client atlas.

Why it matters

Colour work on the service path (#1795, ADR-044 §7: pure-zones / Local2D commits) can't be verified numerically from the client. The service stamps Local2D into the per-client atlas, so an atlas capture would be the oracle.

Expected

For an IPC client, capture_frame (and the per-exe trigger) should request the service's per-client atlas over IPC: pre-weave, ADR-044 §5 semantics, raw alpha under DXR_ATLAS_CAPTURE_RAW_ALPHA. Alternatively, the service-side screenshot trigger should also fire on the client-present / standalone path.

Shell-mode capture via the shell's MCP capture_frame (xrCaptureWorkspaceFrameDXR) is a separate route and is not covered by this report.

Activity

  1. dfattal commented on Oct 3, 2026

    @dfattal
    CollaboratorAuthor

    Also failing: the shell's MCP capture_frame (\.\pipe\displayxr-mcp-shell, wraps xrCaptureWorkspaceFrameDXR). It returned {"ok":false,"path_prefix":"...\Temp\displayxr_capture"} for a workspace with one cube_zones_d3d11_win client. Setup: installed shell v2.3.2 on a dev service built from #1809's branch, 2026-10-03. David asked for this to be fixed so agents can verify the service path autonomously.

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