最近我得到了一些
error C6020: Constant register limit exceeded at variable; more than 1024 registers needed to compile program
在编译 GLSL 顶点着色器期间出现错误,可能是因为统一变量的数量,我试图找出一种方法来估计/计算基于我定义的统一着色器中所需的寄存器数量。是否有任何指南或规则?
例如,我假设大小达到 vec4 的变量需要 1 个寄存器而 mat4 需要 4 个寄存器是否正确?
是否有任何规则可用于此目的?
最佳答案
图形硬件对于任何此类估计而言都过于多样化。甚至你看似简单的假设:
variables up to vec4 in size require 1 register and mat4 require 4 registers?
这在许多现代硬件上是不正确的。以前是这样,但那是几年前的事了。特别是如果你在谈论个人
uniform
变量;编译器可以用它们玩各种游戏。甚至没有远程准确的方法来估计一段 GLSL 代码消耗的此类资源的数量。您可以计算您的代码使用的统一组件的数量,但这是因为 OpenGL 会告诉您如何去做。除此之外,你无能为力。
关于opengl - 估计 GLSL 着色器所需的寄存器数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51781227/