如何判断我的GLSL编译器是否优化了以下内容?

时间:2013-02-11 12:13:38

标签: opengl code-generation glsl shader compiler-optimization

我确信GLSL编译器会做很多优化。我想知道是否有一种方法(可能有一个GL调试上下文或某些扩展?)来获取给定GLSL源字符串的“优化版本”,就在它被翻译成不可智能的ASM之前直GPU机器代码。

采用以下示例:

vec3 fx_Noop (const in vec3 vCol) {
    return vCol;
}
vec3 fx_Tex2D (const in vec3 vCol) {
    return fx_Noop(texture(uni_Tex2D, var_Tex2D).rgb);
}

这里应该删除整个fx_Noop()定义及其所有调用,但更重要的是fx_Tex2D()应该像这样重写:

vec3 fx_Tex2D () {
    return texture(uni_Tex2D, var_Tex2D).rgb;
}

由于未使用vec3 vCol 中的 const。

现在我意识到每个GL驱动程序和GLSL实现的行为都不同。我仍然想在汇编/编译/链接之前深入研究驱动程序对给定GLSL源字符串的作用。

我也意识到GLSL编码器不应该编写如上所述的代码,但是在一个有点实验性的代码生成场景中,当可以安全地进行某些权衡时,事情会得到很多简化,因为大多数编译器/实现都会适用无论如何都要好好清洗......

1 个答案:

答案 0 :(得分:3)

不,如果不分析不同的着色器,就无法确定某种方式。