Vulkan, le nouvel OpenGL en mieux ?

OpenGL, ça a déjà 25 ans ! Et en 25 ans, il s'en passe des choses... Alors voici un petit article de veille sur Vulkan, le nouvel OpenGL, mais en mieux !

En quoi Vulkan est il l’évolution d’OpenGL ?

Quelques petits rappels, c’est quoi OpenGL ?

  • Une API de rendu 3D. En gros plein de fonctions qui permettent de faire de la 3D : afficher de la géométrie, changer sa couleur, mettre une texture dessus, etc.
  • Multi-OS : ça fonctionne aussi bien sur Windows que sur Linux.
  • Évolutif, grâce à un système d’extensions : si les cartes graphiques de demain embarquent de nouvelles fonctionnalités, celles-ci ne tarderont pas à devenir une extension OpenGL qui, si elles sont disponibles sur notre ordinateur, seront exploitées par les jeux les plus récents.

Ou plus brièvement ça sert à faire de la 3D sur un PC en utilisant la carte graphique. Ce qui donc nous intéresse ici énormément, compte-tenu de notre activité intimement liée à du développement 3D avec WebGL.

Un peu d'histoire autour d'OpenGL

D’un point de vue historique, OpenGL est né à l’aube de la 3D, en 1992. Étant donné que tout ceci était nouveau pour l’époque, on a fait quelques bourdes sur le chemin qui nous mène à aujourd’hui (et à Vulkan).

Pour commencer, OpenGL était géré par le consensus ARB (Architecture Review Board). L’ ARB c’est un regroupement de plein de boîtes pour lesquelles OpenGL a un enjeu. Donc en gros elles payent pour avoir un siège au sein de ce consensus, et pouvoir participer à l’élaboration des nouvelles versions d’OpenGL, donner leurs avis, restrictions, etc.

Le but de ce consensus c’est aussi qu'OpenGL soit disponible gratuitement sur un maximum de machines.

Plus tard, en 2006, l’ARB a voté pour que la gestion d’OpenGL soit transférée au Khronos Group. Le Khronos Group qui s'occupait déjà d’OpenGL ES (la version embarquée d’OpenGL), OpenCL (une bibliothèque pour faire du calcul parallèle), et bien d’autres choses relatives au monde de la 3D et du GPU.

Et Vulkan dans tout ça ?

Pour ce qui est de ce qu’est Vulkan, c’est étonnement simple. Vulkan c’est comme OpenGL, ça sert à faire de la 3D.

En tout cas c’est ce qu’on ce dit quand on entre pas dans les détails. Mais nous on veut savoir en quoi c’est une évolution, donc les différences, alors allons-y.

Le Khronos Group et Vulkan, une affaire qui marche depuis le début

Le Khronos Group, c'est solide. Et Vulkan, c'est de la 3D. Donc l'association des deux donnera un bon terreau pour faire grandir Vulkan.

Les shaders, c'est mieux sur Vulkan

Un des grands problèmes avec OpenGL, c’était les shaders, c’était un peu de la magie : on donnait le code tel quel à notre application OpenGL et bam ça modifiait notre géométrie, notre couleur, notre forme, notre lumière, etc...

Donc ça marchait, hein... mais le problème c'est que nous ne pouvions pas voir la version compilée. Donc nous ne pouvions pas optimiser notre code, nous n'avions aucun contrôle sur la sortie et le code était entièrement compilé par le driver, ce qui prend du temps. Bref tout ça c’est pas terrible.

Des erreurs à ne pas reproduire

On a commencé par faire un compilateur vers un langage intermédiaire (le fameux SPIR-V), donc on fournit notre GLSL (le langage de shader d’OpenGL) au compilateur et en sortie on obtient du spir-v binarisé.

Ce qu'on y gagne ? Ça simplifie le driver, et on gagne du temps puisque tout est compilé en amont. En plus de ça un ensemble d’outils ont été développés pour donner davantage de contrôle aux développeurs.

On peut vraiment tout faire avec une sortie SPIR-V binarisée, la dé-binariser pour la modifier, la transpiler vers du HLSL (langage de shader DirectX concurrent d’OpenGL et Vulkan développé par Microsoft), bref nous sommes enfin libres.

Vulkan apporte aussi une nouvelle philosophie bien fraîche et bien plus bas niveau

Depuis le temps qu’OpenGL est là, les ordinateurs ont bien changé. Nous avons désormais des CPU multi-cœurs, des cartes graphiques complètement programmables, etc.

Pour puiser un maximum de toutes ces évolutions, Vulkan a adapté une philosophie très bas niveau où nous avons un contrôle total sur la carte graphique.

Nous développons vraiment directement ce que doit faire la carte graphique et comment elle va le faire. Tout cela était auparavant le travail du driver, aujourd’hui c’est celui du développeur. En gros : c'est plus précis, plus fin.

Aussi il faut noter que le travail de la carte graphique est asynchrone. Ce qui veut dire que lorsque nous lui demandons d'exécuter une tâche, le processeur va faire autre chose en même temps. La parallélisation des tâches, forcément, c'est mieux.

Ainsi, avec une application Vulkan, on peut utiliser toutes les ressources du processeur, sans jamais attendre que la carte graphique finisse une tâche longue.

Vulkan : l’unification du mobile et du bureau.

La dernière grosse évolution de Vulkan (et pas la moindre) est l’unification de l’API 3D utilisée pour le mobile (OpenGL ES), et de celle utilisée pour les PC (OpenGL).

Avant il y avait donc deux APIs, donc deux spécifications différentes, ce qui demandait soit de faire une version mobile et une version PC de l’application, soit de faire une version du moteur pour le mobile, et une autre pour le PC.

Ce double développement pour un fonctionnement PC / Mobile est désormais de l’histoire ancienne, car Vulkan fonctionne aussi bien sur mobile que sur PC. Bien sur, il y a des choses qui vont être un peu différentes sur mobile mais une partie du boulot de portage de l’un à l’autre n’est plus à faire.

Vulkan, OpenGL en mieux ?

Pour faire bref :

  • Vulkan n'a pas fait les mêmes erreurs qu'OpenGL ;
  • Il est puissant car il y a plus de maîtrise ;
  • Les évolutions seront plus intéressantes
  • Unification des développements Mobile / Desktop

Quelques liens complémentaires

Tags de
l'article

Performance Vulkan

Catégories de l'article

Javascript Développement

Commentaires

Il n'y a actuellement aucun commentaire. Soyez le premier !

Articles liés