我有一个用于我的着色器资源的管理系统,它自动为我的所有着色器生成HLSL头代码,如下所示:
Texture2DArray <float4> MyTextureArray1 : register(t0)
Texture2DArray <float4> MyTextureArray2 : register(t1)
Texture2DArray <float4> MyTextureArray3 : register(t2)
Texture2DArray <float4> MyTextureArray4 : register(t3)管理系统还会在创建时自动创建和绑定所有着色器资源视图。显然,我的着色器可能使用这些纹理中的1或2个,但我总是把它们绑定在一起。有人能推测我是否最好只绑定我目前需要的SRV,并在每次绑定着色器时清除其他的SRV,还是最好在创建时绑定所有的SRV,再也不碰它们?虽然我目前没有使用资源,但我还没有找到多少文档来说明保持资源绑定的开销。
另外,在我的一些项目中,由于不同的格式、纹理尺寸和用法,我有30到40个SRV。
哪种更好些呢?
1)绑定所有128,从不更改绑定
2)在更改着色器时根据需要绑定和解除SRV
发布于 2014-10-15 12:28:08
在DX11中,您可以创建数千个SRV。然而,您可以绑定128到每个着色阶段。只要您每个阶段不使用超过128个SRV,并且在HLSL代码中正确地索引它们,那么您就很好了。还请看一下MSDN上的Direct3D 11资源限制。
https://stackoverflow.com/questions/26345888
复制相似问题