Skip to content

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 Execution Flow

  1. GaussianSplatRenderer::render_scene_instance initializes per-frame state and camera/view context.
  2. Renderer decides route: streaming route via RenderStreamingOrchestrator when streaming buffers/readiness are valid, otherwise it records explicit not-ready/readiness state and skips the frame.
  3. RenderPipelineStages runs stage sequence: cull (execute_cull_stage), sort (execute_sort_stage), then raster/composite (render_sorted_splats_with_context).
  4. 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_enabled
  • rendering/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 allowed
  • single_pass_forced: serial was requested but policy forced single-pass

Related sources:

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_context prepares raster/composite inputs
  • TileRenderer performs 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: