首页 > 解决方案 > 估计 GLSL 着色器所需的寄存器数量

问题描述

最近我得到一些

错误 C6020:变量超出常量寄存器限制;编译程序需要超过 1024 个寄存器

在编译 GLSL 顶点着色器期间出现错误,可能是因为统一变量的数量,我试图找出一种方法来根据我定义的统一估计/计算着色器中所需的寄存器数量。有什么指南或规则吗?

例如,假设变量大小达到 vec4 需要 1 个寄存器,而 mat4 需要 4 个寄存器,我是否正确?为此目的有什么规则吗?

标签: openglglslshader

解决方案


图形硬件对于任何这样的估计来说都太多样化了。即使是您看似简单的假设:

最大 vec4 的变量需要 1 个寄存器,而 mat4 需要 4 个寄存器?

这在许多现代硬件上是不正确的。曾经是,但那是几年前的事了。尤其是当您谈论单个uniform变量时;编译器可以和他们玩各种游戏。

甚至没有精确的方法来估计一段 GLSL 代码消耗的此类资源的数量。您可以计算代码使用的统一组件的数量,但那是因为 OpenGL 会告诉您如何去做。除此之外,你无能为力。


推荐阅读