diff --git a/draw/README.md b/draw/README.md index b1d38b6..a04d09a 100644 --- a/draw/README.md +++ b/draw/README.md @@ -37,10 +37,13 @@ All SDF shapes produce mathematically exact curves with analytical anti-aliasing no tessellation, no piecewise-linear approximation. A rounded rectangle is 1 primitive (80 bytes) instead of ~250 vertices (~5000 bytes). -The fragment shader's estimated register footprint is ~20–26 VGPRs, with Ring_Arc being the -heaviest shape kind (pre-computed edge normals and branchless wedge evaluation require more live -values than RRect's sdRoundedBox). Comfortably under the 32-register occupancy cliff on mobile -Mali and Adreno, and well under desktop architectures' higher limits. +The fragment shader's estimated register footprint is ~20–23 VGPRs via static live-range analysis. +RRect and Ring_Arc are roughly tied at peak pressure — RRect carries `corner_radii` (4 regs) plus +`sdRoundedBox` temporaries, Ring_Arc carries wedge normals plus dot-product temporaries. Both land +comfortably under Mali Valhall's 32-register occupancy cliff (G57/G77/G78 and later) and well under +desktop limits. On older Bifrost Mali (G71/G72/G76, 16-register cliff) either shape kind may incur +partial occupancy reduction. These estimates are hand-counted; exact numbers require `malioc` or +Radeon GPU Analyzer against the compiled SPIR-V. MSAA is opt-in (default `._1`, no MSAA) via `Init_Options.msaa_samples`. SDF rendering does not benefit from MSAA because fragment coverage is computed analytically. MSAA remains useful for text