L'ordre des données de tampon de sommet lors du rendu des primitives indexées est-il important?

14

Je construis des triangles d'un objet 3D. Si je peux les écrire dans le tampon dans l'ordre où ils sont calculés, cela simplifiera le code CPU. Les sommets des triangles ne seront pas contigus.

Y a-t-il une pénalité de performance pour les avoir annulés?

Geai
la source

Réponses:

12

Il y a (au moins) deux facteurs en jeu ici. Les GPU peuvent utiliser un cache de vertex post-transformation lorsque les primitives indexées sont rendues. La taille de ce cache varie et il est utilisé lors d'un appel individuel (pas pour plusieurs appels, à ma connaissance, donc peu importe la fréquence à laquelle vous modifiez les données du tampon dans ce contexte).

Si vous organisez vos données pour tirer parti de ce cache (un exemple d'algorithme est ici ), vous pouvez voir des améliorations de performances. Cependant, cette organisation a plus à voir avec la commande de vos index afin que chaque index triple réutilise autant de sommets récemment vus que possible. Cela a probablement peu d'incidence sur votre scénario spécifique, à moins que vos triangles, via votre tampon d'index, ne soient également dispersés de manière aléatoire dans le tampon ... auquel cas vous faites probablement exploser le cache souvent. Dans votre question, je ne savais pas très bien si c'était le cas, alors j'ai pensé qu'il valait la peine de le mentionner.

Ce qui est plus susceptible d'être un problème est que les GPU mettent également en cache les accès en mémoire aux données de sommet lors d'un tirage. La taille de ce cache est également de taille assez peu fiable et il est concevable que vous puissiez obtenir une fréquence de coupure élevée dans ce cache sur les cœurs individuels traitant ces indices en données de sommet très mal localisées.

Quant à savoir si cela va causer suffisamment de problèmes de performances pour être un drapeau rouge dans votre application, et en particulier (cela ressemble à) pour réorganiser votre algorithme afin de mieux organiser les données au détriment de la lisibilité de l'algorithme ... ce n'est pas quelque chose que je peux répondre, vous devrez profiler certains scénarios et voir.

Je me tromperais personnellement du côté du code lisible et maintenable, cependant, car je pense que tout cache manquant que vous allez provoquer ne sera pas suffisamment important pour que les utilisateurs le remarquent.


la source