Direct3D 10 以降の API では、パイプラインの機能領域がステージに分割されます。パイプラインの最初のステージは、入力アセンブラー (IA) ステージです。
入力アセンブラー ステージの目的は、ユーザーが入力したバッファーからプリミティブ データ (ポイント、線、または三角形) を読み取り、他のパイプライン ステージで使用されるプリミティブにデータをアセンブルすることです。 IA ステージでは、頂点を複数の異なる プリミティブ型 (ライン リスト、三角形のストリップ、隣接するプリミティブなど) にアセンブルできます。 ジオメトリ シェーダーをサポートするために、新しいプリミティブ型 (隣接性を持つライン リストや隣接性を持つ三角形リストなど) が追加されました。
隣接性情報は、ジオメトリ シェーダー内でのみアプリケーションに表示されます。 たとえば、ジオメトリ シェーダーが隣接性を含む三角形で呼び出された場合、入力データには三角形ごとに 3 つの頂点、三角形ごとに隣接データの頂点が 3 つ含まれます。
入力アセンブラー ステージが隣接データを出力するように要求された場合、入力データには隣接データを含める必要があります。 これには、ダミーの頂点を提供する (縮退した三角形を形成する) 必要がある場合や、頂点が存在するかどうかに関係なく、頂点属性の 1 つにフラグを設定する必要がある場合があります。 これはジオメトリ シェーダーでも検出して処理する必要がありますが、デジェネレート ジオメトリのカリングはラスタライザー ステージで行われます。
プリミティブのアセンブリ中、IA の第 2 の目的は、シェーダーの効率を高めるために システム生成値をアタッチすることです。 システム生成値は、セマンティクスとも呼ばれるテキスト文字列です。 3 つのシェーダー ステージはすべて共通のシェーダー コアから構築され、シェーダー コアではシステムによって生成された値 (プリミティブ ID、インスタンス ID、頂点 ID など) が使用されるため、シェーダー ステージは、まだ処理されていないプリミティブ、インスタンス、または頂点のみに処理を減らすことができます。
パイプライン ブロック図に示すように、IA ステージがメモリからデータを読み取り (データをプリミティブにアセンブルし、システム生成値をアタッチ) すると、データは 頂点シェーダー ステージに出力されます。
このセクションでは、次の操作を行います。
話題 | 形容 |
---|---|
Input-Assembler ステージ の概要 |
入力アセンブラー (IA) ステージを初期化するために必要な手順がいくつかあります。 たとえば、パイプラインに必要な頂点データを含むバッファー リソースを作成し、バッファーの場所と含まれるデータの種類を IA ステージに指示し、データからアセンブルするプリミティブの種類を指定する必要があります。 |
プリミティブ トポロジの |
Direct3D 10 以降では、D3D_PRIMITIVE_TOPOLOGY 列挙型で表される複数のプリミティブ型 (またはトポロジ) がサポートされています。 これらの型は、パイプラインによって頂点がどのように解釈およびレンダリングされるかを定義します。 |
バッファー なしで Input-Assembler ステージを使用する |
シェーダーにバッファーが必要ない場合、バッファーの作成とバインドは必要ありません。 このセクションでは、単一の三角形を描画する単純な頂点シェーダーとピクセル シェーダーの例を示します。 |
System-Generated 値の使用 の |
システム生成値は、シェーダー操作の特定の効率を可能にするために、(ユーザーが指定した入力 セマンティクスに基づいて) IA ステージによって生成されます。 |