Share via


ストリーム出力ステージ (Direct3D 10)

ストリーム出力ステージの目的は、ジオメトリ シェーダー ステージ (ジオメトリ シェーダー ステージが非アクティブの場合は頂点シェーダー ステージ) からメモリー内の 1 つまたは複数のバッファーに頂点データを継続的に出力 (またはストリーム) することです (「ストリーム出力ステージの基礎知識 (Direct3D 10)」を参照してください)。ストリーム出力ステージ (SO) は、パイプライン内のジオメトリ シェーダー ステージの直後で、ラスター化ステージの直前に位置します。

Ee415710.d3d10_pipeline_stages_so(ja-jp,VS.85).gif

メモリーにストリーム出力されるデータは、後続のレンダリング パスでパイプラインに読み戻すことができます。また、ステージング リソースにコピーすることもできます (そのため、CPU で読み取ることができます)。ストリーム出力されるデータの量は異なります。ID3D10Device::DrawAuto API は、書き込まれるデータの量について (GPU に) クエリしなくてもデータを処理できるように設計されています。

三角形ストリップまたはライン ストリップが入力アセンブラー ステージにバインドされているときには、各ストリップがリストに変換されてからストリーム出力されます。頂点は、常に、完全なプリミティブとして書き出されます (たとえば、三角形の場合は 3 つの頂点が一度に出力されます)。不完全なプリミティブがストリーム出力されることはありません。隣接性のあるプリミティブ タイプの場合、データがストリーム出力される前に隣接性データが破棄されます。

ストリーム出力されたデータをパイプラインに送る方法は 2 つあります。

  • ストリーム出力データは、入力アセンブラー ステージに戻すことができます。
  • ストリーム出力データは、ロード関数 (Load など) を使用して、プログラム可能なシェーダーで読み取ることができます。

バッファーをストリーム出力リソースとして使用するには、D3D10_BIND_STREAM_OUTPUT フラグを指定してバッファーを作成します。ストリーム出力ステージでは、同時に最大 4 つのバッファーがサポートされています。

  • 複数のバッファーにデータをストリームする場合、各バッファーは頂点単位のデータの 1 つの要素 (最大 4 成分) のみを取得でき、出力されるデータは、各バッファーの要素幅と等しくなるようにストライドされます (単一要素バッファーをシェーダー ステージへの入力のためにバインドする方法に対応しています)。さらに、各バッファーのサイズが異なる場合、バッファーのいずれかがいっぱいになるとすぐに書き込みが停止します。
  • 1 つのバッファーにデータをストリームする場合、そのバッファーでは、頂点単位のデータ (256 バイト以下) のスカラー成分を 64 個まで取得できます。また、頂点を 2048 バイトまでストライドできます。

関連項目

パイプライン ステージ (Direct3D 10)