This article'slead sectionmay be too short to adequatelysummarize the key points. Please consider expanding the lead toprovide an accessible overview of all important aspects of the article.(August 2023) |
| Vulkan | |
|---|---|
| Original authors | AMD,DICE (originalMantle design) |
| Developers | Khronos Group (donated and derived variant, as Vulkan)[1] |
| Initial release | 16 February 2016; 9 years ago (16 February 2016)[2] |
| Stable release | |
| Written in | C[4] (also available C++ API[5]) |
| Operating system | Android,Linux,BSD Unix,[6]Windows,Nintendo Switch,[7][8][9]Fuchsia,Raspberry Pi,[10]vxWorks,[11]QNX,[12]HarmonyOS,OpenHarmony,Oniro,Haiku,Stadia,Tizen,[13][14] Through portability workarounds:macOS,[15]iOS[16],Aurora OS[17] |
| Type | 3D graphics andcomputeAPI[18] |
| License | Apache Software License 2.0,MIT License, Creative Commons Attribution 4.0 International[19] |
| Website | https://www.vulkan.org/[20] |
| Repository | |
Vulkan is across-platformAPI andopen standard for3D graphics andcomputing.[21][22][23] It was intended to address the shortcomings ofOpenGL, and allow developers more control over theGPU. It is designed to support a wide variety ofGPUs,CPUs and operating systems, and modernmulti-core CPUs also.
Microsoft supports Vulkan 1.2 (and more) on Windows 10 and 11, with a downloadable compatibility pack.[24]
Vulkan targets high-performance real-time 3D-graphics applications, such asvideo games andinteractive media, and highlyparallelized computing. Vulkan is intended to offer higher performance and more efficientCPU andGPU usage compared to the olderOpenGL andDirect3D 11 APIs. It does so by providing a considerably lower-level API for the application than the older APIs, that more closely resembles how modern GPUs work.
Vulkan is comparable toApple'sMetal API andMicrosoft'sDirect3D 12. In addition to its lower CPU usage, Vulkan is designed to allow developers to better distribute work amongmultiple CPU cores.[25]
Vulkan was first announced by the non-profitKhronos Group atGDC 2015.[18][26][27] The Vulkan API was initially referred to as the "next generationOpenGL initiative", or "OpenGL next"[28] byKhronos, but use of those names was discontinued when "Vulkan" was announced.[29]
Vulkan is derived from and built upon components ofAMD'sMantle API, which was donated by AMD to Khronos with the intent of giving Khronos a foundation on which to begin developing a low-level API that they could standardize across the industry.[18]

