同じディスパッチ内の異なるワークグループが連続ループに置かれていて、フラグを設定することによってループを終了するようにallを通知したいという計算シェーダがある場合。これは実際に可能ですか?OpenGL Computeシェーダが異なるワークグループを同期する
私は、コヒーレントと揮発性の両方のマークが付いたSSBOでフラグを使用して、それらの終了をトリガーしようとしました。それは時々AMDの上で動作しません。作業グループの1つがすべて終了するようにするには、アトミックを使用しないでフラグを0から1に直接設定するだけです(それが重要でない限り)ので、あとでmemoryBarrier()を呼び出します。
memoryBarrier()のドキュメントから、同じディスパッチ内の他のワークグループへのセットの最終的な可視性が保証されるようです。
ありがとう、素晴らしい答え!標準のOpenGLドキュメントにこれが含まれていれば幸いです。私はこのために正しい精神モデルを確かめるために、これを正確に述べる必要がありました。 – iam
@iam: "*標準のOpenGLドキュメントにこれが含まれていれば幸いです。 OpenGL標準では、「作業グループは完全に独立して実行され、不特定の順序で実行されています。私がしたことは、それ以上の言葉でそれを語っていた。 –
ok私は明らかに、あなたが私にこのことの理解をより自信を持たせるようにしたように、少しだけ言葉を使用したかったと思います! :)そして、公正ではないかもしれないが、それ以外の事例ではそれがよく確認されていない/理解されていないかもしれない。 – iam