I. Introduction▲
Suite à la publication de la spécification de Vulkan, la nouvelle bibliothèque de hautes performances pour les GPU, Khronos a organisé une conférence en ligne afin de donner plus de précisions aux développeurs.
II. Vidéo▲
Khronos - Vulkan Webinar - première partie
Khronos - Vulkan Webinar - seconde partie
III. Participants▲
- Neil Trevett, président de Khronos et vice-président de NVIDIA
- Karen Ghavam, directeur général
- Tom Olson, directeur du groupe de travail sur Vulkan, directeur des recherches sur le graphisme chez ARM
- Graham Sellers, membre du groupe de travail sur Vulkan, ingénieur chez AMD
- Jesse Barker, membre du groupe de travail sur Vulkan, ingénieur logiciel principal chez ARM
- Jon Ashburn, membre du groupe de travail sur Vulkan, ingénieur principal chez LunarG
- Karl Schultz, membre du groupe de travail sur Vulkan, ingénieur principal chez LunarG
- Jeff Bolz, membre du groupe de travail sur Vulkan, éminent ingénieur chez NVIDIA
- John Kessenich, ingénieur logiciel chez Google
- Kathleen Mattson, organisatrice de la conférence
IV. Vulkan▲
Vulkan est la spécification ouverte d'une nouvelle bibliothèque pour les graphismes. Elle permet aux développeurs d'avoir le contrôle sur la carte graphique afin d'effectuer des rendus, tout comme OpenGL. Toutefois, Vulkan n'est pas une nouvelle version d'OpenGL (qui a été créé il y a 25 ans). Vulkan prend une nouvelle direction et se détache de l'héritage d'OpenGL.
IV-A. Acteurs autour de Vulkan▲
De nombreux acteurs (autour de 30) ont participé à la concrétisation de Vulkan, que ce soit les constructeurs de cartes graphiques, les développeurs de moteurs de jeux vidéo, mais aussi les développeurs de jeux ou encore des développeurs moins attendus dans ce secteur (Dassault Systemes, VMWare, Mobica, Continental…).
IV-B. Ouverture▲
Le consortium Khronos offre un accès libre à la spécification, aux ressources de référence, aux tests de vérification de conformité à la spécification, aux SDK.
IV-C. Besoins▲
Après 20 ans d'évolution des méthodes de rendu, du matériel et des plateformes capables d'afficher des mondes en 3D, il a été nécessaire de repartir d'une nouvelle base et de se recentrer sur les besoins actuels :
- ouverte et explicite (rien n'est caché, le programmeur obtient exactement ce qu'il demande) ;
- capable de travailler conjointement avec le CPU (et ne plus avoir de modèle client/serveur) ;
- portable (les mobiles sont maintenant légion) ;
- extensible (pour supporter de nouveaux matériels rapidement).
Pour répondre à cela, le pilote est bien plus léger et ne contient que le strict nécessaire (transmettre les commandes du programmeur au GPU). L'application doit maintenant prendre en charge l'allocation mémoire, la gestion des threads, la génération des tampons de commandes. En donnant contrôle au programmeur, il n'y a pas de surprise. L'application fait exactement ce que le programmeur demande. Pour la même raison, la spécification ne détermine plus le langage de programmation pour les shaders, mais une représentation intermédiaire afin que le pilote n'ait plus à gérer la compilation : le compilateur est hors ligne.
IV-D. Support▲
Vulkan est supporté par n'importe quel matériel compatible avec OpenGL ES 3.1/OpenGL 4. La bibliothèque fonctionne sur Windows (à partir de XP), Linux (dont Ubuntu, SteamOS, Tizen), Android.
Le jeu The Talos Principle est le premier à supporter Vulkan.
IV-E. Qui devrait utiliser Vulkan ?▲
Utiliser Vulkan demande bien plus de travail et de responsabilité que d'utiliser OpenGL. Tous les développeurs ne seront donc pas nécessairement intéressés par cette nouvelle bibliothèque.
Khronos continuera de faire évoluer OpenGL et OpenGL ES en parallèle de Vulkan.
Vous ne devriez utiliser Vulkan que si votre rendu graphique est limité par le CPU ou que si vous êtes prêt à tout mettre en œuvre pour obtenir les meilleures performances possibles.
Toutefois, Vulkan sera disponible à travers les outils les plus populaires du marché (Epic Games, Unity, Valve, Blizzard…) et l'utilisateur verra une amélioration des performances.
IV-F. Ressources▲
Dès le lancement, de nombreuses ressources autour de Vulkan sont disponibles. Tout d'abord, sur le site de Khronos, il est possible de récupérer la spécification, les fichiers d'en-têtes, les pages de références, les tests de conformité. Sur le GitHub de Khronos : les sources de la suite d'outils du compilateur SPIR-V, les sources de la couche de validation, les sources pour charger Vulkan et la documentation de ceux-ci.
Avec cet ensemble, il est possible de faire des applications. LunarG apporte en plus les binaires et des guides de démarrage ainsi que des programmes d'exemples.
Finalement, les professionnels et autres passionnés apportent eux aussi diverses ressources supplémentaires.
IV-G. Pilotes▲
Les constructeurs de cartes graphiques ont développé les pilotes Vulkan afin qu'ils soient prêts au moment de la publication de la spécification.
V. LunarG▲
LunarG apporte des outils supplémentaires, tel le SDK sous la forme de binaires pour Linux et Windows afin d'aider les développeurs dans l'écriture d'applications Vulkan. En plus du SDK, l'entreprise apporte des utilitaires, des outils de débogage, des exemples et de la documentation.
V-A. Le chargeur▲
Le chargeur Vulkan est une interface entre l'application, les ressources graphiques et le système de couches pour le développement.
V-B. Couche de validation▲
L'étape de validation permet de contrôler le bon comportement de l'application, en surveillant :
- les limites du périphérique ;
- l'état de rendu ;
- les paramètres de la bibliothèque ;
- les accès aux objets multithreads ;
- les formats des textures et cibles de rendu ;
- le suivi des objets ;
- le suivi de la mémoire ;
- les extensions WSI.
V-C. Exemples▲
Les exemples donnent une idée de comment correctement utiliser la bibliothèque. De plus, la page de présentation du code possède un moteur de recherche afin de mieux trouver ce que l'utilisateur recherche.
Les principaux constructeurs participent à cette base de données.
V-D. Outils▲
LunarG propose des outils pour Vulkan et pour SPIR-V :
- vktrace : enregistre les appels Vulkan ;
- vkreplay : rejoue les appels Vulkan ;
- GLSL Validator : pour vérifier le GLSL avant sa compilation en SPIR-V ;
- SPIR-V Disassembler et Assembler : pour analyser et déboguer en profondeur le SPIR-V dans une forme facile à utiliser ;
- SPIR-V Remapper : pour optimiser le SPIR-V ;
- RenderDoc : permet le débogage d'erreurs graphiques.
VI. Questions/Réponses▲
VI-A. Généralités▲
Par quelle bibliothèque devrait commencer un débutant ?
- OpenGL est plus appropriée pour les débutants en graphisme 3D.
Quelle est la différence entre Vulkan et DirectX 12 ?
- D'un point de vue externe, la plus grande différence est liée aux plateformes supportées.
Est-il possible de faire fonctionner DirectX au-dessus de Vulkan ?
- La conversion des shaders HLSL compilés en SPIR-V est techniquement possible. L'autre possibilité et de compiler directement le HLSL en SPIR-V.
Pourquoi n'est-il pas possible d'utiliser OpenGL dans Vulkan ?
- OpenGL repose sur une machine à états alors que Vulkan ne le fait pas. En appelant une fonction OpenGL, la machine à états serait absente et donc la fonction ne pourrait pas travailler correctement.
Il est toutefois possible d'utiliser OpenGL et Vulkan dans la même application, indépendamment l'un de l'autre.
Est-il possible de mélanger un rendu OpenGL avec un rendu Vulkan ?
- NVIDIA a publié une extension pour synchroniser un contexte OpenGL à une queue de commandes Vulkan afin de permettre de copier une image Vulkan vers OpenGL.
Comment choisir entre Vulkan et OpenCL ?
- OpenCL est plus approprié pour le calcul scientifique sur GPU que Vulkan notamment pour sa gestion sur la précision des types. Mais si les résultats doivent être affichés, alors Vulkan apportera une solution plus évidente.
Est-il possible de mélanger des opérations CUDA et Vulkan ?
- Peut-être cela pourra arriver, mais pour l'instant, rien de prévu.
Y aura-t-il une version Web pour Vulkan ?
- Les membres du consortium Khronos en discutent, mais rien n'est en place. Utilisez WebGL.
Est-ce que quelqu'un développe une implémentation OpenGL au-dessus de Vulkan ?
- Il y a des rumeurs sur de tels projets, mais rien de visible. Toutefois, cela serait sûrement une perte de temps, sachant que les implémentations OpenGL travaillent déjà directement avec le matériel.
Que peut-on dire des performances de Vulkan pour le raytracing ?
- Le modèle de rendu sous-jacent à Vulkan est très proche du modèle OpenGL. La solution d'utiliser les compute shaders est donc toujours d'actualité et atteindra donc des performances similaires.
Comment détecter le support Vulkan sous Linux ?
- Le SDK repose sur la présence de fichiers spécifiques à Vulkan. La recherche est configurable à travers une variable d'environnement.
Où peut-on envoyer des codes d'exemples pour le SDK ?
- Vous pouvez envoyer vos codes d'exemples sur le GitHub de LunarG. De plus, il est aussi possible d'envoyer du code sur le GitHub de Khronos.
Est-ce que cela est raisonnable d'utiliser Vulkan sans le SDK ?
- Tous les éléments inclus dans le SDK sont disponibles et peuvent être récupérés sans passer par le SDK. Donc il est parfaitement possible d'utiliser Vulkan sans. Le SDK permet de regrouper les outils et de faciliter leur utilisation.
Y a-t-il un avantage d'utiliser l'envoi de commandes en multithread ?
- Si vous avez plusieurs queues de commandes, il est intéressant de remplir celles-ci à l'aide de plusieurs threads. Si vous n'avez qu'une seule queue, vous allez devoir sérialiser les commandes envoyées par les différents threads. Vous pourrez toujours avoir de meilleures performances grâce à Vulkan. La conception multithread n'est pas obligatoire.
Vulkan peut-il être utilisé pour un rendu sans affichage ?
- Vulkan n'a pas de système de fenêtrage, donc cela est possible.
Vulkan peut-il être utilisé pour l'affichage d'images stéréoscopiques ?
- L'ajout de vues multiples est prévu dans les prochains axes de travail.
Est-ce que l'intégration d'un système de fenêtrage est simplifiée avec Vulkan ?
- Le modèle a été amélioré à travers l'extension WSI.
Est-ce qu'il est possible de réaliser des rendus 2D avec Vulkan ?
- Vulkan est une bibliothèque bas niveau permettant d'utiliser la carte graphique. Il est possible de l'utiliser pour n'importe quel rendu que vous souhaitez.
Quels sont les bénéfices d'utiliser Vulkan pour remplacer OpenGL ?
- Vous n'obtiendrez des gains que si le rendu de l'application est limité par le CPU.
Est-ce que Vulkan peut être utilisé pour des applications critiques ?
- Il est encore nécessaire d'attendre, le temps que les pilotes se stabilisent et soient testés à une grande échelle. Les tests de conformité ne couvrent pas l'intégralité des cas.
Quelles sont les interactions possibles entre EGL et Vulkan ?
- L'extension WSI a été majoritairement écrite par l'équipe derrière EGL. WSI peut être considéré comme la nouvelle génération de EGL.
Est-ce que Mantle et Vulkan sont proches ?
- La première proposition pour Vulkan est une version nettoyée de Mantle. Mais Vulkan a reçu de nombreuses modifications en 18 mois : son architecture a fortement dévié de son origine.
Quels sont les modes d'anticrénelage disponibles ?
- Vulkan inclut les modes habituels d'anticrénelage. Le minimum prévu par la spécification est l'algorithme « Multisampling anti-aliasing » (MSAA) en 4x. Ensuite, les constructeurs peuvent toujours implémenter des algorithmes supplémentaires.
Qu'en est-il du support du rendu de texture haute qualité ?
- Vulkan 1.0 a pour but initial d'offrir les mêmes fonctionnalités que OpenGL 4.X. Cette fonctionnalité n'était pas présente dans OpenGL et donc n'est pas pour le moment dans la spécification de Vulkan. Toutefois, ce genre de fonctionnalité devrait être implémentée dans une bibliothèque de plus haut niveau, notamment pour le rendu de polices de caractères.
Qu'en est-il du support multiGPU ?
- Vulkan 1.0 ne supporte pas l'utilisation du plusieurs GPU pour un même rendu (partage des ressources entre les GPU). Cette fonctionnalité devrait arriver avec Vulkan 1.1.
Qui va adopter Vulkan ?
- Les développeurs de jeux vidéo sont intéressés par Vulkan et ce sont les acteurs auxquels on pense en premier, mais d'autres développeurs, notamment d'outils professionnels sont aussi intéressés.
Quelle quantité de code dépendant de la plateforme faut-il écrire dans une application Vulkan ?
- Le cœur de Vulkan n'a pas de code spécifique à la plateforme. La gestion du fenêtrage n'est plus une bibliothèque à part, mais une extension.
Est-ce que Vulkan pourra être utilisé avec d'autres langages que le C ?
- Il n'y a aucun problème dans la réalisation d'un binding, comme cela a été le cas pour OpenGL.
VI-B. Extensions▲
Est-ce que les extensions spécifiques au matériel seront toujours présentes ?
- Oui.
Est-ce que les extensions seront intégrées à la spécification ?
- Oui, les extensions suivront la même procédure que pour OpenGL et pourront être intégrées à la spécification si celle-ci se révèle utile.
Quelles sont les extensions qui pourront être intégrées dans la spécification de Vulkan ?
- Si une extension vous intéresse, indiquez-le, à travers le GitHub de Khronos.
Est-ce que la méthode de chargement dynamique des fonctions reste similaire à OpenGL ?
- Deux fonctions existent pour charger des pointeurs de fonction, une valide pour l'instance Vulkan en cours et une pour les fonctions spécifiques pour un périphérique.
VI-C. Shaders▲
Y a-t-il un compilateur HLSL pour SPIR-V ?
- Le consortium n'a pas travaillé sur un tel compilateur. Le compilateur GLSL a été réalisé pour faciliter la transition de OpenGL vers Vullkan. Toutefois, la communauté pourrait apporter un tel outil.
Est-ce que les shaders Vulkan s'écrivent de la même façon que les shaders OpenGL ?
- Avec Vulkan, vous pouvez continuer à écrire les shaders en GLSL ou choisir un autre langage alors qu'en OpenGL, seul le GLSL est disponible.
Est-ce que la spécification SPIR-V garantit que les shaders donneront le même résultat sur tous les matériels ?
- C'est le souhait du consortium.
VI-D. Matériel▲
Qu'en est-il du support de Vulkan sur les plateformes de Microsoft ?
- Microsoft n'a pas annoncé de support de Vulkan sur leurs plateformes (tout comme cela pouvait l'être pour OpenGL). Bien sûr les pilotes sont compatibles Windows et pourront donc offrir les fonctionnalités de Vulkan. Il sera donc nécessaire, tout comme avec OpenGL, de charger les pointeurs de fonction vers les fonctions de Vulkan.
Quel est le statut du support Vulkan sur le matériel Apple ?
- Apple fait partie du consortium Khronos. Toutefois, l'entreprise n'a divulgué aucune information sur un tel support. Apple semble uniquement se concentrer sur le support de Metal. Du point de vue de Khronos, rien ne bloque le support de Vulkan.
Est-ce que le Raspberry Pi supportera Vulkan ?
- Broadcom est un membre du consortium, mais aucune information n'existe sur un tel support.
Que se passe-t-il si un test de conformité évolue et rend le matériel incompatible ?
- Il n'y a pas de mécanisme pour retirer la conformité d'un matériel par rapport aux évolutions des tests. L'avantage d'avoir les tests open source est que les utilisateurs peuvent exécuter eux-mêmes les tests et remonter des soucis. Ainsi, les constructeurs auront plus de motivation pour rendre leurs pilotes conformes.
Est-ce que Vulkan sera moins performant sur mobiles que sur PC ?
- Les plateformes mobiles et PC sont vus de la même façon pour la bibliothèque. Ainsi, le programmeur a accès à la puce graphique que ce soit sur mobiles ou PC.
VII. Commenter▲
Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum.