パイプラインのレンダリング
Direct3D バージョン 10 をサポートするグラフィックス ハードウェアは、共有プログラミング可能のシェーダー コアを使用して設計できます。 グラフィックス処理装置 (GPU) は、レンダリング パイプラインを構成する機能ブロック間でスケジュールできるシェーダー コアをプログラムできます。 この負荷分散は、ハードウェア開発者がすべてのシェーダー タイプを使用する必要はなく、レンダリングを実行するために必要なものだけを使用することを意味します。 その結果、この負荷分散によって、リソースをアクティブなシェーダー タイプのために解放できるようになります。 次の図は、レンダリング パイプラインの機能ブロックを示しています。 図に続くセクションで、ブロックについて詳しく説明していきます。
入力アセンブラー
入力アセンブラー ステージでは、固定関数操作を使用して、メモリから頂点を読み出します。 次に、入力アセンブラーは、ジオメトリ プリミティブを形成し、パイプライン作業項目を作成します。 自動生成された頂点識別子、インスタンス識別子 (頂点シェーダーで使用可能)、プリミティブ識別子 (ジオメトリ シェーダーまたはピクセル シェーダーで使用可能) により、識別子固有の処理が可能になります。 図中の点線は、識別子固有の処理の流れを示しています。
頂点シェーダー
頂点シェーダー ステージは、入力として 1 つの頂点を受け取り、1 つの頂点を出力します。
ジオメトリ シェーダー
ジオメトリ シェーダー ステージは、入力として 1 つのプリミティブを受け取り、0 個、1 個、または複数個のプリミティブを出力します。 出力プリミティブには、ジオメトリ シェーダーがない場合に可能な量よりも多くのデータを含めることができます。 1 操作あたりの出力データの合計量は、(頂点サイズ x 頂点数) です。
ストリーム出力
ストリーム出力ステージは、ジオメトリ シェーダーの出力に到達するプリミティブを出力バッファーに連結 (ストリーム アウト) します。 ストリーム出力は、ジオメトリ シェーダーに関連付けられ、両方はまとめてプログラムされます。
ラスタライザー
ラスタライザー ステージ クリップ (カスタム クリップ境界を含む) プリミティブは、プリミティブに対してパースペクティブ分割を実行し、ビューポートとハサミの選択を実装し、レンダー ターゲットの選択を実行し、プリミティブ設定を実行します。
ピクセル シェーダー
ピクセル シェーダー ステージは、入力として 1 ピクセルを受け取り、同じ位置に 1 ピクセルをまたはピクセルなしで出力します。 ピクセル シェーダーは、現在のレンダー ターゲットを読み取ることはできません。
出力結合
出力マージャー ステージは、固定関数レンダー ターゲットのブレンド、深度、ステンシルの各操作を実行します。