首页 > 解决方案 > 有没有办法运行 mesa 编译器来减小着色器文件的大小?

问题描述

作为其编译过程的一部分,台面驱动程序会减小 glsl 着色器文件的大小。

一些库,比如这个,使用这个事实来创建着色器缩小库。我发现的所有缩小库都是废弃软件,因此,除非 mesa 具有直接获取中间 glsl 文件的功能,否则我可能必须像这些库那样编辑实际代码。

我想知道台面代码库中是否有可执行文件可用于进行剥离而无需编辑代码。

我尝试阅读官方台面文档,但我没有任何建议: https ://www.mesa3d.org/opengles.html

标签: openglgraphicsopengl-esglsl

解决方案


“缩小”与优化不同。通常,该术语用于描述以文本形式获取源文件并删除所有多余空格并将所有标识符替换为较短标识符的过程。

严格来说,缩小的整个想法是愚蠢的,因为它对性能的影响为零;对代码进行词法分析和编译结果都不受它的影响。整个缩小doofus从web开发开始,以减少网页资源大小;完全没有价值,因为如果你只用 gzip 或类似的压缩文本,你会得到更好的性能。哎呀,压缩原始版本和缩小版本的大小可能彼此相差几个字节。

如果您真的担心着色器作为资源的大小,只需压缩它(但请注意解压缩代码的开销)。编辑:但是,如果您的目标是 WebGL,则使用 HTTP 传输 gzip 压缩。相关的浏览器确实支持这一切,并且大多数 HTTP 服务器可以配置为透明地提供补充.gz后缀文件(或进行压缩并动态缓存它)。

对于优化,您应该查看 Khronos 的其他产品。特别是 GLSL 到 SPIR-V 编译器glslc、SPIR-V 优化器spirv-opt和 SPIR-V 反编译器spirv-cross。您可以将它们链接起来以创建优化的、“简化的”GLSL。

glslc --target-env=opengl -fshader-stage=... -o ${FILE}.spv ${FILE}
spirv-opt -Os -o ${FILE}.spv.opt ${FILE}.spv
spirv-cross --output ${FILE}.opt ${FILE}.spv.opt

由于 SPIR-V 工具是官方 Vulkan SDK 的一部分,并且 SPIR-V 也是由 OpenGL-4.6 直接加载的有效着色器格式(而不仅仅是 GLSL 源),因此您可以睡个好觉,这些工具维护得很好,将来也会如此。


推荐阅读