The Vulkan Schnee renderer targets desktop VR and desktop mirror output. It splits frame orchestration between CPU-side renderer objects and GPU-side compute and mesh-shader stages.
Architecture
The renderer is divided into CPU-side orchestration and GPU-side execution:
CPU-Side Components
ApplicationContext (OpenXR Integration)
ApplicationContext owns VR integration through OpenXR:
- Runtime Management: Initializes OpenXR runtime connections
- Session Lifecycle: Handles VR session creation, frame timing, and cleanup
- Input Abstraction: Provides input handling across VR platforms
- Compositor Coordination: Submits frames to the VR compositor
Renderer (Resource Management)
The Renderer class owns all GPU resources that persist across frames:
- Pipeline Management: Creates and manages graphics and compute pipelines
- Buffer Allocation: Handles unified buffer creation and memory management
- Descriptor Management: Sets up shader resource bindings and layouts
- Command Recording: Orchestrates the rendering command buffer sequence
RenderProcess (Per-Frame State)
Each RenderProcess manages frame-specific rendering state:
- Synchronization: Handles frame timing and GPU synchronization primitives
- Dynamic Updates: Manages per-frame buffer updates and resource binding
- Swapchain Management: Coordinates image acquisition and presentation
MirrorView (Desktop Display)
The mirror view provides desktop visualization of VR content:
- Window Management: Creates and manages desktop display window
- Image Sharing: Reuses VR rendering results for desktop display
- Debugging Support: Enables inspection of VR rendering without headset
GPU-Side Pipeline
The GPU pipeline is documented in VR Renderer. It uses:
- Unified Buffer Architecture: All scene geometry in shared GPU buffers
- GPU-Driven Rendering: Visibility culling and command generation on GPU
- Mesh Shading: Modern graphics pipeline using mesh shaders for efficient geometry processing
- Compute-Based Culling: Multi-stage visibility reduction before drawing
Integration Points
Renderer components share frame data through explicit ownership boundaries:
- Resource Sharing: Buffers and pipelines shared between VR and mirror rendering
- Synchronization: Timeline semaphores coordinate GPU work across components
- Memory Management: Unified memory allocation strategy across all renderer components
The same render results feed the headset swapchain and optional desktop mirror output.