描画呼び出しは、並行して実行されますか、それとも順次実行されますか?


8

これは、GameDev SEで回答した質問のフォローアップです。問題は、OpenGLのglDrawArraysInstancedがそれらのインスタンスを描画するときに並列であるかどうかだけでした。

私の答えは、「たとえば、2つの描画呼び出しが同じ頂点シェーダーを使用する場合など、GPUが複数の事柄に応じて複数の描画呼び出しを並行して実行する可能性がある」というものでした。ここに完全な答えがあります

OPが述べたコメントで、「シーケンシャルである必要があると思います。結局のところ、ブレンディングモードの一部はシーケンスに依存しています」

今、私は少し混乱しています。それに対する私の答えは、それが有効である場合でもそれらを並列化しますか?誰かがこれを明確にできますか?

回答:


9

結果は、一度に1つの三角形が順番に実行されたかのようになります。これは、各フレームが確定的であるために重要です。そうでない場合、同じフレームを複数回描画すると、異なる結果が作成され、画面にちらつきイメージが作成される可能性があります。

ただし、これは並列化が不可能であることを意味ません。頂点は並列に計算できます。結果は順序付けされ、フラグメントシェーダーステージに供給するラスタライザに送られます。

同じことがピクセルでも起こります。通常、三角形のピクセルのグループは、並列に計算してブレンドできます。オーバーラップしていない三角形も同時に塗りつぶすことができますが、三角形が現在ビジーな三角形とオーバーラップしている場合は、前の三角形の対応するピクセルが完了するまでフラグメントシェーダーの結果をバッファリングして、正しい順序でブレンドできるようにする必要があります。


オーバーラップする三角形のピクセルシェーダーを同時に実行することは完全に可能です。重要なのは、ブレンドが順番に行われることです。ピクセルシェーダーは、ブレンディングユニットに対して多くの作業を任意の順序で開始できます。その後、ブレンドユニットは、発生した三角形に応じて、すべてのブレンド操作を並べ替えることができます。
John Calsbeek、2015年

同じ平面にある複数の三角形が原因でちらつきが発生する状況を見てきましたが、カメラ/世界/その他で発生したかどうか覚えていません。変換は静的であるか、移動と再計算が必要な場合。しかし、それはエッジケースです。
JAB 2015年

@JAB zファイティングを参照しているようです。これは通常、2つのプリミティブが分析的に同一平面上にある場合でも、補間器での量子化により、両方のプリミティブの一部のピクセルが見えるパターンが生成されるために発生します。頂点(またはカメラ)を移動した場合にのみ、パターンがシフトし、ちらつきが発生します。それ以外の場合、干渉パターンはフレーム間で一貫している必要があります。
MooseBoys、2015年

@MooseBoysそうだね。私が3Dグラフィックスをたくさん使ってから数年になります。
JAB 2015年

複数の頂点とピクセルを並行して実行するだけでなく、十分なGPUリソ​​ースが利用可能で、描画呼び出し間に依存関係がない場合は、複数の描画呼び出しを同時に実行することもできます。
Nathan Reed、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.