Recientemente Khronos announced the release of the new version of the Vulkan 1.2 specification, which is defined as an API to access the graphics and computing capabilities of the GPU. Corrections and extensions accumulated over two years have been incorporated into the new specification.
Volcano is notable for drastically simplifying drivers, bring GPU command generation to the application side, the ability to connect debug layers, unify API for multiple platforms and use a precompiled middle code representation for execution on the GPU side.
Main new features of Vulkan 1.2
It stands out thate implementation of the HLSL shader programming language developed by Microsoft for DirectX is ready for general use (HLSL support in Vulkan makes it possible to use only HLSL shaders in Vulkan and DirectX based applications and also simplifies the translation from HLSL to SPIR-V.)
It is proposed to use the standard DXC compiler to compile shaders, which was opened by Microsoft in 2017 and is based on LLVM technology. Vulkan support is implemented through a separate backend, which allows HLSL to be translated into an intermediate representation of SPIR-V shaders.
The implementation covers not only all the built-in features of HLSL, including mathematical types, control flows, functions, sets, resource types, namespaces, Shader Model 6.2, structures and methods, but also allows the use of specific extensions from Vulkan, like VKRay from NVRIA.
In HLSL mode on top of Vulkan, it was possible to organize the work of games like Destiny 2, Red Dead Redemption II, Assassin's Creed Odyssey and Tomb Raider.
Also it is noted that the SPIR-V 1.5 specification has been updated, which defines a universal intermediate representation of shaders for all platforms, which can be used for both graphics and parallel computing.
Vulkan core API includes 23 extensions to increase productivity, improve display quality and simplify development.
From them we can find Semaphore timeline: that unify synchronization with host and device queues (allow to do with a primitive for omni-directional synchronization between device and host, without using separate VkFence and VkSemaphore primitives).
These are represented by a monotonically increasing 64-bit value that can be tracked and updated through multiple threads.
Shorter versions of the specification have been prepared for typical target platforms, which simplifies work on platforms for which not all extensions are supported yet, and allows for the selective activation of the core capabilities of the Vulkan API to be dispensed with.
Of the other changes that stand out:
- Work continued on a portability project with other graphics APIs.
- Ability to use numeric types in shaders with reduced precision
- HLSL compliant memory layout option
- Unbound (unbound) resources that remove the limit on the amount of resources available to shaders by using shared virtual space of system memory and GPU memory
- A formal memory model that defines how parallel threads can access shared data and sync operations
- Indexing descriptors to reuse design descriptors across multiple shaders;
- Buffer bindings.
- Full list of extensions added
- Over 50 new structures and 13 functions added
Finally of the plans for the future, the development of extensions for machine learning, ray tracing, video encoding and decoding, support for VRS (variable speed shading) and mesh shaders stands out.
Intel, AMD, ARM, Imagination Technologies and NVIDIA have already released drivers that support the new version of Vulkan.
While the case of Kitchen (free drivers), se offers Vulkan 1.2 support for RADV drivers (AMD cards) and ANV drivers (Intel). Vulkan 1.2 support is also implemented in the RenderDoc 1.6 debugger, the LunarG Vulkan SDK, and a set of Vulkan-Samples.