共用方式為


網域著色器 (DS) 階段

網域著色器 (DS) 階段 會定義輸出填補中的細分點頂點位置;它會計算對應至每個網域樣本的頂點位置。 網域著色器會在每個鑲嵌階段輸出點執行一次,且具有輪廓著色器輸出填補和輸出填補常數,以及鑲嵌階段輸出 UV 座標的唯讀存取權限。

用途和使用方式

網域著色器 (DS) 階段會根據來自輪廓著色器 (HS) 階段和鑲嵌 (TS) 階段的輸入,輸出在輸出填補中的細分點頂點位置。

diagram of the domain-shader stage

輸入

  • 網域著色器會使用來自輪廓著色器 (HS) 階段的輸出控制點。 輪廓著色器的輸出會包括:
    • 控制點。
    • 填補常數資料。
    • 鑲嵌係數。 鑲嵌係數可包括固定函式鑲嵌所使用的值及原始值 (例如整數鑲嵌四捨五入前的值),可用來輔助幾何變形等作業。
  • 網域著色器會針對來自鑲嵌 (TS) 階段的每個輸出座標叫用一次。

輸出

  • 網域著色器 (DS) 階段會輸出輸出填補中的細分點頂點位置。

網域著色器完成後,就會完成鑲嵌作業,而管線資料也會繼續傳送至下一個管線階段,例如幾何著色器 (GS) 階段和像素著色器 (PS) 階段。 在鑲嵌作用中期間,預期取得具有相鄰之原始物件 (例如每個三角形 6 個頂點) 的幾何著色器將不具效用 (這會造成為定義的行為,而偵錯層則會對此產生回報)。

範例

void main( out    MyDSOutput result, 
           float2 myInputUV : SV_DomainPoint, 
           MyDSInput DSInputs,
           OutputPatch<MyOutPoint, 12> ControlPts, 
           MyTessFactors tessFactors)
{
     ...

     result.Position = EvaluateSurfaceUV(ControlPoints, myInputUV);
}

圖形管線