Gre*_* K. 5 opengl shader glsl
最近我得到了一些
错误 C6020:变量超出常量寄存器限制;编译程序需要超过1024个寄存器
在编译 GLSL 顶点着色器期间出现错误,可能是因为统一变量的数量,我试图找出一种方法来估计/计算基于我定义的统一着色器所需的寄存器数量。是否有任何指南或规则?
例如,我假设大小达到 vec4 的变量需要 1 个寄存器而 mat4 需要 4 个寄存器是否正确?是否有任何规则可用于此目的?
对于任何这样的估计来说,图形硬件实在是太多样化了。即使你看似简单的假设:
大小达到 vec4 的变量需要 1 个寄存器,而 mat4 需要 4 个寄存器?
这在许多现代硬件上是不正确的。以前是这样,但那是几年前的事了。特别是当你谈论的是个体uniform变量时;编译器可以用它们玩各种游戏。
甚至没有一种精确的方法来估计一段 GLSL 代码消耗的此类资源的数量。您可以计算代码使用的统一组件的数量,但这是因为 OpenGL 告诉您如何执行此操作。除此之外,你无能为力。