[perf][MEDIUM] Per-frame text re-shaping for static strings
[perf][MEDIUM] Full 1 MiB font atlas re-upload on any single new glyph
[perf][LOW] uiResolveScreenPixel runs clip-rect compares even when unclipped
[perf][LOW] nonuniformEXT on dynamically-uniform font slots (text shader)
[perf][MEDIUM] Full-image compute->compute barrier between every UI dispatch
[perf][MEDIUM] Redundant swapchain imageLoad/imageStore per UI dispatch
[perf][HIGH] UI tiles scan the full item list — no spatial culling
[perf][LOW] Resize path: dead present-mode queries + presentModes vector
[perf][LOW] CRAFTER_TIMING frame-time history uses erase(begin()) every frame
[perf][LOW] Invariant Vulkan structs rebuilt every frame
[perf][LOW] Descriptor-heap bind recorded unconditionally every frame
[perf][MEDIUM] Single shared semaphore pair prevents multiple frames in flight
[perf][HIGH] Per-frame vkQueueWaitIdle fully serializes CPU and GPU (frame loop)
Procedural BLAS: device-buffer build input + refit (UPDATE) for dynamic geometry
Accelration structure build options
Browser wasm: feature-detected module variants (relaxed-SIMD) + variant-aware runtime.js
Vulkan: Mesh::BuildProcedural — AABB (procedural) BLAS build path to match WebGPU