Architecture

How the DisplayXR stack works, from OpenXR API layer through native compositors to vendor display processors.

Stack Overview

DisplayXR sits between the OpenXR API and vendor-specific display hardware. Applications write to the standard OpenXR interface. DisplayXR handles session management, compositor orchestration, and extension dispatch. Vendor-specific processing — weaving, interlacing, calibration — happens below, in the display processor layer.

App (any graphics API)
OpenXR API Layer
DisplayXR Runtime
D3D11
D3D12
Vulkan
Metal
OpenGL
Display Processor (vendor-specific)
3D Display

Each graphics API gets its own native compositor. No cross-API interop or Vulkan intermediary is required.

Native Compositor Model

Most XR runtimes use a single graphics API internally and translate submitted textures as needed. DisplayXR takes a different approach: each supported graphics API has its own dedicated compositor implementation.

D3D11Full compositor with LeiaSR weaver integration and window binding support.
D3D12Native compositor with window binding. Command queue managed per session.
VulkanNative compositor with swapchain management. MoltenVK path available on macOS.
MetalNative compositor with sim_display weaver and window binding. macOS primary path.
OpenGLNative compositor supporting both Windows and macOS contexts.

Per-Graphics-API Design

This per-API design means no texture copies between APIs, no translation overhead, and no dependency on a single "blessed" graphics backend. The compositor that runs is the one that matches the application's chosen API.

The runtime selects the correct compositor at session creation time based on the graphics binding the application provides. This is transparent to the application — it simply uses OpenXR as normal.

Separation of Concerns

DisplayXR draws a clean boundary between two responsibilities:

App-Facing Portability

Standard OpenXR API, session management, swapchain handling, extension dispatch. Applications write once against this interface.

Vendor-Specific Processing

Weaving, interlacing, calibration, eye tracking integration. This lives in the display processor layer and is owned by the hardware vendor.

Simulation Driver

DisplayXR includes a simulation display processor (sim_display) that allows development and testing without physical 3D display hardware. It provides the same interface as a hardware-backed display processor but renders to a standard window.

This means developers can build, test, and iterate on spatial display applications using any standard monitor. The simulation path supports all graphics APIs and all application classes.

Explore the runtime source code on GitHub.