ドメイン シェーダー (DS) ステージ

ドメイン シェーダー (DS) ステージでは、パッチ内の細分化されたポイントの頂点の位置を計算します。つまり、各ドメイン サンプルに対応する頂点の位置を計算します。 ドメイン シェーダーは、テッセレータ ステージの出力ポイントごとに 1 回実行され、ハル シェーダーの出力パッチや出力パッチ定数、およびテッセレータ ステージの出力 UV 座標への読み取り専用アクセスが可能です。

目的と用途

ドメイン シェーダー (DS) ステージは、ハル シェーダー (HS) ステージテッセレータ (TS) ステージからの入力に基づいて、出力パッチ内の細分化されたポイントの頂点の位置を出力します。

ドメイン シェーダー ステージの図

入力

  • ドメイン シェーダーは、ハル シェーダー (HS) ステージからの出力の制御点を利用します。 ハル シェーダーの出力には次の項目が含まれます。
    • 制御点。
    • パッチ定数データ。
    • テセレーション係数。 テセレーション係数には、未処理の値 (整数テセレーションによる丸めの前など) と共に、固定機能テッセレータで使われる値を含めることができます。
  • ドメイン シェーダーは、テッセレータ (TS) ステージからの出力座標ごとに 1 回呼び出されます。

出力

  • ドメイン シェーダー (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);
}

グラフィックス パイプライン