具有 Direct3D 12 的管線和著色器
相較於上一代圖形程序設計介面,Direct3D 12 可程式化管線大幅提升轉譯效能。
Direct3D 12 圖形管線
下圖說明 Direct3D 12 圖形管線和狀態。
說明 direct3d 12 管線和狀態圖表
圖形管線是當 GPU 轉譯畫面格時,數據輸入和輸出的循序流程。 假設管線狀態和輸入,GPU 會執行一系列作業來建立產生的映像。 圖形管線包含著色器,可執行可程式化轉譯效果和計算,以及固定函式作業。
在參考管線狀態圖時,請注意下列事項:
- 描述項數據表和堆積可以任意排列:SRV、CBV 和 UAV 可以依任何順序參考和配置。
- 管線的某些作業可設定。 例如,輸出合併通常會以讀取-修改寫入為基礎,使用轉譯目標和深度樣板檢視。 不過,您可以設定管線,讓其中一個檢視都是只讀或只讀的。
- 靜態取樣器不是根自變數的一部分,因為它們是靜態的。
管線狀態物件
Direct3D 12 引進管線狀態物件 (PSO)。 管線元件的狀態,例如輸入組合器、轉譯器、圖元著色器和輸出合併,而不是跨大量高階物件儲存和代表管線狀態。 PSO 是建立后不可變的整合管線狀態物件。 目前選取的 PSO 可以快速且動態地變更,而硬體和驅動程式可以直接將 PSO 轉換成原生硬體指示和狀態,讓 GPU 準備好進行圖形處理。 若要套用 PSO,硬體會將最少的預先計算狀態直接複製到硬體快取器。 這會根據目前所有適用的轉譯和管線設定,移除圖形驅動程序持續重新計算硬體狀態所造成的額外負荷。 結果可大幅降低繪製呼叫額外負荷、提高效能,以及每個畫面的繪製呼叫更多。
目前套用的 PSO 會定義並連接轉譯管線中使用的所有著色器。 Microsoft高階著色器語言 (HLSL) 會預先編譯成著色器對象,然後在運行時間使用作為管線狀態對象的輸入。 如需有關 PSO 如何在圖形管線內運作的詳細資訊,請參閱 在 Direct3D 12中管理圖形管線狀態。
Direct3D 12 計算管線
下圖說明 Direct3D 12 計算管線和狀態。
此管線中沒有固定函式單位,不過仍可在計算中使用描述項堆積、取樣器堆積和靜態取樣器。
相關主題
-
Direct3D 12 中的 工作提交