Vulkan (API)
Developer(s) | Khronos Group with contributions from AMD [1][2][3][4][5] |
---|---|
Initial release | 16 February 2016[6] |
Stable release | 1.0.15 / 27 May 2016 |
Development status | Active |
Operating system | Android, Linux, SteamOS, Tizen, Windows,[7][8] |
Platform | Compatible hardware |
Type | 3D graphics and compute API[9] |
Website | Khronos.org/Vulkan |
As of | 16 February 2016 |
Vulkan is a low-overhead, cross-platform 3D graphics and compute API first announced at GDC 2015 by the Khronos Group.[9][10][11] The Vulkan API was initially referred to as the "next generation OpenGL initiative" by Khronos, but use of those names were discontinued once the Vulkan name was announced.[12] Vulkan is derived from and built upon components of AMD's Mantle 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, much like OpenGL.[3][9][13][14][15][16][17]
Like OpenGL, Vulkan targets high-performance realtime 3D graphics applications such as games and interactive media across all platforms, and offers higher performance and lower CPU usage, much like Direct3D 12 and Mantle. In addition to its lower CPU usage, Vulkan is also able to better distribute work amongst multiple CPU cores.[18]
Contents
Features
Vulkan is intended to provide a variety of advantages over other APIs as well as its spiritual predecessor, OpenGL. Vulkan offers lower overhead, more direct control over the GPU, and lower CPU usage.[11] Intended advantages include:
- Reduced driver overhead, reducing CPU workloads.[19]
- Reduced load on CPUs through the use of batching, leaving the CPU free to do additional computation or rendering than otherwise.[20]
- Intelligent and even CPU scaling for multi-core CPUs, which are by far the majority type of CPU on the market. Previous APIs like DirectX 11 and OpenGL 4 were initially designed for use with single-core CPUs and could not easily use multiple or scale the workload evenly across them, leaving some CPU cores underworked and some not even utilized at all, resulting in performance issues and frequent CPU bottlenecks.[21]
- OpenGL uses the high-level language GLSL for writing shaders which forces each OpenGL driver to implement its own compiler for GLSL that executes at application runtime to translate the program's shaders into executable code for the target platform. Vulkan will instead provide an intermediate binary format called SPIR-V (Standard Portable Intermediate Representation), analogous to the binary format that HLSL shaders are compiled into in DirectX. This reduces the onus on driver vendors, allows shader pre-compilation, and permits application developers to write shaders in languages other than GLSL.[22]
- Unified management of compute kernels and graphical shaders, eliminating the need to use a separate compute API in conjunction with a graphics API.
- Cross-platform API supported on both mobile devices and high-end graphics cards.
- OS agnostic to improve the portability of applications created using the API.
OpenGL | Vulkan |
---|---|
one single global state machine | object-based with no global state[23] |
state is tied to a single context | all state concepts are localized to a command buffer[24] |
GPU memory and synchronization are usually hidden | explicit control over memory management and synchronization[25] |
extensive error checking | Vulkan drivers do no error checking[26] |
Software that uses Vulkan
Games
- The Talos Principle – The Talos Principle was the first video game with Vulkan rendering support.[27]
- Vulkan Chopper – NVidia developed and released a Vulkan demo on their developer site that demonstrates low CPU overhead. Vulkan Choppers works on Windows and Linux upon launch day and is planned for an Android release as well.[28]
- Dota 2 – Vulkan support released in May 2016.[29]
- DOOM (2016)
Game engines
- id Tech 6 - On May 7, 2016, id announced Doom, an upcoming game running id Tech 6 game engine was gaining a massive performance increase with Vulkan.[30]
- Unreal Engine 4 – On February 21, 2016, Epic Games announced Unreal Engine 4 support for Vulkan at Samsung's Galaxy S7 Unpacked event.[31][32]
- Source 2 – On March 3, 2015, Valve announced the Source 2 engine, the successor engine to the original Source, to receive a rendering path through Vulkan.[33][34]
- Serious Engine 4 – On February 4, 2016 Croteam confirmed they were supporting the Vulkan API in their Serious Engine.[35]
Operating systems and OS components
The Vulkan Window System Interface (WSI) does for Vulkan what EGL does for OpenGL ES.[36][vague] EGL is used by OpenGL ES programs to interface with the native platform windowing system. EGL handles context management, surface binding and rendering synchronization. In Vulkan a set of API calls referred to as WSI will serve a similar purpose as EGL. The platform is chosen from the Vulkan header, e.g. VK_USE_PLATFORM_WAYLAND_KHR for Wayland. Then an abstracted Surface Object is created. Presentation involves using something called a "Swapchain", i.e. a series of sequentially ordered images (VkImage) that are rendered to and given to the surface to present.
Android N supports Vulkan.[37]
Vulkan support for iOS and OS X has not been announced by Apple, but at least one company has promised support through third-party libraries, planning to build a Vulkan implementation that runs on Metal.[38]
Hardware compatibility
Initial specifications state that Vulkan will work on hardware that currently supports OpenGL ES 3.1 or OpenGL 4.X and up.[39] 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.
Company | Hardware | Software support: Vulkan 1.0 | ||||||
---|---|---|---|---|---|---|---|---|
Microarchitecture | Available since | GPUs (chips) | Graphic cards / SoCs | Linux | Microsoft Windows | Android[40] | Other | |
AMD | ||||||||
Polaris | 2016-June? | Ellesmere, Baffin, Greenland | Radeon Rx 400 Series | | AMDGPU PRO (beta, Ubuntu only)[41][42] | | Radeon Software[43] | N/A | N/A | |
GCN 1.2 | 2014-Sep | Tonga, Fiji, Carrizo | Radeon R9 Series | |||||
GCN 1.1 | 2013-Mar | Bonaire, Hawaii, Kaveri, Kabini, Temash, Mullins, Beema, Carrizo-L | Radeon HD 7790, PlayStation 4, Xbox One | not supported | ||||
GCN 1.0 | 2012-Feb | Oland, Cape Verde, Pitcairn, Tahiti | Radeon HD 77xx - HD 7900 Series | |||||
TeraScale 3 "Northern Islands" |
2010-Dec | Aruba (Trinity/Richland), Barts, Turks, Caicos, Cayman | Radeon HD 7xxx - HD 76xx Series | not supported | ||||
TeraScale 2 "Evergreens" |
2009-Sept | Cedar, Cypress, Juniper, Redwood, Palm, Sumo | Radeon HD 5000 Series | |||||
TeraScale 1 | 2007-May | R600, RV700, … | Radeon HD 2000 Series, HD 3000, HD 4000 | |||||
Nvidia | ||||||||
Pascal | 2016-May | GP100, GP104, GP106, GP107 | GeForce 10 series | | Nvidia GeForce driver[44][45] | | Nvidia GeForce driver[45] | ? | ||
Maxwell 2.0 | 2014-Sept | GM200, GM204, GM206, GM20B | GeForce 900 series, Tegra X1 | |||||
Maxwell 1.0 | 2014-Feb | GM107, GM108 | GeForce GTX 750 Ti, GTX 750, GTX 860M | |||||
Kepler | 2012-March | GK110, GK104, GK106, GK107, GK208 | GeForce 600 series, GeForce 700 series | |||||
Fermi | 2010-March | GF100, GF104, GF106, GF108, GF110, GF114, GF116, GF119 | GeForce 400 series, GeForce 500 series | not supported | ||||
Tesla 2.0 | 2008-Jun | GT200, GT215, GT216, GT218, | GeForce 200 series, GeForce 300 series | |||||
Tesla 1.0 | 2006-Nov | G80, G84, G86, G92, G94, G96, G98 | GeForce 8 series, GeForce 9 series, GeForce 100 series | |||||
Intel | ||||||||
Kaby Lake | 2016-? | Same day release, mainlined into Mesa 12.0[46] | Planned in 15.40.20 | N/A | ||||
Skylake | 2015-Aug | Core i3-/i5-/i7-6000, | ||||||
Broadwell | 2015-Jun | Core i3-/i5-/i7-5000, | not supported | |||||
Haswell | 2012-Sep | Core i3-/i5-/i7-4000, | ||||||
Ivy Bridge | 2012-Apr | Core i3-/i5-/i7-3000, | ||||||
Sandy Bridge | 2011-Jan | Core i3-/i5-/i7-2000, Pentium abc, Celeron abc | not supported | |||||
Westmere | 2010-Jan | Core i3-/i5-/i7-xxx, Pentium abc, Celeron abc | ||||||
Imagination Technologies | ||||||||
PowerVR Series 8XE | 2016-Feb | GE8200, GE8300 | | PowerVR Graphics SDK v4.1[47] | |||||
PowerVR Series 7XT | 2014-Nov | GT7200, GT7400, GT7600, GT7800, GT7900 | ||||||
PowerVR Series 7XE | 2014-Nov | GE7400, GE7800 | ||||||
PowerVR Series 6XT | 2014-Jan | GX6240, GX6250, GX6450, GX6650 | ||||||
PowerVR Series 6XE | 2014-Jan | G6050, G6060, G6100 (XE), G6110 | ||||||
PowerVR Series 6 (Rogue) | 2012-Jan | G6100, G6200, G6230, G6400, G6430, G6630 | ||||||
PowerVR Series 5XT | 2009-Jan | SGX543, SGX544, SGX554 | not supported | |||||
Qualcomm | ||||||||
Adreno 500 series | Adreno 510, Adreno 530 | Snapdragon 650 (MSM8956), Snapdragon 652 (MSM8976), Snapdragon 820 (MSM8996), … | 1.0[48] | ? | ||||
Adreno 400 series | ||||||||
Adreno 300 series | not supported | |||||||
ARM | ||||||||
Mali-T800 series | Q4 2015 | Mali-T860, Mali-T880 | Exynos 8890, Kirin 950, Helio X20 (MT6797), Helio P10 (MT6755) | 1.0[49] | ? | |||
Mali-T700 series | Q4 2013 | Mali-T760 | Exynos 7420, Exynos 5433, MT6752, MT6732, RK3288 | |||||
Mali-T600 series | not supported |
History
The Khronos Group began a project to create a next generation graphics API in July 2014 with a kickoff meeting at Valve Corporation.[50] At SIGGRAPH 2014, the project was publicly announced with a call for participants.[9]
According to the US Patent and Trademark Office, the trademark for Vulkan was filed on February 19, 2015.[51]
Vulkan was formally named and announced at Game Developers Conference 2015, although speculation and rumors centered around a new API existed beforehand and referred to it as "glNext".[52]
In early 2015, LunarG (funded by Valve) 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.[53][54] There is still the possibility[55] of Sandy Bridge support, since it supports compute through Direct3D11.
On August 10, 2015, Google announced that future versions of Android would support Vulkan.[56] As of April 2016, Android N, which is currently in development, received support for Vulkan.[57]
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 conformant drivers were available.[11] The specification and the open-source Vulkan SDK were released on February 16, 2016.[6]
See also
- OpenGL – Another graphics API by the Khronos Group
- OpenCL – Another compute API by the Khronos Group
- Mantle – A low-level graphics and compute API from AMD, the foundation of Vulkan
- Direct3D – Windows-only graphics API. Version 12 is a low-level API similar to Vulkan
- Metal – A low-level graphics and compute API for iOS and OS X
- AMDGPU – AMD's fully open-source unified graphics driver for Linux
References
<templatestyles src="Reflist/styles.css" />
Cite error: Invalid <references>
tag; parameter "group" is allowed only.
<references />
, or <references group="..." />
External links
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ 3.0 3.1 Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ 6.0 6.1 https://www.khronos.org/news/press/khronos-releases-vulkan-1-0-specification
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ 9.0 9.1 9.2 9.3 Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ 11.0 11.1 11.2 Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ http://www.tomshardware.com/news/khronos-group-vulkan-graphics-api,28678.html
- ↑ http://blog.imgtec.com/powervr/vulkan-high-efficiency-on-mobile
- ↑ http://blog.imgtec.com/powervr/vulkan-scaling-to-multiple-threads
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ https://developer.nvidia.com/vulkan-android#samples
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ http://arstechnica.com/gadgets/2016/04/android-ns-second-preview-build-supports-vulkan-and-new-emoji/
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found. p. 19 "Vulkan Status"
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ https://community.amd.com/community/gaming/blog/2016/02/16/radeon-gpus-are-ready-for-the-vulkan-graphics-api
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ http://www.nvidia.com/download/driverResults.aspx/101818/en-us
- ↑ 45.0 45.1 Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.