Direct3D 版本 11 的管線

本節僅適用于 Windows 7 和更新版本,以及 Windows Server 2008 R2 和更新版本的 Windows 作業系統。

Direct3D 第 11 版的圖形轉譯 管線會從 Direct3D 第 10 版的圖形轉譯管線擴充。 除了 Direct3D 第 10 版支援的共用可程式化著色器核心之外,Direct3D 第 11 版也支援殼層、網域和計算著色器核心。

Direct3D 11 版實際上支援兩個不同的管線:繪製管線 (圖形轉譯管線) 和分派管線 (計算著色器管線) 。 繪製和分派管線在技術上是鬆散連線的,也就是說,您無法同時在兩個管線中撰寫相同的子資源系結,或系結在一個管線中寫入,以及在另一個管線中讀取。

下圖顯示 Direct3D 第 11 版繪製管線的功能區塊。

說明 Direct3D 第 11 版繪製管線功能區塊的圖表。

下圖顯示 Direct3D 第 11 版分派管線的功能區塊。

說明 Direct3D 11 版分派管線功能區塊的圖表。

下列各節說明上圖所示的 new-for-Direct3D 11 區塊。

輪廓著色器

每個修補程式的殼層著色器會運作一次。 您可以使用殼層著色器搭配輸入組合器的修補程式。 殼層著色器可以將構成修補程式的輸入控制點轉換成輸出控制點。 殼層著色器可以針對固定函數鑲嵌器階段執行其他設定。 例如,殼層著色器可以輸出 tess 因數,也就是指出要選取多少數位的數位。

Direct3D 執行時間會呼叫下列驅動程式函式,以建立、設定及終結殼層著色器:

鑲嵌式

鑲嵌器是固定函數單位,其作業是由殼層著色器中的宣告所定義。 鑲嵌器會針對殼層著色器所輸出的每個修補程式運作一次。 殼層著色器會產生 tess 因素,這些因素會通知鑲嵌器 (在修補程式網域上產生幾何和連線能力) 。

Direct3D 執行時間會呼叫驅動程式的 CalcPrivateTessellationShaderSize 函式,以計算殼層或網域著色器的記憶體區域大小。

網域著色器

每個頂點都會叫用定義域著色器一次,由鑲嵌器產生。 每個調用都是透過泛型定義域上的座標來識別。 網域著色器的角色是將該座標轉換成有形 (,例如 3D 空間中的點) ,以使用網域著色器的下流。 修補程式的每個網域著色器調用也會存取所有殼層著色器輸出 (的共用輸入,例如輸出控制點) 。

Direct3D 執行時間會呼叫下列驅動程式函式,以建立、設定及終結網域著色器:

計算著色器

計算著色器可讓 GPU 檢視為數據平行處理器的一般格線,而不需要繪製管線中的任何圖形。 計算著色器可明確存取快速共用記憶體,以加速著色器調用群組之間的通訊。 計算著色器也能夠執行散佈讀取和寫入記憶體。 不可部分完成作業可用性可讓共用記憶體位址的唯一存取權。 計算著色器不是繪製管線的一部分。 計算著色器會自行存在。 不過,計算著色器存在於與所有其他著色器階段相同的裝置上。 Direct3D 執行時間會呼叫驅動程式的 DispatchXxx 函式,而不是驅動程式的 DrawXxx 函式來叫用計算著色器。

Direct3D 執行時間會呼叫下列驅動程式函式,以建立、設定及終結計算著色器:

未排序的存取資源檢視

未排序的存取資源檢視是可系結至計算著色器或圖元著色器的讀取/寫入資源。 未排序存取資源檢視的系結類似于如何將著色器資源檢視系結至任何著色器階段,也就是唯讀資源。

Direct3D 執行時間會呼叫下列驅動程式函式,以建立、設定及終結未排序的存取資源檢視: