# mbucchia/quad-views-foveated architecture

> Architecture diagram of the GitHub repository mbucchia/quad-views-foveated, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mbucchia/quad-views-foveated
- Repository: https://github.com/mbucchia/quad-views-foveated

## Overview

Quad Views Foveated is an implicit OpenXR API layer that adapts quad-view rendering for platforms that do not natively support Varjo quad views. The principal workflow intercepts an application’s OpenXR frame submission, uses eye-tracking input to position the focus views, and composes the views into stereo output; optional foveated rendering and sharpening are additional capabilities. The README establishes the product workflow, while sampled source confirms layer dispatch, input handling, and graphics swapchain/fence support. Some internal call wiring is omitted because the layer implementation excerpt is incomplete.

Main entry points: [`openxr-api-layer/layer.cpp`](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/layer.cpp) (Frame interception), [`openxr-api-layer/framework/entry.cpp`](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/framework/entry.cpp) (Layer entry), [`openxr-api-layer/utils/graphics.h`](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/utils/graphics.h) (Graphics abstraction), [`openxr-api-layer/framework/dispatch.cpp`](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/framework/dispatch.cpp) (API dispatch)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_layer["OpenXR layer"]
  node_entry["Layer entry<br/>[entry.cpp]"]
  node_dispatch["API dispatch<br/>[dispatch.cpp]"]
  node_layercore["Frame interception<br/>[layer.cpp]"]
end

subgraph group_views["View and input"]
  node_input["Eye-tracking input<br/>[input.cpp]"]
  node_viewmath["View geometry<br/>[views.h]"]
end

subgraph group_graphics["Graphics composition"]
  node_composition["Layer composition<br/>[composition.cpp]"]
  node_graphicsapi["Graphics abstraction<br/>[graphics.h]"]
  node_d3d11["Direct3D 11<br/>[d3d11.cpp]"]
  node_d3d12["Direct3D 12<br/>[d3d12.cpp]"]
  node_projection["Projection shaders<br/>[ProjectionPS.hlsl]"]
  node_sharpen["CAS sharpening<br/>[SharpeningCS.hlsl]"]
end

subgraph group_runtime["Runtime support"]
  node_logging["Logging<br/>[log.cpp]"]
end

node_app(("OpenXR application"))
node_runtime["OpenXR runtime"]

node_app -->|"loads layer"| node_entry
node_entry -->|"sets dispatch"| node_dispatch
node_dispatch -->|"forwards calls"| node_layercore
node_layercore -->|"forwards OpenXR"| node_runtime
node_app -->|"submits frames"| node_layercore
node_layercore -->|"uses gaze input"| node_input
node_layercore -->|"computes view bounds"| node_viewmath
node_layercore -->|"composes projections"| node_composition
node_composition -->|"creates graphics resources"| node_graphicsapi
node_graphicsapi -->|"selects backend"| node_d3d11
node_graphicsapi -->|"selects backend"| node_d3d12
node_layercore -->|"uses projection shader"| node_projection
node_layercore -.->|"dispatches sharpening"| node_sharpen
node_entry -->|"initializes logging"| node_logging

click node_entry "https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/framework/entry.cpp"
click node_dispatch "https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/framework/dispatch.cpp"
click node_layercore "https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/layer.cpp"
click node_input "https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/utils/input.cpp"
click node_viewmath "https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/views.h"
click node_composition "https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/utils/composition.cpp"
click node_graphicsapi "https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/utils/graphics.h"
click node_d3d11 "https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/utils/d3d11.cpp"
click node_d3d12 "https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/utils/d3d12.cpp"
click node_projection "https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/ProjectionPS.hlsl"
click node_sharpen "https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/SharpeningCS.hlsl"
click node_logging "https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/framework/log.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_entry,node_dispatch,node_layercore toneBlue
class node_input,node_viewmath toneAmber
class node_composition,node_graphicsapi,node_d3d11,node_d3d12,node_projection,node_sharpen toneMint
class node_logging toneRose
class node_app,node_runtime toneIndigo
```

## Components

### OpenXR layer

- [Layer entry](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/framework/entry.cpp): `openxr-api-layer/framework/entry.cpp`
- [API dispatch](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/framework/dispatch.cpp): `openxr-api-layer/framework/dispatch.cpp`
- [Frame interception](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/layer.cpp): `openxr-api-layer/layer.cpp`

### View and input

- [Eye-tracking input](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/utils/input.cpp): `openxr-api-layer/utils/input.cpp`
- [View geometry](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/views.h): `openxr-api-layer/views.h`

### Graphics composition

- [Layer composition](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/utils/composition.cpp): `openxr-api-layer/utils/composition.cpp`
- [Graphics abstraction](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/utils/graphics.h): `openxr-api-layer/utils/graphics.h`
- [Direct3D 11](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/utils/d3d11.cpp): `openxr-api-layer/utils/d3d11.cpp`
- [Direct3D 12](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/utils/d3d12.cpp): `openxr-api-layer/utils/d3d12.cpp`
- [Projection shaders](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/ProjectionPS.hlsl): `openxr-api-layer/ProjectionPS.hlsl`
- [CAS sharpening](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/SharpeningCS.hlsl): `openxr-api-layer/SharpeningCS.hlsl`

### Runtime support

- [Logging](https://github.com/mbucchia/quad-views-foveated/blob/main/openxr-api-layer/framework/log.cpp): `openxr-api-layer/framework/log.cpp`

### Other components

- **OpenXR application**
- **OpenXR runtime**

## Connections

- OpenXR application → Layer entry: loads layer
- Layer entry → API dispatch: sets dispatch
- API dispatch → Frame interception: forwards calls
- Frame interception → OpenXR runtime: forwards OpenXR
- OpenXR application → Frame interception: submits frames
- Frame interception → Eye-tracking input: uses gaze input
- Frame interception → View geometry: computes view bounds
- Frame interception → Layer composition: composes projections
- Layer composition → Graphics abstraction: creates graphics resources
- Graphics abstraction → Direct3D 11: selects backend
- Graphics abstraction → Direct3D 12: selects backend
- Frame interception → Projection shaders: uses projection shader
- Frame interception → CAS sharpening: dispatches sharpening
- Layer entry → Logging: initializes logging
