幾何著色器階段

幾何著色器 (GS) 階段會以頂點作為輸入來執行應用程式指定的著色器程式碼,而且可以在輸出上產生頂點。 不同于頂點著色器, 在單一頂點上運作,幾何著色器的輸入是完整基本 (的頂點,也就是三角形的兩個頂點、三角形的三個頂點,或一個點頂點) 加上邊緣相鄰 (基本專案的頂點資料,也就是線條的額外兩個頂點,或三角形) 的額外三個頂點。 下圖顯示輸入幾何著色器的基本類型範例。

顯示幾何著色器輸入基本類型範例的圖表。

幾何著色器的另一個輸入是輸入組合器自動產生的基本識別碼, (IA) 。 基本識別碼可讓幾何著色器在必要時擷取或計算每個臉部資料。

幾何著色器階段可以輸出多個頂點,以形成單一選取的拓撲。 可用的 GS 輸出拓撲包括 tristriplinetrippointlist。 幾何著色器發出的基本類型數目可能會有所不同,不過幾何著色器可以發出的最大頂點數目必須以靜態方式宣告。 幾何著色器發出的等量長度可以是任意的, (有 下命令) 。

幾何著色器的輸出可以傳送至點陣化器和記憶體中的頂點緩衝區。 傳送至記憶體的輸出會展開至個別的點、線條和三角形清單, (類似于將輸出傳遞至點陣化程式) 的方式。

幾何著色器階段可以實作下列演算法:

  • 點 Sprite 鑲嵌:著色器會採用單一頂點,並產生四個頂點, (兩個輸出三角形) ,代表四邊形的四角,具有任意材質、常態和其他屬性。

  • 寬線鑲嵌:著色器會收到兩個線條頂點 (LV0 和 LV1) ,並為代表擴展線條的四個頂點產生四個頂點。 此外,幾何著色器可以使用連續的線條頂點 (AV0 和 AV1) ,線上條端點上執行偏差。

  • 假體/Fin 產生:以不同的紋理轉譯多個位移, (立體化臉部) 模擬假裝的剖析效果。 Fins 是立體邊緣,如果角度不是斜線,通常會淡出。 Fins 可用來讓物件在斜角上看起來更好。

  • 陰影磁片區產生:用來判斷是否要立體化的相鄰資訊。

  • 單一傳遞轉譯至多個紋理 Cube 臉部:基本類型會投影併發出六次圖元著色器。 每個基本類型都會伴隨轉譯目標陣列索引,以選取 Cube 臉部。

  • 將直心座標設定為基本資料,讓圖元著色器可以執行自訂屬性插補。

  • 路徑案例:應用程式會產生一些幾何,然後產生幾何的 n 修補程式,然後將陰影磁片區從該幾何中立體化。 在這種情況下,多傳遞是一種解決方案,能夠將頂點和基本資料輸出至資料流程並重新整理資料。

因為對幾何著色器的每個呼叫可能會產生不同的輸出數目,所以對硬體的平行呼叫比執行其他管線階段 (更困難,例如頂點或圖元著色器階段) 平行執行。 雖然硬體實作會以平行方式執行幾何著色器呼叫,但完成平行幾何著色器呼叫所需的複雜緩衝處理,表示應用程式不需要在幾何著色器階段達到平行處理原則層級,才能與其他管線階段一樣多。 換句話說,幾何著色器可能會根據幾何著色器所擁有的程式負載,成為管線中的瓶頸。 不過,目標是使用幾何著色器功能的演算法仍會比必須模擬硬體上無法以程式設計方式產生幾何行為的應用程式更有效率地執行。

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