0

コードベースに計算シェーダーのサポートを追加しようとしていますが、いくつかの非常に基本的な質問への回答を見つけるのに問題があります。

  1. そこにあるすべてのドキュメントは、Compute Shader パイプラインが GPU から独立して実行されると述べていますが、すべての dx11 サンプル コードはデバイス コンテキスト インターフェイスを使用して、シェーダー自体、リソース ビュー、および dispatch() メソッドの呼び出しを設定するため、これらはコマンドでキューに入れられますか?残りのレンダリング コマンドをバッファリングしますか、それとも個別に実行しますか?

  2. 質問 1 の補足として、複数のスレッドからコンピュート シェーダーを呼び出すことはできますか?それとも、すべてのコンピュート シェーダー コマンドをバッファーに入れ、即時デバイス コンテキストが作成されたスレッドでそれらを発行する必要がありますか?

  3. 同期。ほとんどの記事では、計算シェーダーの完了を自動的に同期し、CPU に結果へのアクセスを許可する CopyResource コマンドを使用していますが、GPU もブロックするようです。より効率的な同期方法はありますか?

実験することでこれに対する答えを見つけることができることはわかっていますが、時間を節約するための助けがあれば幸いです。

4

1 に答える 1

2
  1. コンピューティング シェーダー パイプラインは、レンダリングパイプラインとは独立して実行されます。つまり、頂点シェーダー、ピクセル シェーダー、ブレンド状態などは、 を呼び出したときに何が起こるかに影響しませんDispatch()。ただし、これらは同じキューに入れられるため、 と の呼び出し間の順序DrawDispatch維持されます。

  2. 即時コンテキストへのすべての呼び出しは、単一のスレッドから実行する必要があります。

  3. 一般的なアプローチの 1 つは、2 つのバッファーを使用することです。一方が計算シェーダーで操作されている間、もう一方はコピーされ、CPU によって読み取られます。ほとんどの GPU はこれを並列化できます。

于 2014-01-23T19:38:46.647 に答える