Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(未使用的)GLSL制服/输入/输出是否有助于调节压力?_Glsl - Fatal编程技术网

(未使用的)GLSL制服/输入/输出是否有助于调节压力?

(未使用的)GLSL制服/输入/输出是否有助于调节压力?,glsl,Glsl,我不知道制服在记忆中是如何表现的 制服似乎可以占用宝贵的注册空间,但它们最终会传入/通过/传出全局内存,对吗 当制服不用时,情况会改变吗?编译器可以优化它们吗?--在这种情况下,作为绑定位置(-1)是无效的,所以我假设是。首先,GLSL规范没有说明它的概念的实际实现,所以下面的详细说明当然可以理解为“可能是任何方式,但现在通常是这样” 至于我对图形硬件的了解(可能有限),制服通常存在于所谓的常量内存中,这是全局设备内存的一部分(在较新的硬件上甚至应该缓存),因为它们无论如何都不能被着色器程序更改

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

制服似乎可以占用宝贵的注册空间,但它们最终会传入/通过/传出全局内存,对吗


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

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

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


当然,GLSL编译器可以(通常会)优化掉任何未使用的统一(以及属性),但前提是这些统一(以及属性)没有在任何可能的执行分支中使用。因此,获得
-1
的统一位置的经验是完全有效的(并且通常是需要的)行为。

制服在GLSL编译器和OpenGL实现认为合适的任何庄园中表示。有些实现使某些制服在程序集中成为实际常量,因此更改制服实际上是在原地修补程序集。有些实现具有制服的特殊内存

它完全依赖于硬件

允许编译器优化制服;这就是术语“活动制服”的来源。用于查询制服信息的OpenGL API仅适用于活动制服:编译器实际检测到正在使用的制服