2011-09-14 12 views
2

いくつかの画像処理にGLSLを使用しているので、フルスクリーンクワッドを描画し、フラグメントシェーダで処理しています。フラグメントが特定の優先順位で処理されることが期待できるかどうか疑問に思っていますか?フルスクリーンクワッドのGLSLフラグメント処理順序

私はフラグメントが並行して処理されていることを知っています。特定のフラグメントの終了時間を保証することはできません。それはちょうど大きな列ですか?そして、パターンはどのように見えますか?スキャンライン、ブロックなど

これはドライバに依存しますか?あなたはこの分野でいくつかの質問があると言えますが、私はそれに関する文書を見つけるのが難しいです。

答えて

1

任意に扱われているため、ドキュメントはありません。ハードウェアには、断片を完全に任意の順序で処理する能力があります。断片化処理の順序、形、または形式を知ることは許されません。フラグメント処理の順序を変更したり、その順序に影響を与えたり、まったく検出したりすることはできません。

まあ、4.2とARB_shader_image_load_storeまで。しかし、ハードウェアに可能な限り自由度を持たせるために、それに組み込まれたコントロールもあります。

要するに、処理の順序が問題になるようなことをしているのであれば、何か間違っています。

FBBレンダリングターゲットにテクスチャをバインドして同じイメージを添付することで、フレームバッファからの読み込みと書き込みを同時に行うフィードバックループを実行しようとしているように聞こえます。それは許されない。


これはパフォーマンスに関するものであり、機能に関するものではありません。

通常どおりCPUのメモリアクセスがキャッシュされると仮定できます。フラグメントシェイダーが入る順序は関係ありません。それらのうちの1つが最初にメモリにヒットし、後にヒットするものがキャッシュから利益を得ます。

覚えていること:GPUはに最適化です。 GPUは、いかに速くテクスチャ化されたシェーダ処理された三角形がレンダリングされるかに基づいて販売されます。実装は、テクスチャがどのように使用されるかを知っていて、出力するフラグメントをどのように注文するかによって愚かではないと期待できます。

ランダムアクセスが必要な場合は、ランダムアクセスする必要があります。あなたがそれについて行うことはあまりありません。しかし、そうでなければ、これは心配する時間を無駄にしたり、最適化しようとするべきではありません。ハードウェアとドライバーの作家に仕事をさせてください。

+0

Nope。私がやっていることはうまくいきます、私はほとんど好奇心です。処理の順序が重要な場合(私は思うが)、入力テクスチャ読み取りのキャッシュヒットにあります。特に、処理中のフラグメントに対してテクスチャをローカルで読み込むとき、処理される他のフラグメントが近くにあると、キャッシュのパフォーマンスが向上すると思いますか?少なくとも特定のハードウェアで... – wallacer

+0

@wallacer:私の編集を参照してください。 –

+0

ありがとうNicol。私はマスターズの学生とグラフィックスの研究者なので、この種のものを掘り起こすことは実際は私の仕事です。私があなたの答えから集めているのは、これが主にハードウェア/ドライバ依存の動作であるということです(私の質問では不思議でした)。 – wallacer

関連する問題