
Mesh Shader
Mesh Shader (MS) 本質上是計算著色器,具備階段專屬的內建函式,可將頂點、索引和基本型別資料匯出至基本型別組合器。所有資料都必須在著色器程式碼中從常數緩衝區檢視 (CBV) 和著色器資源檢視 (SRV) 明確擷取。 這表示開發人員需要調整對繪製呼叫的看法,使其更符合計算著色器的工作流程。著色器作者決定執行緒群組大小,以及如何使用每個執行緒來完成工作負載。他們可以存取著色器 wave 內建函式和 groupshared 記憶體,以共用資料並有效率地建置要點陣化的基本型別清單。 圖 2. 在繫結僅含 Mesh Shader 的管線時,從 DispatchMesh(4, 1, 1) 呼叫分派之 GPU 工作的視覺化呈現。與計算著色器一樣,DispatchMesh 需要 x、y 和 z 維度中的執行緒群組數量。這會分派指定數量的 Mesh Shader 執行緒群組來執行。
Amplification Shader
Amplification Shader (AS) 是位於 Mesh Shader 階段之前的選擇性階段。此階段同樣類似計算著色器,能夠動態分派一組 Mesh Shader 執行緒群組。每個執行緒群組會計算自己要分派的 Mesh Shader 執行緒群組數量。每個執行緒群組也包含最多 16 KB 的共用自訂承載資料,以傳遞給其產生的 Mesh Shader 執行緒群組。此資料可以直接從 groupshared 記憶體匯出。 Amplification Shader 的功能讓著色器程式能根據自訂準則動態減少或放大其工作負載。這開啟了有效率、較低細微度的剔除或自訂鑲嵌的可能性。 圖 3. 分派 AS-MS 管線狀態 (PS) 物件的視覺化呈現。有些 AS 執行緒群組會選擇分派 MS 執行緒群組。其他執行緒群組可能完全不分派。
