Render Pipeline Architecture¶
This document describes the runtime render pipeline in detail: frame entry, route selection, stage execution, and fallback behavior.
Canonical Pipeline Entry Points¶
- Frame entry: ../../modules/gaussian_splatting/renderer/gaussian_splat_renderer.cpp (
render_scene_instance) - Streaming path orchestration: ../../modules/gaussian_splatting/renderer/render_streaming_orchestrator.cpp
- Instancing execution mode decisions: ../../modules/gaussian_splatting/renderer/render_instancing_orchestrator.cpp
- Stage runner interface: ../../modules/gaussian_splatting/renderer/render_pipeline_stages.h
- Stage implementations: ../../modules/gaussian_splatting/renderer/render_pipeline_stages.cpp
- Tile raster/resolve backend: ../../modules/gaussian_splatting/renderer/tile_render_stages.cpp
Frame Execution Flow¶
GaussianSplatRenderer::render_scene_instanceinitializes per-frame state and camera/view context.- Renderer decides route: streaming route via
RenderStreamingOrchestratorwhen streaming buffers/readiness are valid, otherwise it records explicit not-ready/readiness state and skips the frame. RenderPipelineStagesruns stage sequence: cull (execute_cull_stage), sort (execute_sort_stage), then raster/composite (render_sorted_splats_with_context).- Output and diagnostics are finalized.
flowchart LR
Entry[render_scene_instance] --> Route{Streaming<br/>ready?}
Route -- Yes --> Stream[RenderStreamingOrchestrator]
Route -- No --> NotReady[Publish not-ready state]
Stream --> Cull[Cull Stage]
Cull --> Sort[Sort Stage]
Sort --> Raster[Raster / Composite]
Raster --> Output[Final Output]
Execution Modes (Single-Pass vs Serial)¶
Instancing mode policy is controlled by project settings:
rendering/gaussian_splatting/instance_pipeline/true_single_pass_enabledrendering/gaussian_splatting/instance_pipeline/benchmark_allow_serial_multi_asset
Mode behavior in orchestrators:
single_pass: production path (one cull/sort/raster chain for the frame)serial: benchmark/diagnostic replay path when explicitly allowedsingle_pass_forced: serial was requested but policy forced single-pass
Related sources:
- ../../modules/gaussian_splatting/renderer/render_streaming_orchestrator.cpp
- ../../modules/gaussian_splatting/renderer/render_instancing_orchestrator.cpp
Stage Contracts¶
Cull Stage¶
- Inputs: view transform/projection + viewport + frame/provider context
- Output: visible count and visible-domain information
- Contract owner:
RenderPipelineStages::CullStage
Sort Stage¶
- Inputs: world-to-camera transform + cull outputs
- Output: sorted indices and output-domain metadata
- Contract owner:
RenderPipelineStages::SortStage
Raster and Composite¶
RenderPipelineStages::render_sorted_splats_with_contextprepares raster/composite inputsTileRendererperforms tile pipeline and resolve passes- Output compositor handles final target/viewport handoff
Fallback and Failure Semantics¶
When prerequisites are missing (device, buffers, or readiness invariants), the renderer records explicit readiness state and avoids publishing invalid stage results.
Relevant code:
- ../../modules/gaussian_splatting/renderer/gaussian_splat_renderer.cpp
- ../../modules/gaussian_splatting/renderer/render_pipeline_stages.cpp
- ../../modules/gaussian_splatting/renderer/render_diagnostics_orchestrator.cpp