著色器可見描述元堆積
著色器可見描述元堆積,是可透過描述元數據表由著色器參考的描述元堆積。
概述
著色器可透過描述元數據表參考的描述元堆積有幾種:一個堆積類型,D3D12_SRV_UAV_CBV_DESCRIPTOR_HEAP,可以保存著色器資源檢視、未排序的存取檢視,以及常數緩衝區檢視,全部混用。 堆積中的任何指定位置都可以是其中一個列出的描述元類型。 另一個堆積類型D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER只會儲存取樣器,反映大部分硬體的取樣器,取樣器會與 SRV、UAV、CBV 分開管理。
當建立堆積時,可能會要求這些類型的描述元堆積為著色器可見或不可見(後者 – 非著色器可見 - 對 CPU 上的預備描述符很有用)。 當要求顯示著色器時,上述每個堆積類型可能會有任何個別描述元堆積配置的硬體大小限制。
應用程式可以建立任意數目的描述元堆積,而且非著色器可見描述元堆積的大小不受限制。 如果應用程式所建立的著色器可見描述元堆積小於硬體大小限制,驅動程式可以選擇將描述元堆積從較大的基礎描述元堆積中細分,讓多個 API 描述元堆積符合一個硬體描述元堆積。 發生這種情況的原因是,在某些硬體中,在執行期間在硬體描述元堆積之間切換需要 GPU 等候閑置(以確保已完成先前描述元堆積的 GPU 參考)。 如果應用程式建立的所有描述項堆積都符合適用硬體堆積的最大容量,則在轉譯期間切換 API 描述元堆積時不會發生這類等候。 不過,應用程式必須允許切換目前描述元堆積可能會造成等候閑置的可能性。
為了避免因為這個可能的等待在描述元堆積交換器上閑置而受到影響,應用程式可以利用轉譯中斷,導致 GPU 因為有時間進行描述元堆積交換器,因為無論如何都會等待閑置。
API 參考會說明在命令清單/套件組合錄製期間,識別著色器堆積的機制和語意。
範例
下圖顯示兩個描述元堆積,參考兩個不同的 2D 紋理,這些紋理會儲存在大型預設堆積的兩個位置中。 圖形管線可以存取著色器可見的描述元堆積(包括著色器),因此管線可以使用 2D 紋理。
注意
描述項堆積的 GPU 本機記憶體數量通常會限制 GPU 硬體(稱為寫入合併記憶體) 的 GPU 本機記憶體數量。 一般而言,對於所有進程而言,此限制約為96MB。 例如,具有 32 位元組描述元的 1 百萬個成員描述元堆積會用到 32 MB。 驅動程式會視需要回復系統記憶體,不過最好不要建立大量的大型描述元堆積。
相關主題