有没有办法 运行 mesa 编译器减少着色器文件的大小?
Is there a way to run the mesa compiler to reduce the size of shader files?
作为编译过程的一部分,mesa 驱动程序减少了 glsl 着色器文件的大小。
一些库,例如 this one,利用这一事实来创建着色器缩小库。我发现的所有缩小库都是废弃软件,因此,除非 mesa 具有直接获取中间 glsl 文件的功能,否则我可能必须按照这些库的方式编辑实际代码。
我想知道 mesa 代码库中是否有一个可执行文件可用于执行剥离而无需编辑代码。
我尝试阅读官方 mesa 文档,但我没有任何建议:
https://www.mesa3d.org/opengles.html
"Minification" 与优化不同。通常,该术语用于描述一个过程,该过程采用文本形式的源文件并删除所有多余的空格并将所有标识符替换为较短的标识符。
严格来说,缩小整个想法是愚蠢的,因为它对性能的影响为零;对代码进行词法分析和编译结果都不受其影响。整个缩小 doofus 开始于 Web 开发以减少网页资源大小;完全没有价值,因为如果你只是用 gzip 或类似的压缩文本,你会得到更好的性能。压缩原始版本和缩小版本后的大小可能会相差几个字节。
如果您真的很在意着色器作为资源的大小,只需对其进行压缩(但要注意解压缩代码的开销)。 编辑:但是,如果您的目标是 WebGL,则使用 HTTP 传输 gzip 压缩。相关的浏览器都支持它,并且大多数 HTTP 服务器都可以配置为透明地传送一个补充 .gz
后缀文件(或者进行压缩并即时缓存)。
为了优化,您应该看看 Khronos 的其他产品。特别是 GLSL 到 SPIR-V 编译器 glslc
、SPIR-V 优化器 spirv-opt
和 SPIR-V 反编译器 spirv-cross
。您可以将它们链接起来以创建优化的 "reduced" 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 源)加载,您可以睡个好觉事实上,这些工具得到了很好的维护,将来也会如此。
作为编译过程的一部分,mesa 驱动程序减少了 glsl 着色器文件的大小。
一些库,例如 this one,利用这一事实来创建着色器缩小库。我发现的所有缩小库都是废弃软件,因此,除非 mesa 具有直接获取中间 glsl 文件的功能,否则我可能必须按照这些库的方式编辑实际代码。
我想知道 mesa 代码库中是否有一个可执行文件可用于执行剥离而无需编辑代码。
我尝试阅读官方 mesa 文档,但我没有任何建议: https://www.mesa3d.org/opengles.html
"Minification" 与优化不同。通常,该术语用于描述一个过程,该过程采用文本形式的源文件并删除所有多余的空格并将所有标识符替换为较短的标识符。
严格来说,缩小整个想法是愚蠢的,因为它对性能的影响为零;对代码进行词法分析和编译结果都不受其影响。整个缩小 doofus 开始于 Web 开发以减少网页资源大小;完全没有价值,因为如果你只是用 gzip 或类似的压缩文本,你会得到更好的性能。压缩原始版本和缩小版本后的大小可能会相差几个字节。
如果您真的很在意着色器作为资源的大小,只需对其进行压缩(但要注意解压缩代码的开销)。 编辑:但是,如果您的目标是 WebGL,则使用 HTTP 传输 gzip 压缩。相关的浏览器都支持它,并且大多数 HTTP 服务器都可以配置为透明地传送一个补充 .gz
后缀文件(或者进行压缩并即时缓存)。
为了优化,您应该看看 Khronos 的其他产品。特别是 GLSL 到 SPIR-V 编译器 glslc
、SPIR-V 优化器 spirv-opt
和 SPIR-V 反编译器 spirv-cross
。您可以将它们链接起来以创建优化的 "reduced" 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 源)加载,您可以睡个好觉事实上,这些工具得到了很好的维护,将来也会如此。