均一バッファーとプッシュ定数の概念的な違いを理解するのに苦労しています。仕様を読んで集めることができるものと、主な違いは次のとおりです。
- 均一バッファーは、プッシュ定数よりもはるかに大きくなる可能性があります。
- UBOはstd140を使用し、PCはstd430を使用します。
- UBOはvkCmdUpdateBuffer(またはホストマッピング)を使用していつでも更新でき、その値を保持できます。それ以外の場合は、レンダーパスごとにPCを再プッシュする必要があります。(私を驚かせた-名前に基づいて。パイプラインの定数をそのまま更新し、それらの変更を持続させると思った)
私のシナリオでは、約200バイト相当のデータがあり、ほぼ一定であると予想しています。つまり、それらを非常にまれに変更します。すべてのコマンドバッファーでプッシュ定数を再送信する必要がある場合でも、(サイズが許す限り)プッシュ定数を使用する方が良いでしょうか?または、200バイトのUBOを使用して、vkCmdUpdatebufferでたまにしか更新しない方がよいでしょうか?
また。たとえばfloat random_seed
、シェーダーが実行されるたびに更新するaがある場合はどうなりますか?私がすでにUBOを持っていると仮定すると、UBOの残りが一定であっても、UBOで一括処理する方が良いでしょうか、またはこの変数にプッシュ定数を使用することで利益を得られるので、すべてのレンダーパスの前にvkCmdUpdateBuffer?