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 ステージ の概要 |
このセクションでは、ストリーム出力ステージでジオメトリ シェーダーを使用する方法について説明します。 |