glsl_optimizer(Shader自动优化器) 的使用

简介: glsl_optimizer(Shader自动优化器) 的使用

参考自:http://goldlion.blog.51cto.com/4127613/1542254?utm_source=tuicool&utm_medium=referral




glsl_optimizer 是一个免费开源的glsl优化器。可以生成GPU无关的shader优化代码。




可以进行非常多的优化项目,比如 函数内联,死代码删除,常量折叠,常量传递,数学优化等等。


GitHub地址(在 projects 目录下已经有生成好的工程文件)



其命令行格式为:


Usage: glsloptimizerCL -in <inputfilename> -out <outputfilename> [-profile <shadertype> ] [-help]



-in 输入的文件名.

-out 输出的文件名 (如果优化成功)

-说明优化的shader类型:GL_VERTEX_SHADER (默认) 或 GL_FRAGMENT_SHADER.

-help 显示帮助信息




值得注意的是,在main.cpp中 有一行代码:

ctx = glslopt_initialize(true)

函数的原型为

glslopt_ctx* glslopt_initialize (bool openglES);

显然它默认是当做 GL ES 来优化的,如果想针对 GL 优化,需要将参数改为 false。


最后,举个使用的栗子:

./glsl_optimizer_bin -in vertex.glsl -out vertex.glsl -profile GL_VERTEX_SHADER
./glsl_optimizer_bin -in fragment.glsl -out fragment.glsl -profile GL_FRAGMENT_SHADER

奏四介么简单!

20170119191900994.gif

目录
相关文章
|
3月前
|
存储 缓存 openCL
MNN Session 之 Vulkan 算子(八)
MNN Session 之 Vulkan 算子(八)
39 2
|
3月前
MNN Session 之几何计算(六)
MNN Session 之几何计算(六)
28 6
|
6月前
|
机器学习/深度学习 5G 知识图谱
视觉Backbone怎么使用1/8的FLOPs实现比Baseline更高的精度?
视觉Backbone怎么使用1/8的FLOPs实现比Baseline更高的精度?
68 0
|
存储 图形学
浅谈Unity之模型裁剪shader
Unity之模型裁剪shader
|
存储 机器学习/深度学习 编解码
目标检测的Tricks | 【Trick2】自动混合精度(Automatic mixed precision)
目标检测的Tricks | 【Trick2】自动混合精度(Automatic mixed precision)
312 0
|
图形学
【Unity3D Shader】学习笔记-纹理采样②
前言 上一篇对同一纹理进行多次采样混合,本篇则是通过不同的纹理采样进行混合产生一些效果。 一、简单贴花 贴花简单来说就是在原贴图上面贴上细节贴图,就像墙面上的喷绘一样。下面这个只是最简单的例子,也就是只能在一张图(一个模型)上面贴其他细节。
283 0
【Unity3D Shader】学习笔记-纹理采样②
|
图形学
【Unity3D Shader】学习笔记-纹理采样①
前言 纹理采样属于在片段着色器中进行,通过提供的贴图和uv坐标使用tex2D进行采样。本篇主要介绍对同一纹理多次采样然后进行混合来获得不同的效果。 [声明:本笔记系列文章的图片资源都源自百度图片搜索,如有问题联系我] 一、简单重影 对同一纹理进行两次采样,采样时的UV两次坐标不一样,然后将采样的结果进行取平均得到最终的结果。
566 0
【Unity3D Shader】学习笔记-纹理采样①
|
存储 缓存 并行计算
使用计算着色器(Compute Shader)模拟粒子效果【OpenGL】【GLSL】
使用计算着色器(Compute Shader)模拟粒子效果【OpenGL】【GLSL】
897 0
使用计算着色器(Compute Shader)模拟粒子效果【OpenGL】【GLSL】
|
Serverless
TiDB 源码学习:关于 Projection Pruning 的细节问题
查询优化器发现节点之间是 Proj/Aggr --> Proj 模式的时候(也就是某个 Proj 节点的祖先是 Proj或 Aggr 节点的时候),会考虑对子节点做 Projection Pruning 优化。 是否可以消除 Proj 节点的判断依据是:当前的 Proj 节点输出的列是否和其子节点的输出列一样。如果一样,则可以消除。 让我产生疑问的地方是判断输出列是否和子节点一样的代码逻辑,代码如下: func canProjectionBeEliminatedLoose(p *LogicalProjection) bool { for _, expr := range p.Ex
137 0