次の方法で共有


Stream-Output ステージ

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

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

パイプライン図

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

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

ストリーム出力データをパイプラインにフィードするには、次の 2 つの方法があります。

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

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

  • 複数のバッファーにデータをストリーミングする場合、各バッファーは頂点ごとのデータの 1 つの要素 (最大 4 つのコンポーネント) のみをキャプチャでき、暗黙的なデータストライドは各バッファーの要素の幅と等しくなります (シェーダー ステージへの入力に対して単一の要素バッファーをバインドする方法と互換性があります)。 さらに、バッファーのサイズが異なる場合は、いずれかのバッファーがいっぱいになるとすぐに書き込みが停止します。
  • データを 1 つのバッファーにストリーミングする場合、バッファーは頂点ごとのデータの最大 64 個のスカラー コンポーネント (256 バイト以下) をキャプチャするか、頂点ストライドを最大 2048 バイトにすることができます。

このセクションでは、次の操作を行います。

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

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

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