| name | compact-storage-always-available |
| description | Compact storage formats (R16Float, R8Unorm, Rg16Float, Rg11b10Float) require a runtime probe at adapter creation for STORAGE_BINDING support. Desktop Vulkan/DX12/Metal always passes the probe. Mobile GPUs (older Mali/Adreno) may fail it — keep the probe and R32 fallback path. Never use compile-time gates — Titan ships one binary across platforms |
| source | auto-skill |
| extracted_at | 2026-06-15T04:29:18.101Z |
Compact Storage Formats — Desktop Always, Mobile Probed
Titan targets desktop (Vulkan/DX12/Metal), mobile (Android/Vulkan, iOS/Metal),
and consoles. Desktop GPU drivers always expose STORAGE_BINDING for compact
formats (R16Float, R8Unorm, Rg16Float, Rg11b10Float). Mobile GPUs may not:
Vulkan §34.4 makes storage support optional for these formats on Android, and
older Mali/Adreno GPUs commonly lack it. Apple A-series GPUs support it from
family Apple 6+ but older devices may not.
Why: The wgpu baseline restriction on these formats is WebGPU-spec compliance
only — the native desktop APIs have always supported storage for these formats.
The vendored wgpu removes this restriction. On mobile, keep the runtime probe
for device variance.
How to apply:
- Keep the runtime probe
adapter.get_texture_format_features(R16Float) at
device creation time. On desktop it always passes; on mobile it correctly
detects GPUs that lack the feature.
- Use
denoiser_confidence_format(compact: bool) etc. helpers to select
narrow format (R16Float) or baseline fallback (R32Float).
- Thread the probe result through init-time constructors (see
capability-propagation skill).
- Never use
#[cfg] compile-time gates — desktop always wins the probe and
runtime overhead is one call at boot. Single binary adapts per-device.