glsl - =疯狂优化

时间:2014-02-22 18:46:39

标签: opengl glsl

有关GLSL MAD(“乘法和加法”)优化的问题。

根据这个http://www.opengl.org/wiki/GLSL_Optimizations,我们应该帮助GLSL编译器优化疯狂表达式。

让我很清楚
result += x*y 

应该看起来像:

result = x*y + result

但该怎么办 - =?

result -= x*y

如果我写道:

result = result - x*y

这不会“倍增并添加”
如果:

result = -x*y + result

它是否优化了它?我担心因为 -x

只想向自己澄清这件事。

2 个答案:

答案 0 :(得分:2)

很难猜出特定编译器/优化器在任何特定情况下会做什么。使用GLSL,您可能会遇到许多不同的实现(及其版本)。

一般来说,我希望result += x*y永远不会导致另一个优化结果而不是result = result + x*y - 它毕竟只是语法糖而不是一些不同的操作。

如果你想看看一些编译器为你的代码做了什么,我建议你看一下AMD's shader analyzer,它会告诉你编译器的结果。此外,您可以使用nvidia's command line compiler中的CG toolkit,{{3}}也可以编译GLSL。它只会输出ARB汇编级顶点/片段程序,而不会显示真正的指令级代码,但它仍然可以让你看到优化器从你的GLSL结构中创建MAD的位置。

答案 1 :(得分:2)

只是添加另一个资源: http://www.humus.name/Articles/Persson_LowLevelThinking.pdf 对于可以将编译器引导到更优化的代码的方法来说,这是一个很好的尝试。

建议不是glsl特定的,但是当我看到你的问题时我想到了它,因为他确实强调你应该编写一个很有可能逐渐深入到MAD指令的代码。