#glsl #webrender #branch #translator #back-end #compiler #vector

bin+lib azul-glsl-to-cxx

GLSL 到 C++ 编译器

1 个不稳定版本

0.1.0 2021年7月11日

683编程语言

MPL-2.0 许可证

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