J'ai du mal à comprendre la différence conceptuelle entre les tampons uniformes et les constantes push. D'après ce que je peux recueillir en lisant les spécifications, les principales différences sont les suivantes:
- Les tampons uniformes peuvent être beaucoup plus grands que les constantes push.
- Les UBO utilisent std140, les PC utilisent std430.
- Les UBO peuvent être mis à jour à tout moment avec vkCmdUpdateBuffer (ou mappage d'hôte) et conserver leurs valeurs sinon les PC doivent être repoussés pour chaque passage de rendu. (Ce qui m'a surpris - sur la base du nom. Je pensais que je mettrais littéralement à jour les constantes dans le pipeline en place et que ces changements persistent)
Dans mon scénario, j'ai environ 200 octets de données que je pense être presque constants . Autrement dit, je les changerai très rarement. Serait-il préférable (en supposant que la taille le permette) d'utiliser des constantes push même si je dois les renvoyer dans chaque tampon de commande? Ou serait-il préférable d'utiliser un UBO de 200 octets et de le mettre à jour rarement avec vkCmdUpdatebuffer?
Aussi. que faire si j'ai par exemple un float random_seed
que je mettrai à jour à chaque exécution du shader? En supposant que j'ai déjà un UBO, serait-il préférable de regrouper cela avec l'UBO, même si le reste de l'UBO est constant, ou est-ce que je gagnerais à utiliser des constantes push pour spécifiquement cette variable, afin que je puisse éviter d'avoir à vkCmdUpdateBuffer avant chaque passage de rendu?