Rust и WebGPU не сходятся в размерах: как Facet спасает от зависших потоков GPU
Testing WebGPU data layouts with Facet
При работе с вычислительными шейдерами WebGPU данные конфигурации часто передаются из Rust в буферы, но правила выравнивания в WGSL и Rust различаются. Например, mat3x3 в WGSL занимает 48 байт из-за паддинга, а в Rust — всего 36. Автор показывает, как с помощью рантайм-рефлексии Facet автоматически сверять смещения и размеры полей, чтобы избежать ошибок, приводящих к зависанию GPU, которое лечится только перезагрузкой.
Их режим отказа часто звучит так: «поздравляем, теперь у вашего GPU есть постоянно крутящиеся потоки, которые можно убить только перезагрузкой компьютера».