Facet deckt Layout-Fehler in WebGPU-Shadern auf

Testing WebGPU data layouts with Facet

Matt Keeter zeigt, wie er mit der Rust-Bibliothek Facet die Speicherlayouts von WebGPU-Compute-Shadern automatisch testet. Ein Beispiel: In WGSL belegt eine mat3x3 durch Zeilenpadding 48 Bytes, in Rust nur 36 – ein Offset-Fehler, der zu endlos drehenden GPU-Threads führen kann. Statt manueller Prüfungen vergleicht ein generischer Checker per Laufzeitreflexion die Structs von Rust und WGSL. Die Tests laufen nur bei Bedarf und ergänzen bestehende Tools wie wgsl_to_wgpu.

In WGSL hat jede Zeile einer mat3x3 4 Bytes Padding, sodass jede Zeile insgesamt 16 Bytes belegt und die gesamte Matrix 48 Bytes groß ist. In Rust ist ein [[f32; 3]; 3]-Objekt dicht gepackt und belegt daher nur 36 Bytes.

Mehr von diesem Tag

2026-09-30