Un test unitario revela un error de alineación en WebGPU que puede colgar tu GPU

Testing WebGPU data layouts with Facet

Matt Keeter explica cómo un test unitario detectó que una estructura de datos compartida entre Rust y WGSL tenía offsets distintos: en WGSL, mat3x3 ocupa 48 bytes por el padding, mientras que en Rust solo 36. Usando la reflexión en tiempo de ejecución de Facet, escribe un verificador genérico que compara automáticamente los layouts de Rust y WGSL, evitando fallos catastróficos en shaders de cómputo.

En WGSL, cada fila de un mat3x3 tiene 4 bytes de padding, por lo que cada fila ocupa 16 bytes en total y la matriz completa son 48 bytes. En Rust, un objeto [[f32; 3]; 3] está empaquetado de forma compacta y por lo tanto ocupa solo 36 bytes.

Más de este día

2026-09-30