| name | compact-aov-coordinated-activation |
| description | Activating compact storage formats (R16Float/Rg16Float) for denoiser AOVs requires coordinated BGL + WGSL + texture-format updates across writer and reader passes — change all in lockstep or the bind group will fail validation at runtime |
| source | auto-skill |
| extracted_at | 2026-06-15T05:05:48.015Z |
Compact AOV Coordinated Activation
When activating compact storage formats for denoiser AOVs (shading confidence,
variance, moments, history confidence), every pass that writes to or reads from
the texture must agree on the format. A mismatch panics at bind group creation.
The write side
For each AOV storage texture being compacted (e.g., R32Float → R16Float):
- Rust BGL in the writer pass — change
TextureFormat::R32Float to
TextureFormat::R16Float in the BindGroupLayoutEntry for the storage
binding.
- WGSL in the writer shader — change the storage texture format from
texture_storage_2d<r32float, write> to texture_storage_2d<r16float, write>.
- Texture creation — the host-side texture allocator (typically in
render_hook.rs) must create the texture with the matching format.
The read side
Sampled (non-storage) readers do NOT need BGL format changes — they bind with
TextureSampleType::Float regardless of the underlying format. Only storage
texture writers/readers that declare an explicit format need updating.
Files affected (Titan)
| AOV | Writer | WGSL | BGL |
|---|
| shading_confidence | stratum_shading | stratum_shading.wgsl | stratum_shading.rs binding 5 |
| variance_out | svgf_temporal | svgf_temporal.wgsl | svgf_temporal.rs binding 5 |
| moments_curr | svgf_temporal | svgf_temporal.wgsl | svgf_temporal.rs binding 4 |
| history_conf_curr | svgf_temporal | svgf_temporal.wgsl | svgf_temporal.rs binding 10 |
| specular_moments | specular_temporal | stratum_specular_temporal.wgsl | specular_temporal.rs binding 4 |
| specular_variance | specular_temporal | stratum_specular_temporal.wgsl | specular_temporal.rs binding 5 |
Validation
After changing all sites, rebuild and run the probe bench. A format mismatch
produces a panic at Device::create_bind_group:
Storage texture binding N expects format = R32Float, but given a view with format = R16Float