Après deux ans de travail, le consortium Khronos, chargé de développer des normes graphiques, a publié la spécification Vulkan 1.3, définissant l'API pour accéder aux capacités graphiques et de calcul des GPU. La nouvelle spécification intègre les corrections et les extensions accumulées durant ces deux années. Il est à noter que les exigences de la spécification Vulkan 1.3 sont conçues pour le matériel graphique de classe OpenGL ES 3.1, ce qui garantira la prise en charge de la nouvelle API graphique sur tous les GPU prenant en charge Vulkan 1.2. L'outil Vulkan SDK devrait être publié à la mi-février. En plus de la spécification principale, des extensions supplémentaires pour les appareils mobiles et de bureau de milieu et haut de gamme seront proposées dans le cadre de l'édition « Vulkan Milestone ».
Dans le même temps, un plan pour la mise en œuvre de la prise en charge de la nouvelle spécification et des extensions supplémentaires sur les cartes graphiques et les pilotes des appareils a été présenté. Des produits prenant en charge Vulkan 1.3 sont en préparation par des entreprises comme Intel, AMD, ARM et NVIDIA. Par exemple, AMD a annoncé qu'elle allait bientôt assurer le support de 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 est en train de préparer la publication de pilotes prenant en charge Vulkan 1.3 pour Linux et Windows. ARM ajoutera le support de Vulkan 1.3 dans les GPU Mali.
Les principales nouveautés :
- La prise en charge des passages de rendu simplifiés (Streamlining Render Passes, VK_KHR_dynamic_rendering) a été mise en œuvre, permettant de commencer le rendu sans créer de passages de rendu ni d'objets de framebuffer.
- De nouvelles extensions ont été ajoutées pour simplifier la gestion de la compilation des pipelines graphiques (pipeline, un ensemble d'opérations transformant les primitives graphiques vectorielles et les textures en représentation pixel).
- 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 à compiler et à attacher.
- VK_EXT_pipeline_creation_cache_control — fournit des outils avancés de gestion sur quand et comment compiler les pipelines.
- VK_EXT_pipeline_creation_feedback — fournit des informations sur les pipelines compilés pour simplifier le profilage et le débogage.
- Certain features have been moved from optional to mandatory. For example, the implementation of buffer addresses (VK_KHR_buffer_device_address) and the Vulkan memory model, which determines how concurrently executing threads can access shared data and synchronization operations, are now mandatory.
- Tools for precise subgroup size control (VK_EXT_subgroup_size_control) have been provided, allowing manufacturers to support multiple subgroup sizes while developers can select the required size.
- The VK_KHR_shader_integer_dot_product extension has been introduced, which can be used to optimize the work of machine learning frameworks through hardware acceleration of scalar product operations.
- A total of 23 new extensions have been included:
- 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_synchronization2
- VK_KHR_zero_initialize_workgroup_memory
- VK_EXT_4444_formats
- VK_EXT_extended_dynamic_state
- VK_EXT_extended_dynamic_state2
- VK_EXT_image_robustness
- 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
- A new object type VkPrivateDataSlot has been added. A total of 37 new commands and more than 60 structures have been implemented.
- The SPIR-V 1.6 specification has been updated, defining a universal intermediate representation for shaders applicable to both graphics and parallel computations. SPIR-V implies a separate shader compilation phase to intermediate representation, allowing the creation of front-ends for various high-level languages. Based on different high-level implementations, a single intermediate code is generated that can be used by OpenGL, Vulkan, and OpenCL drivers without using embedded shader compilers.
- The concept of compatibility profiles has been proposed. The first baseline profile has been prepared by Google for the Android platform, simplifying the device's determination of support levels for Vulkan's extended capabilities beyond the Vulkan 1.0 specification. For most devices, support for the profile can be ensured without the need for OTA updates.
Rappelons que l'API Vulkan se distingue par une simplification radicale des pilotes, le déplacement de la génération de commandes GPU vers l'application, la possibilité d'intégrer des couches de débogage, l'unification de l'API pour différentes plateformes et l'utilisation d'une représentation intermédiaire précompilée du code pour l'exécution sur le GPU. Pour garantir des performances élevées et prévisibles, Vulkan offre aux applications des outils pour contrôler directement les opérations du GPU et un support intégré pour le traitement multithread des commandes GPU, minimisant ainsi les frais généraux imposés par le pilote, tandis que les fonctionnalités mises en œuvre côté pilote sont considérablement simplifiées et deviennent plus prévisibles. Par exemple, des opérations comme la gestion de la mémoire et le traitement des erreurs, qui sont mises en œuvre dans OpenGL côté pilote, sont déplacé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 différents 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 vérifier le code, déboguer et profiler lors de leur développement. Pour la création de shaders, une nouvelle représentation intermédiaire portable SPIR-V est proposée, basée sur LLVM et utilisant des technologies fondamentales communes avec OpenCL. Pour la gestion des appareils et des écrans dans Vulkan, une interface WSI (Window System Integration) est proposée, visant à résoudre à peu près les mêmes tâches que EGL dans OpenGL ES. Le support de WSI est disponible dans Wayland par défaut — toutes les applications utilisant Vulkan peuvent être exécutées dans des environnements non modifiés. serveurs Wayland. La possibilité de fonctionnement via WSI est également assurée pour Android, X11 (avec DRI3), Windows, Tizen, macOS et iOS.
Source : opennet.ru
