根簽章限制

根簽章是主要房地產,而且需要考慮嚴格的限制和成本。

記憶體限制和成本

根簽章的大小上限為 64 DWORD。

系統會選擇此大小上限,以防止濫用根簽章作為儲存大量資料的方式。 根簽章中的每個專案都有此 64 DWORD 限制的成本:

  • 描述中繼資料表各成本為 1 DWORD。
  • 根常數各成本為 1 DWORD,因為它們是 32 位值。
  • 根描述元 (64 位 GPU 虛擬位址,) 每個位址的成本為 2 DWORD。

靜態取樣器在根簽章的大小中沒有任何成本。

效能成本

就間接) 層級而言,效能成本 (為零的根常數、根描述元為 1,而描述項資料表則為 2。 如果根簽章很大,且記憶體超出最快速的記憶體, (可能會在某些硬體) 發生,請將 1 新增至根簽章結尾溢位專案的效能成本。

例如,根引數空間的固定大小為 16 DWORD 的硬體上可能會發生溢位。 如果使用輸入組合器,此限制可能會進一步減少一。 在此情況下,如果根簽章對 15 或 16 個 DWORD 原生記憶體太大,記憶體會稍微變慢。 在其他硬體中,沒有固定的原生根引數記憶體 (,因此永遠不會) 發生溢位情況。

對於所有硬體,如果有任何根引數變更,驅動程式必須維護所有根引數的版本, (與其他儲存體不同,例如描述元堆積和緩衝區資源,這些儲存體不是由驅動程式) 版本。 在發生溢位情況的硬體中,只有原生或溢位區域需要進行版本設定,視發生變更的位置而定。 版本控制的數量應該明顯保持在必要的最小值。

一般而言,請考慮下列指導方針:

  • 視需要使用小型根簽章,但請平衡這點與較大根簽章的彈性。
  • 在大型根簽章中排列參數,讓參數最有可能經常變更,或如果給定參數的低存取延遲很重要,請先發生。
  • 如果方便,請透過將常數緩衝區檢視放在描述元堆積中,使用根常數或根常數緩衝區檢視。

靜態取樣器

靜態取樣器 (取樣器,其中狀態已完整定義,且不可變) 是根簽章的一部分,但不會計入 64 DWORD 限制。 如果取樣器可以定義為靜態,則不需要取樣器成為描述元堆積的一部分。

使用靜態取樣器沒有效能成本,而根簽章可以包含靜態取樣器混合 (儲存在根簽章中,或儲存在某些硬體) 和動態取樣器 (儲存在取樣器描述元堆積) 的保留空間中。 描述元堆積中的取樣器可以動態指派和編制索引,靜態取樣器無法進行索引。

靜態取樣器可以在 HLSL 著色器中撰寫為根簽章的一部分, (請參閱 在 HLSL) 中指定根簽章

根簽章