Publication de la norme graphique Vulkan 1.3

Après deux ans de travail, le consortium de standards graphiques Khronos a publié la spécification Vulkan 1.3, qui définit une API permettant d'accéder aux capacités graphiques et informatiques des GPU. La nouvelle spécification intègre des corrections et des extensions accumulées sur deux ans. Il est à noter que les exigences de la spécification Vulkan 1.3 sont conçues pour les équipements graphiques de classe OpenGL ES 3.1, ce qui garantira la prise en charge de la nouvelle API graphique dans tous les GPU prenant en charge Vulkan 1.2. Les outils Vulkan SDK devraient être publiés à la mi-février. En plus de la spécification principale, il est prévu de proposer des extensions supplémentaires pour les appareils mobiles et de bureau de milieu de gamme et haut de gamme, qui seront prises en charge dans le cadre de l'édition « Vulkan Milestone ».

Dans le même temps, un plan est présenté pour mettre en œuvre la prise en charge de la nouvelle spécification et des extensions supplémentaires dans les cartes graphiques et les pilotes de périphériques. Intel, AMD, ARM et NVIDIA se préparent à lancer des produits prenant en charge Vulkan 1.3. Par exemple, AMD a annoncé qu'il prendrait bientôt en charge Vulkan 1.3 dans la série de cartes graphiques AMD Radeon RX Vega, ainsi que dans toutes les cartes basées sur l'architecture AMD RDNA. NVIDIA se prépare à publier des pilotes prenant en charge Vulkan 1.3 pour Linux et Windows. ARM ajoutera la prise en charge de Vulkan 1.3 aux GPU Mali.

Principales nouveautés :

  • La prise en charge des passes de rendu simplifiées (Streamlining Render Passes, VK_KHR_dynamic_rendering) a été implémentée, vous permettant de démarrer le rendu sans créer de passes de rendu ni d'objets framebuffer.
  • De nouvelles extensions ont été ajoutées pour simplifier la gestion de la compilation du pipeline graphique (pipeline, un ensemble d'opérations qui transforme les primitives et textures graphiques vectoriels en représentations en pixels).
    • VK_EXT_extended_dynamic_state, VK_EXT_extended_dynamic_state2 - ajoutent des états dynamiques supplémentaires pour réduire le nombre d'objets d'état compilés et attachés.
    • VK_EXT_pipeline_creation_cache_control - Fournit des contrôles avancés sur le moment et la manière dont les pipelines sont compilés.
    • VK_EXT_pipeline_creation_feedback - Fournit des informations sur les pipelines compilés pour faciliter le profilage et le débogage.
  • Un certain nombre de fonctionnalités sont passées de facultatives à obligatoires. Par exemple, l'implémentation de références de tampon (VK_KHR_buffer_device_address) et du modèle de mémoire Vulkan, qui définit comment les threads concurrents peuvent accéder aux données partagées et aux opérations de synchronisation, sont désormais obligatoires.
  • Un contrôle de sous-groupe précis (VK_EXT_subgroup_size_control) est fourni afin que les fournisseurs puissent prendre en charge plusieurs tailles de sous-groupes et que les développeurs puissent sélectionner la taille dont ils ont besoin.
  • L'extension VK_KHR_shader_integer_dot_product a été fournie, qui peut être utilisée pour optimiser les performances des frameworks d'apprentissage automatique grâce à l'accélération matérielle des opérations de produits scalaires.
  • Au total, 23 nouvelles extensions sont incluses :
    • VK_KHR_copy_commands2
    • VK_KHR_dynamic_rendering
    • VK_KHR_format_feature_flags2
    • VK_KHR_maintenance4
    • VK_KHR_shader_integer_dot_product
    • VK_KHR_shader_non_semantic_info
    • VK_KHR_shader_terminate_invocation
    • VK_KHR_synchronisation2
    • VK_KHR_zero_initialize_workgroup_memory
    • VK_EXT_4444_formats
    • VK_EXT_extended_dynamic_state
    • VK_EXT_extended_dynamic_state2
    • VK_EXT_image_robustesse
    • VK_EXT_inline_uniform_block
    • VK_EXT_pipeline_creation_cache_control
    • VK_EXT_pipeline_creation_feedback
    • VK_EXT_private_data
    • VK_EXT_shader_demote_to_helper_invocation
    • VK_EXT_subgroup_size_control
    • VK_EXT_texel_buffer_alignment
    • VK_EXT_texture_compression_astc_hdr
    • VK_EXT_tooling_info
    • VK_EXT_ycbcr_2plane_444_formats
  • Ajout d'un nouveau type d'objet VkPrivateDataSlot. 37 nouveaux commandements et plus de 60 structures ont été mis en place.
  • La spécification SPIR-V 1.6 a été mise à jour pour définir une représentation de shader intermédiaire universelle pour toutes les plates-formes et pouvant être utilisée à la fois pour les graphiques et le calcul parallèle. SPIR-V implique de séparer une phase distincte de compilation de shaders en une représentation intermédiaire, ce qui vous permet de créer des interfaces pour différents langages de haut niveau. Sur la base de diverses implémentations de haut niveau, un seul code intermédiaire est généré séparément, qui peut être utilisé par les pilotes OpenGL, Vulkan et OpenCL sans utiliser le compilateur de shader intégré.
  • Le concept de profils de compatibilité est proposé. Google est le premier à publier un profil de base pour la plate-forme Android, ce qui permettra de déterminer plus facilement le niveau de prise en charge des fonctionnalités avancées de Vulkan sur un appareil au-delà de la spécification Vulkan 1.0. Pour la plupart des appareils, la prise en charge des profils peut être fournie sans installer les mises à jour OTA.

Rappelons que l'API Vulkan se distingue par sa simplification radicale des pilotes, le transfert de la génération des commandes GPU côté application, la possibilité de connecter des couches de débogage, l'unification de l'API pour différentes plateformes et l'utilisation d'un fichier précompilé. représentation intermédiaire du code à exécuter côté GPU. Pour garantir des performances et une prévisibilité élevées, Vulkan fournit aux applications un contrôle direct sur les opérations GPU et une prise en charge native du multithreading GPU, ce qui minimise la surcharge du pilote et rend les fonctionnalités côté pilote beaucoup plus simples et prévisibles. Par exemple, les opérations telles que la gestion de la mémoire et la gestion des erreurs, implémentées dans OpenGL côté pilote, sont déplacées au niveau application dans Vulkan.

Vulkan couvre toutes les plates-formes disponibles et fournit une API unique pour les ordinateurs de bureau, les appareils mobiles et le Web, permettant d'utiliser une API commune sur plusieurs GPU et applications. Grâce à l'architecture multicouche de Vulkan, qui signifie des outils qui fonctionnent avec n'importe quel GPU, les OEM peuvent utiliser des outils standard de l'industrie pour la révision, le débogage et le profilage du code pendant le développement. Pour créer des shaders, une nouvelle représentation intermédiaire portable, SPIR-V, est proposée, basée sur LLVM et partageant les technologies de base avec OpenCL. Pour contrôler les appareils et les écrans, Vulkan propose l'interface WSI (Window System Integration), qui résout à peu près les mêmes problèmes qu'EGL dans OpenGL ES. La prise en charge de WSI est disponible immédiatement dans Wayland : toutes les applications utilisant Vulkan peuvent s'exécuter dans un environnement de serveurs Wayland non modifiés. La possibilité de travailler via WSI est également prévue pour Android, X11 (avec DRI3), Windows, Tizen, macOS et iOS.

Source: opennet.ru

Ajouter un commentaire