入力アセンブラー ステージ (Direct3D 10)
Direct3D 10 API では、パイプラインの機能の領域が複数のステージに分割されています。パイプラインの第 1 ステージは、入力アセンブラー (IA) ステージです。
入力アセンブラー ステージの目的は、ユーザーにより書き込まれたバッファーからプリミティブ データ (ポイント、線、三角形) を読み出し、このデータをアセンブルして、他のパイプライン ステージで使用できるプリミティブにすることです。IA ステージでは、頂点群を各種のプリミティブ タイプ (線リスト、トライアングル ストリップ、隣接性のあるプリミティブなど) にアセンブルできます。ジオメトリ シェーダーをサポートするために、新しいプリミティブ タイプ (隣接性のある線リストや、隣接性のあるトライアングル リストなど) が追加されています。
アプリケーションは、ジオメトリ シェーダー内でのみ、隣接性情報を認識できます。たとえば、隣接性を含む三角形を使ってジオメトリ シェーダーを呼び出した場合、入力データには、三角形 1 つにつき 3 つの頂点と隣接性データの 3 つの頂点が含まれます。
入力アセンブラー ステージで隣接性データの出力を要求する場合、入力データに隣接性データが含まれている必要があります。このためには、縮退トライアングルを形成するダミーの頂点を提供するか、頂点属性の 1 つに頂点が存在するかどうかを示すフラグを立てる必要があります。また、ジオメトリ シェーダーでこれを検出し、処理することが必要になります (なお、ラスタライザー ステージでは縮退ジオメトリのカリングが行われます)。
IA の 2 つめの目的は、シェーダーの効率を高めるため、プリミティブをアセンブルしている間にシステム生成値をアタッチすることにあります。システム生成値はテキスト文字列であり、セマンティクスとも呼ばれます。3 つのシェーダー ステージはすべて共通のシェーダー コアから構築されています。このシェーダー コアはシステム生成値 (プリミティブ ID、インスタンス ID、頂点 ID など) を使用するため、各シェーダー ステージでは、処理されていないプリミティブ、インスタンス、頂点のみに処理を限定できます。
パイプラインのブロック図に示されているとおり、IA ステージでメモリーからデータが読み込まれると (メモリーでデータがプリミティブへとアセンブルされ、システム生成値がアタッチされて)、頂点シェーダー ステージに出力されます。以下に、IA ステージのプログラミングに役立つリンクを紹介します。
- 入力アセンブラー ステージの基礎知識 (Direct3D 10) - 入力データを提供するために生成する必要があり、IA ステージにデータの読み込み方法を指定するオブジェクトについて説明しています。
- システム生成値の使用 (Direct3D 10) - IA ステージの初期化に使用する Direct3D API について説明しています。