我想要优化我的着色器,我想知道uniform上的计算是如何被着色器处理的。 确切地说,我想知道是否应该在CPU上计算这些内容并将准备好的结果作为uniform发送,还是可以在着色器中计算而不会对性能造成重大损失。
例如,我有一个简单的着色器像这样:
uniform vec2 screenSize;
vec2 pixelSize = vec2(1.0, 1.0) / screenSize;
void main()
{
//... some code that is using pixelSize, for example for reading something from sampler2D
}
在每个OpenGL绘制调用中,例如对于全屏大小的四边形(后处理效果),着色器将计算多少次pixelSize
?
也许这取决于是顶点着色器还是片段着色器?
glslang
运行整个着色器程序并使用SPIRV-Tools进行优化,来检查所得到的SPIR-V?该SPIR-V将与最终在GPU上运行的内容相近,加上/减去特定管线状态配置允许的其他优化。 - genpfault