Vulkan is intended to provide a variety of advantages over other APIs as well as over its predecessor,OpenGL. Vulkan offers lower overhead, more direct control over the GPU, and lower CPU usage.[27] Its overall concept and feature set are similar to those ofMantle. They were later adopted by Microsoft withDirect3D 12 and by Apple withMetal.
Intended advantages of Vulkan over previous-generation APIs include the following:
Vulkan is available on multiple modern operating systems andarchitectures,[citation needed] and provides a single API for both desktop and mobile graphics devices, whereas previously these were split between OpenGL andOpenGL ES respectively. Like OpenGL, and in contrast to Direct3D 12, the Vulkan API is not locked to a single OS or device form factor. Vulkan runs natively on at leastAndroid,Linux,BSD Unix,QNX,Haiku,[30]Nintendo Switch,Raspberry Pi,Stadia,Fuchsia,Tizen, andWindows 7,8,10, and11.MoltenVK provides freely licensed[31][32][33] third-party support formacOS,iOS andtvOS by wrapping over Apple's Metal API.[34]
Vulkan reduces load on CPUs through the use ofbatching and other low-level optimizations, therefore reducing CPU workloads and leaving the CPU free to do more computation or rendering than would otherwise be possible.[35][36]
Direct3D 11 and OpenGL 4 were initially designed for use withsingle-core CPUs and only received augmentation to be executed on multi-cores. Even when application developers use the augmentations, these APIs regularly do not scale well on multi-cores. Vulkan offers improved scalability on multi-core CPUs due to the modernized threading architecture.[37][38]
OpenGL uses the high-level languageGLSL for writingshaders, which forces each OpenGL driver to implement its owncompiler for GLSL. This then executes at application runtime to translate the program's shaders into the GPU's machine code. In contrast, Vulkan drivers are supposed to ingest shaders already translated into an intermediate binary format calledSPIR-V (Standard Portable Intermediate Representation), analogous to the binary format thatHLSL shaders are compiled into inDirect3D. By allowing shader pre-compilation, application initialization speed is improved and a larger variety of shaders can be used per scene. A Vulkan driver only needs to perform GPU specific optimization and code generation, resulting in easier driver maintenance, and potentially smaller driver packages.[39] The developers of applications now can also more easily obfuscate proprietary shader code, due to shaders not being stored directly as source code, howevertools are provided that can decompile SPIR-V to human-readable high-level code.[38][23]
| OpenGL | Vulkan[41] |
|---|---|
| One single global state machine | Object-based with no global state |
| State is tied to a single context | All state concepts are localized to acommand buffer |
| Operations can only be executed sequentially | Multi-threaded programming is possible |
| GPU memory and synchronization are usually hidden | Explicit control over memory management and synchronization |
| Extensive error checking | Vulkan drivers do no error checking at runtime; there is a validation layer for developers |
AMD states that "Vulkan supports close-to-metal control, enabling faster performance and better image quality across Windows 7, Windows 8.1, Windows 10, and Linux. No other graphics API offers the same powerful combination of OS compatibility, rendering features, and hardware efficiency."[42]
In 2016, AMD's GPU manufacturing competitorNVIDIA stated that "OpenGL is still a great option for a lot of use cases, as it comes at a much lower complexity and maintenance burden than Vulkan, while in many cases still providing great overall performance."[43]
Vulkan 1.0 was released in February 2016.
AtSIGGRAPH 2016, Khronos announced that Vulkan would be getting support for automatic multi-GPU features, similar to what is offered by Direct3D 12.[44] Multi-GPU support included in-API removes the need forSLI orCrossfire which requires graphics cards to be of the same model. API multi-GPU instead allows the API to intelligently split the workload among two or more completely different GPUs.[45] For example, integrated GPUs included on the CPU can be used in conjunction with a high-end dedicated GPU for a slight performance boost.
On March 7, 2018, Vulkan 1.1 was released by the Khronos Group.[46] This first major update to the API standardized several extensions, such as multi-view, device groups, cross-process and cross-API sharing, advanced compute functionality,HLSL support, andYCbCr support.[47] At the same time, it also brought better compatibility with DirectX 12, explicit multi-GPU support, (optional extensions[48] for supporting hardware, e.g. some Nvidia GPUs, on e.g. Windows and Android)ray tracing support,[49][50] and laid the groundwork for the next generation of GPUs.[51] Alongside Vulkan 1.1,SPIR-V was updated to version 1.3.[47]
On January 15, 2020, Vulkan 1.2[52] was released by the Khronos Group.[53] This second major update to the API integrates 23 additional commonly used proven Vulkan extensions into the base Vulkan standard. Some of the most important features are "timeline semaphores for easily managed synchronization", "a formal memory model to precisely define the semantics of synchronization and memory operations in different threads", and "descriptor indexing to enable reuse of descriptor layouts by multiple shaders". The additional features of Vulkan 1.2 improve its flexibility when it comes to implementing other graphics APIs on top of Vulkan, including "uniform buffer standard layout", "scalar block layout", and "separate stencil usage".[54]
On January 25, 2022, Vulkan 1.3 was released by the Khronos Group.[55] This third major update to the API integrates 23 additional commonly used proven Vulkan extensions into the base Vulkan standard.[56] Vulkan 1.3 focuses on reducing fragmentation by making the new features not optional in order for a device to be considered Vulkan 1.3 capable.[55][57] The new features in Vulkan 1.3 include dynamic rendering, additional dynamic state, improved synchronization API, and device profiles.
On December 3, 2024, Vulkan 1.4 was released by the Khronos Group.[58]
When releasingOpenCL 2.2, the Khronos Group announced that OpenCL would converge where possible with Vulkan to enable OpenCL software deployment flexibility over both APIs.[59][60] This has been now demonstrated byAdobe's Premiere Rush using the clspv[61]open sourcecompiler to compile significant amounts of OpenCLC kernel code to run on a Vulkanruntime for deployment onAndroid.[62]
This sectionis inlist format but may read better asprose. You can help byconverting this section, if appropriate.Editing help is available.(May 2021) |
The Khronos Group began a project to create a next generation graphics API in July 2014 with a kickoff meeting atValve.[63] AtSIGGRAPH 2014, the project was publicly announced with a call for participants.[18]
According to the US Patent and Trademark Office, the trademark for Vulkan was filed on February 19, 2015.[64]
Vulkan was formally named and announced atGame Developers Conference 2015, although speculation and rumors centered around a new API existed beforehand and referred to it as "glNext".[65]
In early 2015,LunarG (funded byValve) developed and showcased a Linux driver for Intel which enabled Vulkan compatibility on the HD 4000 series integrated graphics, despite the open-source Mesa drivers not being fully compatible with OpenGL 4.0 until later that year.[66][67] There is still the possibility[68] of Sandy Bridge support, since it supports compute through Direct3D11.
On August 10, 2015,Google announced that future versions ofAndroid would support Vulkan.[69]Android 7.x "Nougat" launched support for Vulkan on August 22, 2016.Android 8.0 "Oreo" has full support.
On December 18, 2015, the Khronos Group announced that the 1.0 version of the Vulkan specification was nearly complete and would be released when conforming drivers were available.[27]
The full Vulkan specification and the open-source Vulkan SDK were released on February 16, 2016.[70]
On February 26, 2018, Khronos Group announced that the Vulkan API became available to all onmacOS andiOS through theMoltenVK library, which enables Vulkan to run on top ofMetal.[71] Other new developments were shown atSIGGRAPH 2018.[72] Previously MoltenVK was a proprietary and commercially licensed solution, butValve made an arrangement with developer Brenwill Workshop Ltd to open-source MoltenVK under the Apache 2.0 license and as a result the library is now availableon GitHub.Valve also announced thatDota 2 can as of February 26, 2018 run onmacOS using the Vulkan API, which is based on MoltenVK.[73]
On February 25, 2019, the Vulkan Safety Critical (SC) Working Group was announced to bring Vulkan GPU acceleration to safety critical industries.[74]
Google'sStadia streamingcloud gaming service used Vulkan on Linux based servers withAMD GPUs.[75]
On January 15, 2020, Vulkan 1.2 was released.
Alongside the Vulkan 1.2 release, the Khronos Group posted a blog post which considered that HLSL support in Vulkan had reached "production ready" status, given the improvements in Microsoft's DXC compiler and Khronos's glslang compiler, and new features in Vulkan 1.2 which enhance HLSL support.[76]
On February 3, 2020, the Raspberry Pi Foundation announced that it was working on an open source Vulkan driver for theirRaspberry Pi, a popular single board computer.[77] On June 20, 2020, a graphics engineer revealed that he had created one after two years of work that was capable of running VkQuake3 at over 100FPS on the small computer.[78]
On March 17, 2020, Khronos Group released theRay Tracing extensions, based onNvidia's proprietary extension, with some major extensions and many minor changes, which in turn was based on Nvidia'sOptiX API.[79][80] On November 23, 2020, these Ray Tracing extensions were finalized.[48]
On November 24, 2020, Raspberry Pi Foundation announced that their driver for theRaspberry Pi 4 is Vulkan 1.0 conformant.[81]
On January 25, 2022, Vulkan 1.3 was released.
On March 1, 2022, Vulkan SC 1.0 was released, bringing Vulkan graphics and compute for the safety-critical industry while being based on the Vulkan 1.2 standard.[82]
On August 1, 2022, Raspberry Pi Foundation announced that their driver for theRaspberry Pi 4 is Vulkan 1.2 conformant.[83]
On September 1, 2022, Mesh Shading for Vulkan was released.[84][85]
A new Vulkan Roadmap was announced on January 25, 2024.[86] A new extension for decodingAV1 video was released on February 1, 2024.[87]

