# Vulkan (API)

Vulkan d'abord annoncé sous l'appellation OpenGL Next est une spécification proposée par le consortium Khronos Group pour la programmation graphique. Elle est mise en œuvre par plusieurs constructeurs de cartes graphiques sous forme d'une interface de programmation portant le même nom et a pour but de remplacer à terme OpenGL et ses dérivés en exploitant plus efficacement les architectures informatiques modernes. 25 ans après la création d'OpenGL, elle vise à unifier les versions mobile (OpenGL ES) et bureau (OpenGL), fonctionne nativement sur Microsoft Windows, GNU/Linux et Android, ainsi que sous MacOS et iOS via la portability initiative (l'API MoltenVK) en se basant sur Metal. Une première version est sortie en février 2016, supportée entre autres par AMD et Nvidia, et est compatible avec tout système supportant OpenGL ES 3.1.

## Historique

Vulkan se fonde sur le travail effectué par AMD sur l'API Mantle (en), et auparavant, au sein de Mesa 3D, par Gallium3D (réduction de la couche du pilote graphique et relation plus directe au GPU et à sa mémoire). En particulier son module LLVMpipe qui permet la précompilation dans un langage intermédiaire et une meilleure utilisation des architectures de microprocesseurs multi-cœurs des architectures modernes pour le rendu 3D.
Les développeurs du pilote libre Vulkan, pour processeurs graphiques Intel, décrivent Vulkan comme un « Gallium3D 2.0 ». Le langage SPIR utilisant à l'origine LLVM, SPIR-V qui en est une version modifiée permettra une implémentation de LLVM pour son interprétation.

### Avancées majeures

Parmi les avantages :
* Meilleure gestion du multiprocesseur, les différents processeurs pouvant envoyer en parallèle des commandes à exécuter ;
* Un pilote simplifié, en donnant au CPU davantage d'accès aux commandes du GPU et à la gestion de sa mémoire ;
* Une meilleure adaptation aux plates-formes mobiles avec notamment la gestion du cas d'une mémoire unifiée et du rendu où chaque thread est dédié à un des rectangles formant l'affichage (dallage).
* Le langage de représentation intermédiaire SPIR-V également utilisé par OpenCL qui permet de simplifier le travail des pilotes dans l'interprétation des shaders sur le GPU, comme OpenCL, à qui il succède.
* La simplification des pilotes et le langage unifié devraient permettre de réduire, pour les développeurs d'application, les difficultés de portabilité du matériel d'un constructeur à un autre
* Calculs non graphiques sur le GPU, comme OpenCL, dont il s'inspire partiellement, mais est complémentaire.
Microsoft a de son côté sorti DirectX 12, la dernière génération de son API Graphique, et Apple a sorti son API Metal. Tous deux ont pour projet d'utiliser les mêmes accès bas niveau au matériel et la portabilité mobile que Mantle ou Vulkan, mais ont l'inconvénient de ne pas être multiplateformes.
Étant donné l'ouverture de l'API, la portabilité et les gains de performances, différents éditeurs de jeux ont déjà annoncé le support de celle-ci par leur moteur, avant même les spécifications définitives, comme le moteur Source 2 de Valve$^,$
La bibliothèque libre GLOVE convertit les appels OpenGL ES, glsl et EGL en appels Vulkan.
Les pilotes libres d'accélération 3D matérielle Mesa 3D pour GNU/Linux comportent trois pilotes permettant de convertir différentes API 3D vers Vulkan, et de bénéficier ainsi de ses performances et plus faible consommation énergétique avec des applications qui sont conçues pour :
* D9VK (obsolète car dorénavant inclus dans DXVK), convertit les appels Direct3D versions 9 vers des appels Vulkan ;
* DXVK, convertit les appels Direct3D versions 9, 10 et 11 vers des appels Vulkan ;
* VKD3D, convertit les appels Direct3D versions 12 vers des appels Vulkan ;
* Zink, convertit les appels OpenGL et OpenGL ES en appel Vulkan, il est intégré à partir du 28 octobre 2019, la bibliothèque, via le sous-système Gallium de Mesa, il est placé entre la couche OpengGL state tracker de Gallium et les pilotes Vulkan, entre la couche du state tracker OpenGL et le pilote Vulkan.

## Participants

Les principales sociétés participant à la norme sont : AMD, Apple, ARM, Blizzard, Broadwell, Codeplay (en), Continental, Electronic Arts, Epic Games, Imagination Technologies, Intel, Lucasfilm, Mediatek, Oculus VR, Oxide, Pixar, Samsung, Sony, TransGaming (en), Unity, Godot Engine, Valve, Vivante, Qt.

## Support
### Historique

* En février 2016 AMD, Intel et Nvidia proposent une version beta de leurs pilotes supportant Vulkan$^,$.
* Le 17 février 2016, The Talos Principle de Croteam devient le 1er jeu vidéo supportant partiellement Vulkan.
* Le 9 avril 2016 , une mise à jour de la version stable des pilotes Windows et Linux par Nvidia permet l'utilisation de Vulkan.
* En avril 2016, la préversion d'Android Nougat pour développeurs prévoit l'utilisation des API 3D Vulkan$^,$.
* La nouvelle console de jeux Switch de Nintendo est certifiée Vulkan le 18 décembre 2016
* Lors de la conférence SDC 2016, en mai 2016, la société Samsung annonce que son prochain modèle de smartphone utilisera Vulkan, et annonce des gains en durée de vie de la batterie.
* Fin septembre 2016, Unity annonce que les jeux Android basés sur son moteur disposent en beta de Vulkan, ce qui permet des performances améliorées d'environ 35%, et une consommation énergétique moindre.
* En octobre 2016 , un premier moteur de jeu vidéo libre se basant sur Vulkan, Intrinsic, est publié sur GitHub.
* En février 2017, Intel annonce que la partie graphique de ses processeurs supportera Vulkan.
* En février 2018, Valve, LunarG et The Brenwill Workshop annoncent que le jeu vedette de Valve, Dota 2, est porté via MoltenVK (implémentation de Metal en Vulkan) sur MacOS avec un gain de performances de 50% par rapport à la version OpenGL.
* En février 2018, les développeurs du moteur de jeu libre Godot, annoncent qu'ils vont s'orienter vers Vulkan et Open GL ES 2.0, plutôt qu'OpenGL ES 3.0. Il devrait être prêt pour Godot 4.0, qui devrait sortir en 2022.
* En novembre 2018, les développeurs du moteur 3D libre OGRE, annoncent qu'ils sont en train de porter le moteur sur Vulkan.

### Compatibilité matérielle

| Société | Matériel | Matériel | Matériel | Matériel | Support de Vulkan 1.0 | Support de Vulkan 1.0 | Support de Vulkan 1.0 |
| Société | Microarchitecture | Disponible depuis | GPUs (Die) | Carte graphique/SoC | Linux | Microsoft Windows (Windows 7 et supérieur) | Android Nougat et supérieur |
| AMD | RDNA 4 | 01/2025 | Navi 48, Navi 44 | Radeon RX 9000 | | | |
| AMD | RDNA 3.5 | 07/2024 | Strix Halo, Strix Point, Krakhan Point | | | | |
| AMD | RDNA 3 | 11/2022 | Navi 31,32,33 Phoenix, Hawk Point | Radeon RX 7000 | | | |
| AMD | RDNA 2 | 10/2020 | Navi 21,22,23,24 Rembrandt, Raphael, Dragon Range | Radeon RX 6000 | | | |
| AMD | RDNA 1 | 07/2019 | Navi 10,12,14 | Radeon RX 5000 | | | |
| AMD | GCN 5th | 08/2017 | Vega 10,12 Vega 20 Raven Ridge, Picasso, Renoir, Cezanne | Radeon Rx Vega series Radeon VII | AMDGPU PRO (Ubuntu & RHEL)$^,$ Mesa/RADV | Radeon Software | NC |
| AMD | GCN 4th | 06/2016 | Polaris 10,11,12 Polaris 20,21,22 Polaris 30 | Radeon Rx 400 Series Radeon Rx 500 Séries | AMDGPU PRO (Ubuntu & RHEL)$^,$ Mesa/RADV | Radeon Software | NC |
| AMD | GCN 3rd | 08/2014 | Tonga, Fiji, Carrizo, Bristol Ridge | Radeon R9 Fury Series Radeon R9 380 Series Radeon R9 285 | | Radeon Software | NC |
| AMD | GCN 2nd | 03/2013 | Bonaire, Hawaii, Kaveri, Kabini, Temash, Mullins, Beema, Carrizo-L | Radeon HD 7790, R9 390 Séries, R7 360, R9 290 Séries, R7 260 Séries, PlayStation 4, Xbox One | En cours d'implémentation | Radeon Software | NC |
| AMD | GCN 1st | 02/2012 | Oland, Cape Verde, Pitcairn, Tahiti, Hainan | Radeon HD 77..–7900 Series , R9 280 , 270 Séries, R7 250 Séries, R9/R7 370 Séries | En cours d'implémentation |
| AMD | TeraScale 3 | 12/2010 | Aruba (Trinity/Richland), Cayman | Radeon HD 6900 Series | non supporté | non supporté | non supporté |
| AMD | TeraScale 2 | 09/2009 | Cedar, Cypress, Juniper, Redwood, Palm, Sumo, Barts, Turks, Caicos, Llano | Radeon HD 5000 Series Radeon HD 6000 Séries | non supporté | non supporté | non supporté |
| AMD | TeraScale 1 | 05/2007 | R600, RV630, RV610, RV790, RV770, … | Radeon HD 2000 Series, HD 3000, HD 4000 | non supporté | non supporté | non supporté |
| Nvidia | Blackwell | 01/2025 | GB202, GB203, GB205, GB206, GB207 | GeForce RTX 50 | | | |
| Nvidia | Ada Lovelace | 09/2022 | AD102, AD103, AD104, AD106, AD107 | GeForce RTX 40 | | | |
| Nvidia | Ampere | 09/2020 | GA100, GA102, GA103, GA104, GA106, GA107 | GeForce RTX 30 | | | |
| Nvidia | Turing | 09/2018 | TU102, TU104, TU106, TU116, TU117 | GeForce RTX 20 GeForce 16 | | | |
| Nvidia | Volta | 06/2017 | GV100, GV10B | TITAN V | | | |
| Nvidia | Pascal | 05/2016 | GP100, GP104, GP106, GP107, GP108, GP10B | GeForce 10 series, Tegra X2 | Nvidia GeForce driver$^,$ | Nvidia GeForce driver | Oui |
| Nvidia | Maxwell 2 | 09/2014 | GM200, GM204, GM206, GM20B | GeForce 900 series, Tegra X1 | Nvidia GeForce driver$^,$ | Nvidia GeForce driver | Oui |
| Nvidia | Maxwell 1 | 02/2014 | GM107, GM108 | GeForce GTX 750 Ti, GTX 750, GTX 860M | Nvidia GeForce driver$^,$ | Nvidia GeForce driver | Oui |
| Nvidia | Kepler | 03/2012 | GK110, GK104, GK106, GK107, GK208 | GeForce 600 series, GeForce 700 series, Tegra K1 | Nvidia GeForce driver$^,$ | Nvidia GeForce driver | Oui |
| Nvidia | Fermi | 03/2010 | GF100, GF104, GF106, GF108, GF110, GF114, GF116, GF117, GF119 | GeForce 400 series, GeForce 500 series | non supporté | non supporté | non supporté |
| Nvidia | Tesla 2.0 | 06/2008 | GT200, GT215, GT216, GT218, | GeForce 200 series, GeForce 300 series | non supporté | non supporté | non supporté |
| Nvidia | Tesla 1.0 | 11/2006 | G80, G84, G86, G92, G94, G96, G98 | GeForce 8 series, GeForce 9 series, GeForce 100 series | non supporté | non supporté | non supporté |
| Intel GPU | Xe2 "Battlemage" | 12/2024 | BMG-G21, Lunar Lake | ARC B Séries | | | |
| Intel GPU | Xe "Alchemist" | 06/2022 | ACM-G10, ACM-G11, ACM-G12, Meteor Lake, Arrow Lake | ARC A Séries | | | |
| Intel GPU | Xe-LP | 10/2020 | DG1 Rocket Lake, Alder Lake, Raptor Lake | Xe DG1 Iris Xe | | | |
| Intel CPU | Arrow Lake | 10/2024 | | Core "Ultra" 200 Séries | | | |
| Intel CPU | Lunar Lake | 09/2024 | | Core "Ultra" 200V Séries | | | |
| Intel CPU | Meteor Lake | 12/2023 | | Core "Ultra" 100 Séries | | | |
| Intel CPU | Raptor Lake | 09/2022 | | Core i3-/i5-/i7-13000 Core i3-/i5-/i7-14000 | | | |
| Intel CPU | Alder Lake | 11/2021 | | Core i3-/i5-/i7-12000 | | | |
| Intel CPU | Rocket Lake | 03/2021 | | Core i5-/i7-11000 | | | |
| Intel CPU | Comet Lake | 04/2020 | | Core i3-/i5-/i7-10000 | | | |
| Intel CPU | Coffee Lake | 10/2017 | | Core i3-/i5-/i7-8000 Core i3-/i5-/i7-9000 | Mesa$^,$ | Intel graphics | NC |
| Intel CPU | Kaby Lake | 01/2017 | | Core i3-/i5-/i7-7000 | Mesa$^,$ | | NC |
| Intel CPU | Skylake | 08/2015 | | Core i3-/i5-/i7-6000, Pentium G4..., Celeron G39.. | Mesa$^,$ | Prévu | NC |
| Intel CPU | Broadwell | 09/2014 | | Core M-5Y.., Core i3-/i5-/i7-5000 | Mesa$^,$ | non supporté | NC |
| Intel CPU | Haswell | 09/2012 | | Core i3-/i5-/i7-4000, Pentium G3..., Celeron G18.. | Mesa$^,$ | non supporté | NC |
| Intel CPU | Ivy Bridge | 04/2012 | | Core i3-/i5-/i7-3000, Pentium G2..., Celeron G16.. | | non supporté | NC |
| Intel CPU | Sandy Bridge | 01/2011 | | Core i3-/i5-/i7-2000, Pentium G..., Celeron G... | non supporté | non supporté | NC |
| Intel CPU | Westmere | 02/2012 | | Core i3-/i5-/i7-..., Pentium G69.., Celeron G1101 | non supporté | non supporté |
| Imagination Technologies | PowerVR Series 8XE | 02/2016 | GE8200, GE8300 | | PowerVR Graphics SDK v4.1 | PowerVR Graphics SDK v4.1 | PowerVR Graphics SDK v4.1 |
| Imagination Technologies | PowerVR Series 7XT | 11/2014 | GT7200, GT7400, GT7600, GT7800, GT7900 | Apple A9, Helio X30 (MT679?) | PowerVR Graphics SDK v4.1 | PowerVR Graphics SDK v4.1 | PowerVR Graphics SDK v4.1 |
| Imagination Technologies | PowerVR Series 7XE | 11/2014 | GE7400, GE7800 | | PowerVR Graphics SDK v4.1 | PowerVR Graphics SDK v4.1 | PowerVR Graphics SDK v4.1 |
| Imagination Technologies | PowerVR Series 6XT | 01/2014 | GX6240, GX6250, GX6450, GX6650 | Apple A8, A8X, MediaTek MT8173, MT8176, | PowerVR Graphics SDK v4.1 | PowerVR Graphics SDK v4.1 | PowerVR Graphics SDK v4.1 |
| Imagination Technologies | PowerVR Series 6XE | 01/2014 | G6050, G6060, G6100 (XE), G6110 | RK3368 | PowerVR Graphics SDK v4.1 | PowerVR Graphics SDK v4.1 | PowerVR Graphics SDK v4.1 |
| Imagination Technologies | PowerVR Series 6 (Rogue) | 01/2012 | G6100, G6200, G6230, G6400, G6430, G6630 | MediaTek MT6595M, MT6595T, MT6595M, MT6795, MT8135, Helio X10 (MT6795), LG H13, Apple A7, Atom Z3460, Z3480, Z3530, Z3560, Z3570, Z3580 | PowerVR Graphics SDK v4.1 | PowerVR Graphics SDK v4.1 | PowerVR Graphics SDK v4.1 |
| Imagination Technologies | PowerVR Series 5XT | 01/2012 | SGX543, SGX544, SGX554 | Apple S1, A5, A5X, A6, A6X, NovaThor L8540, L8580, L9540, TI OMAP 4470, 5430, 5432, MediaTek MT5327, MT6589M, MT6589T, MT6589, MT8117, MT8121, MT8125, MT8389, Atom Z2460, Z2520, Z2560, Z2580, Z2760, Exynos 5410 | non supporté | non supporté | non supporté |
| Qualcomm | Adreno X1 séries | | | Snapdragon X Elite | | | |
| Qualcomm | Adreno 600 series | | Adreno 640 | Snapdragon 855 | 1.1 | 1.1 | 1.1 |
| Qualcomm | Adreno 500 series | | Adreno 510, Adreno 530, Adreno 540 | Snapdragon 430, 625, 650, 652, 820, 821, 835, 845 | 1.0 | 1.0 | 1.0 |
| Qualcomm | Adreno 400 series | | | Snapdragon 415, 615, 616, 617, 805, 808, 810 | 1.0 | 1.0 | 1.0 |
| Qualcomm | Adreno 300 series | | | Snapdragon 200, 208, 210, 212, 400, 410, 412, 600, 800, 801 | non supporté | non supporté | non supporté |
| ARM |
| ARM | Bifrost | 06/2016 | Mali-G71, Mali-G51 | Kirin 960 | 1.0 | 1.0 | 1.0 |
| ARM | Midgard 4th | Q4 2015 | Mali-T860, Mali-T830, Mali-T880 | Exynos 8890, Exynos 7870, Kirin 950, 955, MediaTek MT6738, MT6750, Helio X20 (MT6797), X25 (MT6797T), P10 (MT6755), P20 (MT6757) | 1.0 | 1.0 | 1.0 |
| ARM | Midgard 3rd | 10/2013 | Mali-T760, … | Exynos 7420, Exynos 5433, MT6752, MT6732, RK3288 | 1.0 | 1.0 | 1.0 |
| ARM | Midgard 2nd | 08/2012 | Mali-T600 series, T720 | Exynos 5250, 5260, 5410, 5420, 5422, 5430, 5800, 7580, Mediatek MT6735, MT6753, Kirin 920, 925, 930, 935 | non supporté | non supporté | non supporté |

### Moteurs de jeux compatibles

* Amazon Lumberyard
* Source 2 – En mars 2015, Valve annonce que Source 2, successeur du moteur originel Source, supportera Vulkan$^,$.
* Serious Engine 4 – En février 2016, Croteam annonce le support de Vulkan dans leur moteur.
* Unreal Engine 4 – En février 2016, Epic Games annonce le support de Vulkan lors d'un événement organisé par Samsung$^,$.
* id Tech 6 – En mai 2016, id Software annonce le support de Vulkan pour la version 6 de leur moteur.
* id Tech 7
* CryEngine – Crytek a annoncé vouloir inclure le support de Vulkan pour son CryEngine.
* Unity – Support Vulkan à partir de la version 5.6 pour Android, Linux et Windows. Le support dans l'éditeur est disponible à partir de la version 2018.2.
* Xenko – Le support a été rajouté en juillet 2016.
* Intrinsic – Un moteur de jeu libre publié sur GitHub.
* Torque 3D MIT - En avril 2016, la communauté de développeurs annonce penser au support de Vulkan.
* Armory Engine - Moteur de jeu libre intégré dans Blender 3D.
* Godot Game Engine 4.0 (beta)-moteur de jeu libre.