Estou meio que lutando para entender a diferença conceitual entre buffers uniformes e constantes push. Pelo que consigo entender lendo as especificações, as principais diferenças são:
- Buffers uniformes podem ser muito maiores que constantes push.
- UBOs usam std140, PCs usam std430.
- Os UBOs podem ser atualizados a qualquer momento com vkCmdUpdateBuffer (ou mapeamento de host) e mantêm seus valores, caso contrário, os PCs precisam ser pressionados novamente para cada passagem de renderização. (O que me surpreendeu - com base no nome. Pensei em literalmente atualizar constantes no pipeline no local e fazer com que essas alterações persistissem)
No meu cenário, tenho cerca de ~ 200 bytes de dados que espero que sejam constantes . Ou seja, vou alterá-los com pouca frequência. Seria melhor (assumindo o tamanho permitido) usar constantes push, mesmo que eu tenha que reenviá-las em todos os buffers de comando? Ou seria melhor usar um UBO de 200 bytes e atualizá-lo apenas com frequência com vkCmdUpdatebuffer?
Além disso. e se eu tiver, por exemplo, um float random_seed
que atualizarei toda vez que o shader for executado? Supondo que eu já possua uma UBO, seria melhor agrupá-la com a UBO, mesmo que o restante da UBO seja constante, ou eu obteria um benefício ao usar constantes push para especificamente essa variável, para evitar evitar vkCmdUpdateBuffer antes de cada passagem de renderização?