2016-07-24 8 views
0

からデプスバッファへの書き込み?は、コンピュートシェーダからの深度バッファを満たし、その後、三角形などでレンダリング・グラフィックス・パイプラインのためにその深度バッファを使用するための最良の方法は何か、現代のデスクトップOpenGLのハードウェア上で一般のOpenGLコンピュートシェーダ

具体的には、私はHiZに関する懸念について疑問を抱いています。また、グラフィックスレンダリングの前または後に、デプスバッファへのシェーダの変更を計算する方が良いのだろうか?

コンピュートシェーダがグラフィックスレンダリング後に実行された場合、私はデプスバッファは通常、舞台裏で解凍されますと仮定します。しかし、奥行きバッファーがグラフィックスパイプラインの圧縮解除/非最適化の状態になっている可能性があります。

答えて

2

私の知る限りでは、あなたは、画像などの深形式のいずれかでテクスチャをバインドすることはできませんので、コンピュートシェーダにおける奥行きフォーマットのテクスチャに書き込むことはできません。 glBindImageTexture documentationを参照してください。テクスチャフォーマットに互換性があるフォーマットがリストされています。深度のフォーマットはそれらの間にはなく、仕様では深度のフォーマットは通常のフォーマットと互換性がないと言います。

テクスチャコピー機能は、同じ互換性の制限を持っているので、あなたも、例えばできません計算シェーダの通常のテクスチャに書き込んだ後、深度テクスチャにコピーします。 glCopyImageSubDataは明示的にその制限を持っていませんが、試していないし、コアプロファイルの一部ではありません。働くかもしれない何

は、フルスクリーンの三角形をレンダリングするとテクスチャから読み出された値にgl_FragDepthを設定し、通常のテクスチャに書き込んでいるが、それは追加のフルスクリーンパスです。

計算シェーダのものがデプスバッファを変更した場合、異なるパーツが可視または遮蔽されるため、通常のレンダリングの前または後で行うかどうかによって結果が異なる可能性があります。

しかし、それはあなたが手動ですべての深度バッファに書き込むことができないようですので、多分その質問は議論の余地がある - また、あなたの3番目の質問に答えるかもしれない - デプスバッファに書き込まないことにより、あなたはそれを圧縮して混乱することはできません:)

私はこれに関する専門家ではないことに注意してください。私は同様の問題を抱えていて、ドキュメント/スペックを自分で見ました。これはすべて間違っている可能性があります:)計算シェーダで深度バッファに書き込むことができれば教えてください!

+0

私はあなたがほとんどの質問をすると思いますが、具体的な部分は、GPUがHiZカリングなどのために最適な形で深さのバッファを保持する方法ですので、私は具体的に同様の相互作用の経験を持つ人から答えを探していました – iam

+0

私たちが同じページにいることを確認してください.HiZのGPUはオープンで文書化されていないハードウェアフィーチャです。また、計算シェーダで行うことはその機能の恩恵を受けるか、干渉しません。ラスタライズを高速化し、これ以上何もない。 HiZの仕組みを読んでみたい場合は、https://fgiesen.wordpress.com/2011/07/08/a-trip-through-the-graphics-pipeline-2011-part-7/をお勧めしますが、レンダリングパイプラインのラスタライズ部分を低レベルで最適化しない限り、心配する必要はありません。 – karyon

+0

HiZはベンダー固有の圧縮/最適化/再構成された深度バッファーの形式を使用します。ある種の操作では、GPUはこれをシェーダアクセスから深度バッファに直接変換してゆきます。これは物事を遅くする可能性があります。コンピューティングベースのものと統合するときに誰かが特定のより高速なパスに遭遇したかどうかは疑問でした。一見そうじゃない! – iam

関連する問題