假设我有nbFramesAnimation * 3 float4 Texture2D我想传递给我的GPU,并且:
我将这些纹理用作G缓冲区,在上面应用了一些后期效果。因此,我可能必须使用非文字形式的索引来访问它们。此外,因为我将它们用作G缓冲区,所以必须经常加载它们。它们为我提供了需要精确定位的位置和法线信息,以及UV + IndexObject(因此实际上仅使用了4个浮点中的3个)。
到目前为止,在每个帧渲染时,我都使用SetResource分别加载三个纹理。它非常慢,而且与实时性相差甚远。
我想知道是否:
我也希望对如何进一步优化此转移有任何见解。
Texture2DArray
引入s是为了简化具有相同目的的多个纹理的绑定,这些纹理在一起但不表示整体(如体积)(换句话说,不需要三线性插值)。深度索引用于访问数组的不同部分。
就像使用C ++(或空中其他语言)中的数组的概念一样,其目的是允许动态索引,而使用多个单独的索引则无法实现。性能方面的考虑并不超出将元素绑定到管道的成本,这是方便的问题,并且不要占用绑定点。
使用DirectX 12时,引入了无绑定模型和诸如描述符堆之类的东西,从而消除了最后一个考虑因素,在其中可以通过预先计算的根签名交换一吨的吨几乎所有资源映射到着色器。HLSL Shader Model 5.1还引入了“无限”描述符范围和动态索引。好玩的东西。
无论如何,不要太担心两者之间的性能。担心工作的优雅。如果将所有东西放在一起,并且您的设计需要在某个时间对所有它们进行采样,则将它们分组在内Texture2DArray
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句