共用方式為


幾何著色器階段

geometry-shader (GS) 階段會以頂點作為輸入來執行應用程式指定的著色器程序代碼,以及在輸出上產生頂點的能力。

幾何著色器

與在單一頂點上運作的頂點著色器不同,幾何著色器的輸入是完整基本類型的頂點(線條的兩個頂點、三個三角形頂點,或點的單一頂點)。 幾何著色器也可以帶入邊緣相鄰基本類型的頂點數據做為輸入(另外兩個線條頂點,三角形額外三個頂點)。 下圖顯示三角形和具有連續頂點的線條。

三角形的圖例,以及具有相鄰頂點的線條

類型
電視 三角形頂點
AV 連續頂點
LV 線條頂點

 

geometry-shader 階段可以取用由 IA 自動產生的SV_PrimitiveID 系统产生值。 這可讓每個基本型別的數據在必要時擷取或計算。

幾何著色器階段能夠輸出多個頂點,形成單一選取拓撲(GS 階段輸出拓撲有:tristrip、linetrip 和 pointlist)。 發出的基本類型數目可以在幾何著色器的任何調用內自由變化,不過可以發出的最大頂點數目必須以靜態方式宣告。 從幾何著色器調用發出的等量長度可以是任意的,而且可以透過 RestartStrip HLSL 函式建立新的等量。

幾何著色器輸出可透過串流輸出階段饋送至轉譯器階段和/或記憶體中的頂點緩衝區。 饋送至記憶體的輸出會展開至個別點/線/三角形清單(與轉譯器完全相同)。

當幾何著色器作用中時,它會針對管線中先前傳遞或產生的每個基本類型叫用一次。 幾何著色器的每個叫用都會視為叫用基本類型數據的輸入,無論是單一點、單行還是單一三角形。 管線稍早在管線中的三角形帶狀結構會導致對等量中每個個別三角形的幾何著色器叫用(好像帶向外展開成三角形清單一樣)。 個別基本類型中每個頂點的所有輸入數據都可供使用(也就是三角形的 3 個頂點),如果適用/可用,則加上相鄰的頂點數據。

幾何著色器會將頂點附加至輸出數據流物件,一次輸出一個頂點的數據。 數據流的拓撲取決於固定宣告,選擇其中一個:PointStream、LineStream 或 TriangleStream 做為 GS 階段的輸出。 有三種類型的數據流物件可供使用,PointStream、LineStream 和 TriangleStream 都是樣板化物件。 輸出的拓撲取決於其各自的物件類型,而附加至數據流的頂點格式則由範本類型決定。 從其他調用執行幾何著色器實例是不可部分完成的,不同之處在於新增至數據流的數據是序列。 幾何著色器指定調用的輸出與其他調用無關(雖然遵守順序)。 產生三角形帶狀的幾何著色器會在每次叫用時啟動新的帶狀。

當幾何著色器輸出識別為系統解譯值時(例如SV_RenderTargetArrayIndex或SV_Position),硬體會查看此數據,並執行一些相依於值的行為,除了能夠將數據本身傳遞給下一個著色器階段以進行輸入。 當幾何著色器的這類數據輸出對硬體具有意義時,每個基本類型(例如SV_RenderTargetArrayIndex或SV_ViewportArrayIndex),而不是以每個頂點為基礎(例如SV_ClipDistance[n] 或SV_Position),則每個基本類型的數據會取自針對基本類型發出的前置頂點。

如果幾何著色器結束且基本類型不完整,則幾何著色器可能會產生部分完成的基本類型。 未完成的基本類型會以無訊息方式捨棄。 這類似於 IA 處理部分完成基本類型的方式。

幾何著色器可以執行載入和紋理取樣作業,其中不需要螢幕空間衍生專案(samplelevel、samplecmplevelzero、samplegrad)。

可以在幾何著色器中實作的演算法包括:

  • 點 Sprite 展開
  • 動態粒子系統
  • 毛皮/Fin 產生
  • 陰影磁碟區產生
  • 單一傳遞轉譯至 Cubemap
  • Per-Primitive 材質交換
  • Per-Primitive 材質設定 - 包括以基本數據的形式產生巴里中心座標,讓圖元著色器可以執行自定義屬性插補(如需較高順序標準插補的範例,請參閱 CubeMapGS 範例)。

圖形管線

管線階段 (Direct3D 10)