Vulkan is a cross-platform 3D graphics API that has been praised for its low-overhead cost. The 2 years-old API is popular among indie and AAA game developers. The previous edition of Vulkan included support to many popular drivers. The list is long but includes the five main manufacturers NVIDIA, AMD, Intel, Qualcomm, and ARM. ON the 7th of March 2018, Khronos group finally rolled out the long-awaited release of the Vulkan 1.1.
The new release expands some core functionalities and adds a myriad of developer-requested features. The new features include subgroup operations with a number of established plug-ins from the previous edition. A full list of the new extensions:
Vulkan divides data that run on a single compute unite of a GPU as local workgroups. Subgroups enable highly-efficient transfer and manipulation of data between parallel tasks running on a GPU. When a developer wants to run a number of parallel tasks for an algorithm, the GPU would divide the workload between local workgroups. Consequently, allowing each workgroup to handle one or more tasks. The complete new specifications can be found here.
In Vulkan, each parallel task is called an invocation. Vulkan 1.1 allows invocations within the same local group to share data via shared memory. A bundle of concurrent invocations is called subgroup. Subgroups allow invocations within a smaller subset to share data at a much higher speed. Sharing data between invocations in subgroups is allowed in all shader stages. For more information about how the subgroup feature works, click here to visit the new tutorial.
Since Vulkan’s 1.1 version was released, the API saw 9 minor updates. The smaller updates included bug fixes and some new features to enrich the API even further. These are the most notable new extensions since the 1.1 update:
In addition to the new extensions, the post-1.1 updates included the following minor bug-fixes:
- Fix for the Alt-Tab freeze with DXVK.
- Improved stability with Wine on Linux.
- Improve stability of Vulkan on pre-Pascal GPUs.
- Emulate DX shader behavior when necessary.
- Bounds-checking for SSBO variable pointer loads.
- Fixed an intermittent hang of Vulkan applications running fullscreen when flipping is allowed on Linux.
- Various other driver and compiler fixes.
- Fix hang that sometimes occurs after a clear in multisample rendering.
- Fix hang that sometimes occurs when doing a mode switch while fullscreen.
- Other minor driver and SPIR-V compiler bug fixes.
The minor updates also included few shader performance improvements and enabled paring between Windows and Linux drivers. Several resources limits were notably increased including the maxPerStageDescriptor family, maxBoundDescriptorSets, and many others. The full list of the updates can be found here.
The Future of Vulkan
Vulkan 1.1 finally enabled multi-GPU support to open a new realm of possibilities to graphics developers. Since Vulkan is developed by a consortium, Khronos group is well-aware that the API depends on the developers to survive and grow. The Oregon-based consortium made sure to make its intentions known by setting up a Github page for developers to report bugs and suggest new features. The new developer tools also come packaged with the LunarG SDK to make things even smoother. With all the new features, the future is in the hands of the developers as much as Vulkan.