Vulkan 1.2 Specification Finalized, Linux Support In Place
The Khronos Group has published the final specification for version 1.2 of the Vulkan graphics API. It adds 23 extensions to the core API and it brings features like timeline semaphores synchronization and a formal memory model. Mesa already supports most of the extensions which were added to the core specification and Mesa 20, expected to be released towards the end of February, will have full Vulkan 1.2 support.
written by Öyvind Sæther. published 2020-01-20 - last edited 2020-01-22
One of the Vulkan 1.2 release announcement slides lists the handful of worthwhile games made using the Vulkan API.
The Vulkan graphics API specification was launched in February 2016. It was updated to Vulkan 1.1 in March 2018. That update added multi-GPU support and a few other features. Version 1.2 improves upon the previous Vulkan specifications by adding mostly existing extensions and features to the core specification.
"Vulkan 1.2 brings together nearly two dozen high-priority features developed over the past two years into one, unified core Vulkan standard, setting a cutting-edge bar for functionality in the industry’s only open GPU API for cross-platform 3D and compute acceleration"
GNU/Linux support for Vulkan 1.2 is already in place in the development version of the Mesa graphics stack. Adding Vulkan 1.2 support to Mesa was trivial since many of the "new" features are not that new. All the 23 extensions added to Vulkan 1.2 were already supported by Mesa as optional Vulkan 1.1 extensions. Vulkan 1.2 made them part of the core specifications, which means that all graphics stacks claiming to support Vulkan 1.2 have to support them. Adding Vulkan 1.2 support to Mesa git was a trivial matter of updating the version number in both the RADV Vulkan back-end for AMD cards and the ANV back-end for Intel graphics. Mesa 20, expected to be released late next month, will have Vulkan 1.2 support.
The command-line program
vulkaninfo from the package
vulkan-tools will tell you what Vulkan version and what Vulkan extensions your system supports.
Better support for Microsoft's HLSL shader programs
One of the release announcement slides mentions how technologies like DXVK can be used to run Windows games on Linux.
The Vulkan specification has had support for Microsoft Direct3D HLSL shader programs since version 1.1. Vulkan 1.2 improves on this support in a number of ways. The Khronos Group calls HLSL "HLSL as a First Class Vulkan Shading Language" in a blog post detailing the HLSL improvements in Vulkan 1.2.
It may seem strange that the Khronos Group is making a big deal about Direct3D shader support in Vulkan when Vulkan is a competing graphics API. Microsoft will never add support for Vulkan shaders to their competing DirectX graphics API. Support for HLSL shaders is actually quite important for the various DirectX to Vulkan translation layers like DXVK and it is also important for developers who are porting DirectX games to Vulkan. The Khronos Group makes a big deal about Linux gaming in their Vulkan 1.2 Launch slides which were made using "Mac OS X 10.13.6 Quartz PDF".
Consistent Memory Model For Multicore Development
Vulkan 1.2 has a memory consistency model as a part of the core specification.
VK_KHR_vulkan_memory_model is not new, it was first announced in September 2018 and Mesa has had support for it in the last few versions. Vulkan 1.2 makes it a part of the core specification so developers can be sure all drivers claiming to support 1.2 support this rather important functionality.
Vulkan's memory consistency model is actually quite important. Modern processors have a lot more cores than they used to have. You can't have one thread changing or overwriting objects while another thread is using those objects. Making sure that does not happen is not trivial which is why so many OpenGL and DirectX games tend to pin one or two cores with the rest of the cores idling, bored to tears with nothing to do.
No New Hardware Features Required
Vulkan 1.2 does not specify any new hardware requirements beyond what is already required to use Vulkan. All graphics cards with Vulkan support will support Vulkan 1.2 as long as the drivers support it. All GNU/Linux users with an AMD card who are using the
amdgpu kernel module can use Vulkan.
Those using the
radeon kernel module for their older AMD graphics cards can not use the Mesa RADV Vulkan back-end.
amdgpu does work with most older cards but that driver does not support hardware video encoding and decoding on most older cards. Owners of AMD GCN 1.0 graphics cards have to choose between Vulkan and hardware video decoding.
Why It Matters
Vulkan is a very open multi-platform graphics API. Porting games written using Vulkan from other platforms is much simpler than porting games written using DirectX. Solidifying the existing Vulkan extensions into the core specification ensures that game developers can be sure the Vulkan functionality they use is present on other platforms. Time will tell if that translates to more native GNU/Linux games or not.