Une petite annonce,
Nvidia vient d'annoncer une nouvelle extension appelée Bindless graphics.
Qu'est-ce que cela veut dire ?
"Bindless" en gros veut dire "sans attachement". "Attacher des états" c'est envoyer une commande à la carte graphique disant que la prochaine opération de tracé opérera sur telle ou telle surface, avec tel ou tel vertex buffer, constant buffer, shader et j'en passe.
Sur une application moderne et exigeante c'est la majorité du temps CPU dit "administratif" (qui ne participe pas au rendu proprement dit mais est nécessaire pour mettre en place ce rendu) qui est passé à binder des états.
Comment le réduire ?
La solution apportée ici est intéressante,
dans le cas donné en exemple du Vertex buffer, elle découple le format de vertex (qui est censé changer peu fréquement) du vertex buffer object lui-même. Le vertex format entraine une reconfiguration partielle. Il est donc préférable de l'envoyer à une fréquence moins importante. De plus l'utilisation du "nom/alias" de l'objet dans la méthode de BIND actuelle est douloureuse au niveau des perfs parce que cela entraine une indirection lorsqu'il s'agit d'associer le "nom" de la structure à son adresse virtuelle en mémoire GPU. Alors que l'application peut désormais (en utilisant cette nouvelle extension) demander l'adresse virtuelle en amont (qui ne changera pas pour la durée de son utilisation) et l'envoyer telle quelle à la carte graphique via le driver.
Plus de détail ci dessous.
Bindless Graphics, la présentation de l'API :
http://developer.nvidia.com/object/b..._graphics.html
Discussion officielle sur OpenGL.org :
http://www.opengl.org/discussion_boa...&Number=256729
LeGreg
Partager