2014-08-29 75 views
3

比方說,我有nbFramesAnimation * 3周float4的Texture2D,我想通過我的GPU,以及:在紋理數組上使用TextureArray的性能優勢?

  • 我不需要紋理之間進行插值;
  • 紋理具有完全相同的尺寸;
  • 我不知道它是否相關,但我沒有任何mip-maps;

我使用那些紋理作爲我應用了一些後效應的G緩衝區。因此,我可能必須使用索引的非文字表達式訪問它們。此外,因爲我將它們用作G-Buffers,所以我必須經常加載它們。他們給我的位置和法線信息,這需要精確,以及UV + IndexObject(因此只使用4個浮點數中的3個)。至於現在,在每個幀渲染,我用SetResource單獨加載三個紋理。它非常慢並且遠離實時。

我想知道如果:

  • 它是更有效的具有Texture2DArrays的陣列,每個Texture2dArray具有三個紋理(在我的情況),並且在每個幀通過一個Texture2DArray;
  • 還是與傳遞3個人的Texture2D相同?
  • 做nbFramesAnimation/X * 3紋理的多個Texture2DArrays並加載其中一個X幀是否更高效?

我也很感激任何有關如何進一步優化此傳輸的見解。

+1

紋理數組可能比三個單獨的紋理更快,但這很可能不是這個瓶頸,特別是如果其餘渲染確實「遠離實時」。如果有任何區別,我預計它會在每個綁定幾微秒左右。最終你最好的選擇是試驗每個選項和配置文件,看看是否有區別。 – MooseBoys 2014-08-29 22:23:18

回答

4

Texture2DArray s被引入來簡化多個紋理的綁定,並且類似的目的聚集在一起,但並不像一個體積那樣代表整體(換句話說,不需要三線性插值)。深度索引用於訪問數組的不同部分。

就像C++(或任何其他天空下的語言)中的數組的概念一樣,其目的是允許動態索引,這對於多個單獨的語言來說是不可能的。性能方面的考慮並沒有超出將元素綁定到管道的成本,這只是一個方便的問題,並沒有束縛綁定點。

在DirectX 12中,最後一個考慮因素已經被刪除,引入了bindless模型和像描述符堆這樣的東西,其中可以通過預先計算的根簽名映射到着色器周圍幾乎任何資源。此外,HLSL Shader Model 5.1引入了「無限」描述符範圍和動態索引。好玩的東西。

無論如何,不​​要太擔心兩者之間的表現。擔心你的工作的優雅。如果一起工作,並且您的設計需要在某個時間對其進行抽樣,請將它們分組在Texture2DArray之內。

相關問題