我有一个用于着色器资源的管理系统,它自动为我的所有着色器生成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
答案 0 :(得分:1)
在DX11中,您可以创建数千个SRV。但是,您可以将128个这些绑定到每个着色器阶段。只要每个阶段不使用超过128个SRV并且在HLSL代码中正确地对它们进行索引,那么你就是好的。另请查看MSDN上的Direct3D 11 Resource Limits。