concinnity_core/render/directx/pass_timing.rs
1//! Per-pass GPU timing on D3D12 via TIMESTAMP queries. The slot layout is the
2//! shared one ([`crate::render::pass_timing`]); this module only re-exports it so the
3//! backend keeps its `crate::render::directx::pass_timing` path.
4//!
5//! `execute_graph` issues an `EndQuery` before and after each pass's `encode_*`,
6//! and the resolve at the end of the command list copies the whole block into
7//! the persistently-mapped readback buffer. The CPU reads the previous frame's
8//! block at the top of `draw_frame` (after the matching fence wait gates the GPU
9//! writes) and publishes the per-pass microseconds into `RenderStats`.
10//!
11//! SsaoPrepass / SsaoKernel / ParticlesSim are bundled inside their parent
12//! encoders, and the FogFroxel / Upscale / Transparent / Raymarch arms are
13//! no-ops here, so those slots stay zero. `StatHud.passes_text` picks the top
14//! six non-zero entries, so zero slots drop out of the on-screen chip.
15
16pub use crate::render::pass_timing::*;