幾何著色器階段

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

幾何著色器

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

有相鄰頂點的三角形和線條的圖

類型
電視 三角形頂點
AV 相鄰頂點
低壓 線條頂點

 

geometry 著色器階段可以使用由 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)。

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

  • Point Sprite Expansion
  • Dynamic Particle Systems
  • Fur/Fin Generation
  • Shadow Volume Generation
  • Single Pass Render-to-Cubemap
  • Per-Primitive Material Swapping
  • Per-Primitive材質設定 - 包括將直心座標產生為基本資料,讓圖元著色器可以執行自訂屬性插補 (,以取得較高順序標準插補的範例,請參閱 CubeMapGS 範例) 。

圖形管線

Direct3D 10 () 的管線階段