The Vulkan Schnee renderer targets desktop VR and desktop mirror output. Per frame, the renderer runs a sequence of GPU passes: compute passes cull and prepare draw commands on the GPU, then a graphics pass draws into the eye render targets, and the result is tonemapped and presented to the headset and the mirror window.
Render Passes
The graph shows the per-frame pass order. Compute passes write visibility and draw data to shared buffers; the graphics passes consume that data. Optional passes (shaded gray) run only when their feature is enabled.
Pass Order
The passes run in a fixed order each frame:
- CPU frame update uploads view-projection matrices, frustum planes, per-object data, and LOD configuration, then resets the visibility and pipeline counters.
- Sun shadow pass culls shadow casters against the cascade volumes and records the shadow map draws. It reuses the visibility buffers and clears them before camera culling.
- Primitive culling tests active primitives against the stereo frustum and routes survivors to the mesh-shader, vertex-shader, or LOD paths.
- Parallel LOD selection (optional) selects visible LOD clusters for primitives with cluster LOD data.
- Meshlet binning allocator groups survivors into per-pipeline bins.
- Meshlet unpacking expands the allocations into visible meshlet records; its dispatch size is GPU-driven.
- Prepare draw converts per-pipeline counts into indirect draw commands for the mesh shader.
- VS instanced drawing bins single-meshlet geometry and prepares instanced vertex-shader draws.
- Particle compute (optional) emits, simulates, and prepares wind-trail particle draws.
- Main graphics pass records the mesh-shader and vertex-shader draws into the eye render targets.
- Tonemap converts the render targets to the swapchain image.
- Present submits the frame to the headset compositor and the desktop mirror window.
Detailed Documentation
The pass internals are documented per topic:
Architecture Split
The renderer separates CPU-side orchestration from GPU-side execution. CPU objects own the per-frame state, buffers, and synchronization; the GPU runs the visibility and draw passes. The same render results feed the headset swapchain and the optional desktop mirror output.