1 个不稳定版本
0.1.0 | 2021年7月11日 |
---|
683 在 编程语言
275KB
7.5K SLoC
一个 GLSL 到 C++ 的转换器。
将 GLSL 转换为向量化的 C++。旨在与 WebRender 软件后端一起使用。
架构
GLSL 代码由 glsl crate 解析。在 hir.rs 中,我们遍历生成的 AST 并通过类型检查和命名解析构建高级表示。通过 lib.rs 遍历生成的 hir 树以输出 C++ 代码。
生成的 C++ 代码是原始 glsl 的 4 倍宽。例如,glsl 的 'float' 变为 C++ 的 'Float',它由一个 xmm 寄存器(一个 4 个浮点数的向量)表示。同样,vec4 变成 4 个 'Float' 的结构体,总共有 4 个 xmm 寄存器和 16 个浮点值。
向量分支被简化为无条件运行分支两边的非分支代码,并基于条件通过掩码合并结果。
编译器还支持标量化。已知在所有向量通道中值相同的数据将被转换为标量而不是向量。标量的分支将被转换为实际的分支。
依赖项
~1.5MB
~26K SLoC