vulkaninfo, showing information about supported Vulkan instances andvkcube, a program to test Vulkan implementation on a systemInitial specifications stated that Vulkan drivers can be implemented on any hardware that supports OpenGL ES 3.1 or OpenGL 4.x and up.[88] As Vulkan support requires new graphics drivers, this does not necessarily imply that every existing device that supports OpenGL ES 3.1 or OpenGL 4.x will have Vulkan drivers available.
As of March 2023, Intel has split Vulkan driver support onWindows[89] and onLinux.[90] All drivers are developed by Intel.
On Windows,Skylake toIce Lake supports up to Vulkan 1.3,[91] with limited support after July 2022 as future updates will only cover security fixes.[89] Iris Xe and newer are fully supported as of March 2023.[92]
On Linux, as of March 2023 there is incomplete Vulkan support forHaswell[93] with it not being Vulkan 1.0 compliant.[94] Apart from Haswell,Ivy Bridge andBroadwell are also supported by a legacy Vulkan driver inMesa called HASVK.[90] Skylake and newer being supported by a driver in Mesa called ANV.[90]
On Windows, Vulkan 1.2 is supported fromGCN 1.0 toGCN 3.0,[95][96][97] with no further updates planned after June 2021.[98]GCN 4.0 and newer support Vulkan 1.3.[99]
On Linux there are various different Vulkan drivers with varying and overlapping hardware support. There is the open-source Vulkan driver called AMDVLK, developed by AMD which mirrors Windows support.[100] There is also the proprietary driver called AMDGPU-PRO which is not recommended to be used for most users as of March 2023.[101]
There is also the recommended driver called RADV in Mesa developed by Valve, Red Hat,[102] Google[103] and others. This driver as of March 2023 supports all GCN andRDNA cards.[104] This RADV driver's support for GCN 1.0 through GCN 2.0 requires its experimental support in theamdgpu kernel module to be enabled.[105]
On Windows and Linux there is the NVIDIA developed Vulkan driver which supports Vulkan 1.2 onKepler cards[106] with no further updates planned after September 2021.[107]Maxwell and newer cards support Vulkan 1.4.[108]
NVK, an experimental, open source Vulkan driver for Linux based onnouveau, was announced in October 2022.[109] It was merged into mainlineMesa in August 2023.[110] The driver is currently Vulkan 1.4 conformant onTuring and newer cards,[111] Vulkan 1.3 conformant onMaxwell,Pascal andVolta cards[112] and Vulkan 1.2 conformant onKepler cards.[113]
Most modern Android devices support Vulkan.Android 7.0 Nougat includes optional Vulkan 1.0 support,[114]Android 9.0 Pie includes optional Vulkan 1.1 support, andAndroid 10 expects (but does not require) that all non-low memory 64-bit devices support Vulkan 1.1.[115][116][117]Android 13 expects under the same conditions support of Vulkan 1.3.[117] OnLinux and someChromeOS devices, the open-sourceMesa driver provides support forArm Mali (Midgard and Bifrost),Qualcomm Adreno, andBroadcom VideoCore VI hardware.[118]
As of June 2022, Apple devices do not provide native support for the Vulkan API.[119] Vulkan support is available via the open-source libraryMoltenVK, which provides a Vulkan implementation on top of theMetal graphics API provided on iOS and macOS devices, though it has some limitations in regards to certain advanced API features.[34]
In June 2022, version 1.3.217 of Vulkan added support for Metal objects, facilitating import and export between the two APIs.[120] In December 2022, Vulkan version 1.3.236 added small fixes for the interaction with Apple Metal.[121]
As of August 2023,Huawei provides supports for native Vulkan NAPI with the industry standardSPIR-V shader since HarmonyOS 4.0 API 10 and extended intoHarmonyOS NEXT iterative system for currentHarmonyOS versions. It has been adopted as an extension onOpenAtom's consortium open source project,OpenHarmony with a newer graphics stack for the system, includingEclipse Foundation basedOniro project,ArkGraphics 3D software engine that has been recently open sourced since May 2024 on OpenHarmony 5.0 beta 1 that has been previously exclusive to proprietary HarmonyOS NEXT developer kit, on custom graphics pipelines features.[122]
Vulkan is not backwards compatible withOpenGL,[123][23][note 1] although there are certain projects that implement OpenGL on top of Vulkan, such as Google'sANGLE andMesa's Zink.[124]
Vulkan is also not compatible with other graphics APIs such asDirect3D,Metal, andMantle, however implementations of those APIs exist atop of Vulkan:
Platform-specific graphics APIs implemented atop of Vulkan may also be able to run on alternative platforms. For example,DXVK provides an alternative shared library intended to be used onLinux natively (without theWine compatibility layer) to help with game porting.
Thanks AMD!