Stream-Output ステージ

ストリーム出力ステージの目的は、geometry-shader ステージ (または geometry-shader ステージが非アクティブな場合は頂点シェーダー ステージ) からメモリ内の 1 つ以上のバッファーに頂点データを継続的に出力 (またはストリーム) することです (Stream-Output ステージを使用したはじめにを参照)。

ストリーム出力ステージ (SO) は、次の図に示すように、ジオメトリ シェーダー ステージの直後とラスター化ステージの直前のパイプラインにあります。

パイプライン内のストリーム出力ステージの場所を示す図

メモリにストリーミングされたデータは、後続のレンダリング パスでパイプラインに読み戻すか、ステージング リソースにコピーできます (CPU によって読み取られるようにするため)。 ストリーミングされるデータの量は異なる場合があります。 ID3D11DeviceContext::D rawAuto API は、書き込まれたデータの量に関するクエリ (GPU) を必要とせずにデータを処理するように設計されています。

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

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

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

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

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

このセクションの内容

トピック 説明
Stream-Output ステージでのはじめに
このセクションでは、ストリーム出力ステージでジオメトリ シェーダーを使用する方法について説明します。

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

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