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-propagationskill). - Never use
#[cfg]compile-time gates — desktop always wins the probe and runtime overhead is one call at boot. Single binary adapts per-device.