Le consortium Khronos, qui développe des normes graphiques,
la spécification , qui définit l'API pour accéder aux capacités graphiques et de calcul des GPU. La nouvelle spécification intègre les corrections accumulées au cours de deux ans et . Les pilotes prenant en charge la nouvelle version de Vulkan ont déjà été Intel, , ARM, Imagination Technologies et . Dans Mesa, le support de Vulkan 1.2 est proposé pour les pilotes (cartes AMD) et (Intel). Le support de Vulkan 1.2 a également été implémenté dans le débogueur , et le jeu d'exemples .
Principales :
- HLSL DXC
HLSL, y compris les types mathématiques, le contrôle de flux, les fonctions, les ensembles, les types de ressources, les espaces de noms, Shader Model 6.2, structures et méthodes, mais permet également d'utiliser des extensions spécifiques à Vulkan, telles que VKRay de NVIDIA. Dans le mode HLSL au-dessus de Vulkan, des jeux tels que Destiny 2, Red Dead Redemption II, Assassin’s Creed Odyssey et Tomb Raider ont été organisés.
La spécification - SPIR-V 1.5 SPIR-V implique la mise en place d'une phase distincte de compilation des shaders en représentation intermédiaire, ce qui permet de créer des frontends pour différents langages de haut niveau. Sur la base de diverses implémentations de haut niveau, un code intermédiaire unique est généré, pouvant être utilisé par les pilotes OpenGL, Vulkan et OpenCL sans utiliser de compilateur de shaders intégré.
Le principal API Vulkan inclut 23 extensions, permettant d'augmenter la performance, d'améliorer la qualité visuelle et de simplifier le développement. Parmi les extensions ajoutées :
- L'API principale de Vulkan comprend 23 extensions qui ont permis d'augmenter les performances, d'améliorer la qualité d'affichage et de simplifier le développement. Parmi les extensions ajoutées :
- (Sémaphore chronologique), unifiant les synchronisations avec l'hôte et les files d'attente de périphériques (permettant de se passer d'un seul primitive pour synchronisation bidirectionnelle entre le périphérique et l'hôte, sans utiliser de primitives distinctes VkFence et VkSemaphore). Les nouveaux sémaphores sont présentés sous la forme d'une valeur 64 bits monotoniquement croissante, pouvant être suivie et mise à jour dans plusieurs threads.

- Possibilité d'utiliser des types numériques à précision réduite dans les shaders ;
- Version compatible HLSL de la disposition de mémoire ;
- Ressources non liées (bindless), supprimant la limite du nombre de ressources disponibles pour les shaders grâce à l'utilisation d'un espace virtuel commun de mémoire système et de mémoire GPU ;
- , définissant comment les threads exécutés en parallèle peuvent accéder aux données partagées et aux opérations de synchronisation ;
- pour la réutilisation des descripteurs de disposition dans plusieurs shaders ;
- Liens de noyaux.
Liste complète des extensions ajoutées :
- (Sémaphore chronologique), unifiant les synchronisations avec l'hôte et les files d'attente de périphériques (permettant de se passer d'un seul primitive pour synchronisation bidirectionnelle entre le périphérique et l'hôte, sans utiliser de primitives distinctes VkFence et VkSemaphore). Les nouveaux sémaphores sont présentés sous la forme d'une valeur 64 bits monotoniquement croissante, pouvant être suivie et mise à jour dans plusieurs threads.
- plus de 50 nouvelles structures et 13 fonctions ;
- Des versions abrégées des spécifications pour les plateformes cibles spécifiques ont été préparées, simplifiant le travail sur des plateformes pour lesquelles toutes les extensions ne sont pas encore prises en charge, et permettant de se passer d'une activation sélective des capacités de base de l'API Vulkan.
- Le projet visant à assurer la portabilité avec d'autres API graphiques a été poursuivi. Par exemple, dans Vulkan, des extensions ont été proposées pour traduire OpenGL (), OpenCL (, ), OpenGL ES (GLOVE, Angle) et DirectX (, ) via l'API Vulkan, ainsi que, vice versa, pour assurer le fonctionnement de Vulkan sur des plateformes sans son support natif ( et pour fonctionner au-dessus d'OpenGL et DirectX, et gfx-rs pour fonctionner au-dessus de Metal).
Des extensions ont été ajoutées pour améliorer la compatibilité avec DirectX et HLSL.
VK_KHR_host_query_reset, VK_KHR_uniform_buffer_standard_layout, VK_EXT_scalar_block_layout, VK_KHR_separate_stencil_usage, VK_KHR_separate_depth_stencil_layouts, ainsi que des fonctionnalités spécifiques HLSL ont été mises en œuvre dans SPIR-V.
Parmi les plans futurs, le développement d'extensions pour l'apprentissage machine, le ray tracing, l'encodage et le décodage vidéo, le support de VRS (variable-rate shading) et des Mesh shaders est à noter.
Rappelons que l'API Vulkan révolutionne les pilotes avec une simplification radicale, en déplaçant la génération des commandes GPU côté application, en permettant la connexion de couches de débogage, en unifiant l'API pour différentes plateformes et en appliquant une représentation intermédiaire précompilée du code pour l'exécution côté GPU. Pour assurer des performances élevées et prévisibles, Vulkan offre aux applications des moyens de gérer directement les opérations GPU et intègre un support pour le traitement multithread des commandes GPU, ce qui minimise les surcharges introduites par le pilote, et les capacités mises en œuvre côté pilote deviennent significativement simplifiées et plus prévisibles. Par exemple, des opérations telles que la gestion de la mémoire et le traitement des erreurs, qui sont mises en œuvre dans OpenGL côté pilote, sont transférées au niveau de l'application dans Vulkan.
Vulkan couvre toutes les plateformes disponibles et fournit une API unique pour les systèmes de bureau, mobiles et Web, permettant d'utiliser une API commune pour divers processeurs graphiques et domaines d'application. Grâce à l'architecture multicouche de Vulkan, qui implique la création d'outils travaillant avec n'importe quel GPU, les fabricants de matériel peuvent utiliser des outils standards pour la vérification du code, le débogage et le profilage lors du développement. Pour la création des shaders, une nouvelle représentation intermédiaire portable SPIR-V, basée sur LLVM et utilisant des technologies de base communes avec OpenCL, est proposée. Pour la gestion des dispositifs et des écrans, Vulkan propose une interface WSI (Window System Integration), qui résout à peu près les mêmes problèmes que EGL dans OpenGL ES. Le support de WSI est disponible par défaut dans Wayland : toutes les applications utilisant Vulkan peuvent être exécutées dans des environnements de serveurs Wayland non modifiés. La possibilité de travailler via WSI est également assurée pour Android, X11 (avec DRI3), Windows, Tizen, macOS et iOS.
Source : opennet.ru


