Saya agak berjuang untuk memahami perbedaan konseptual antara buffer seragam dan konstanta dorong. Dari apa yang saya dapat kumpulkan dengan membaca spec, perbedaan utamanya adalah:
- Buffer yang seragam bisa jauh lebih besar daripada konstanta dorong.
- UBO menggunakan std140, PC menggunakan std430.
- UBO dapat diperbarui kapan saja dengan vkCmdUpdateBuffer (atau pemetaan host) dan tetap mempertahankan nilainya, PC harus didorong kembali untuk setiap render pass. (Yang mengejutkan saya - berdasarkan namanya. Saya pikir saya benar-benar akan memperbarui konstanta di saluran pipa di tempat, dan perubahan itu tetap ada)
Dalam skenario saya, saya memiliki sekitar ~ 200 byte data yang saya harapkan sebagian besar konstan . Artinya, saya akan jarang mengubahnya. Akankah lebih baik (dengan asumsi ukuran memungkinkan) menggunakan konstanta dorong meskipun saya harus mengirimnya kembali di setiap buffer perintah? Atau lebih baik menggunakan UBO 200-byte dan jarang memperbaruinya dengan vkCmdUpdatebuffer?
Juga. bagaimana jika saya memiliki mis a float random_seed
yang akan saya perbarui setiap kali shader dijalankan? Dengan asumsi saya sudah memiliki UBO, apakah akan lebih baik untuk menyamakannya dengan UBO, meskipun sisa UBO konstan, atau apakah saya akan mendapat manfaat dengan menggunakan konstanta dorong untuk variabel ini secara khusus, sehingga saya dapat menghindari keharusan untuk vkCmdUpdateBuffer sebelum setiap render lulus?