用 Facet 自动检测 WebGPU 数据布局
Testing WebGPU data layouts with Facet
在开发 GPU 计算着色器时,Rust 和 WGSL 的数据布局规则差异常导致难以察觉的 bug,甚至引发 GPU 死锁。我通过手动对比发现矩阵填充导致的偏移量错误,随后决定利用 Facet 库的运行时反射能力,构建了一套通用的单元测试框架。这套方案能自动验证 Rust 结构体与 WGSL 结构体的字段偏移及大小是否一致,完美处理了运行时数组等复杂情况。现在,只需在测试中为结构体添加 Facet 派生,就能轻松确保所有配置数据的正确性,让 GPU 编程更加安心。
不幸的是,我正在编写在计算着色器中运行的字节码虚拟机,而它们的故障模式通常是:恭喜,你的 GPU 现在有了持续旋转的线程,只能通过重启电脑来终止。