做(未使用)GLSL制服/进/出有助于注册压力吗?

时间:2012-08-27 20:18:48

标签: glsl

我不知道校服是如何在记忆中表现的。

制服似乎可以占用宝贵的登记空间,但它们最终会进入/通过/进入全球记忆,对吗?

当制服未使用时情况是否会改变?编译器可以优化它们吗? - 在这种情况下,我将无效(-1)作为绑定位置,所以我假设是。

2 个答案:

答案 0 :(得分:3)

制服以GLSL编译器和OpenGL实现认为合适的任何方式表示。一些实现使得组件内的某些制服实际常量,使得改变制服实际上是原位修补组件。有些人对制服有特殊的记忆。

这完全取决于硬件。

编制者可以优化制服;这就是“活跃制服”这个词的来源。用于查询统一信息的OpenGL API仅适用于活动制服:实际检测到编译器正在使用的制服。

答案 1 :(得分:2)

首先,GLSL规范没有说明它的概念的实际实现,所以下面的详细说明当然应该被解读为“可能是任何方式,但现在通常都是这样”。

关于图形硬件的我(可能是有限的)知识,制服通常存在于所谓的常量存储器中,这是全局设备存储器的一部分(并且甚至可以缓存更新的硬件),因为它们无法更改无论如何,通过着色器程序,并且对程序的所有调用都是全局的(可以并且应该并行运行在不同的多处理器上)。因此,它们本身不会占用任何多处理器寄存器空间。

你也是对的,因为GLSL编译器可以(并且通常会)优化掉任何未使用的制服(以及属性),但前提是当它们没有用于任何可能的执行分支时。因此,获得-1统一位置的经历是完全有效的(并且通常是期望的)行为。