opengl - 估计 GLSL 着色器所需的寄存器数量

标签 opengl glsl shader

最近我得到了一些

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/

相关文章:

java - 使用 glVertexAttribPointer 和 glDrawElements 从打包的顶点缓冲区中绘制

c++ - 什么是 Regal OpenGL?

opengl - alpha 不使用 glsl 着色器改变对象的透明度

c++ - OpenGl 4,GL_ARRAY_BUFFER 没有正确发送法线数据

c++ - 如何将大小变化结构的数组传递给 glsl 着色器

android - fragment 着色器似乎不准确地 floor()

opengl-es - OpenGL ES 2 : Are vertex and fragment shaders necessary for simple drawing?

opengl - SFML::View inverted-y 轴是标准的吗?如何解决它?

c++ - glm glx 旋转不起作用

opengl - 在尝试加载 OpenGL 扩展之前查询它们有什么意义?