Vulkan 1.3 and Roadmap 2022
Addressing Feature Fragmentation
The Vulkan API is under constant development, with an ever-growing pool of extensions to solve problems and add valuable new features. However, extensions typically don't come with a deployment timeline or a guarantee of which devices will support them. As a result, it can be hard for developers to have a clear picture of when and where extensions will be supported, and what functionality can be relied on for current and future projects. This situation is even more complex for developers shipping applications across both mobile and desktop platforms.
With Vulkan 1.3 and the new public roadmap, we’re taking a significant step to reduce feature fragmentation.
As you might expect, Vulkan 1.3 adds a range of features that are broadly implementable across actively supported hardware. In fact, any hardware that has an actively supported 1.2 implementation should be capable of supporting Vulkan 1.3 - but that hasn’t stopped us from packing in a bunch of interesting features, all of which are non-optional!
For example, VK_KHR_dynamic_rendering adds a streamlined path to start rendering - applications that can’t or don’t want to use subpasses do not need to create any render pass or framebuffer objects - significantly reducing application complexity! The Streamlining Render Passes blog goes into more detail, and bringing this option to Vulkan 1.3 helps ensure that it will be supported out of the box in future devices.
We’ve also added or required a number of features in Vulkan 1.3 that make managing pipeline compilation easier:
- Additional dynamic state originally introduced by VK_EXT_extended_dynamic_state and VK_EXT_extended_dynamic_state2 helps reduce the number of pipeline permutations needed
- VK_EXT_pipeline_creation_cache_control gives developers more control over how and when pipelines are compiled
- VK_EXT_pipeline_creation_feedback provides information about the compiled pipelines, making it easier to profile and debug pipeline issues.
A few features that were previously optional in earlier versions of Vulkan are now required; notably buffer device address support, allowing developers to start using pointers across the ecosystem. There’s still work to do for supporting this in HLSL but tooling and GLSL users can take advantage of this already. Arm released a blog post explaining the ins and outs of this unique feature if you’re interested in learning more. Vulkan 1.3 also requires the Vulkan memory model, which improves guarantees made by the spec about atomic and synchronization primitives.
VK_EXT_subgroup_size_control added support for finer control over subgroups. In particular, it enables vendors to advertise multiple subgroup sizes, allows developers to select a particular subgroup size (where supported), and requires a defined mapping between subgroups and workgroups for aligned workgroup sizes. In Vulkan 1.3 any SPIR-V 1.6 compute shader will automatically get the defined mapping and variable subgroup size.
Higher level machine learning frameworks are increasingly executing models through Vulkan, and as a step to improve this acceleration path, we’ve added VK_KHR_shader_integer_dot_product to Vulkan 1.3. Machine learning algorithms should be able to use this in preference to manually implemented dot product functions and benefit from hardware acceleration of these instructions when available. Whether a given instruction is accelerated is exposed by the API to allow better per-device tuning.
Vulkan 1.3 also adds a number of minor improvements that make ecosystem support more consistent and enable future features such as VK_KHR_synchronization2, VK_KHR_maintenance4, VK_KHR_copy_commands2, VK_KHR_format_feature_flags2, and VK_EXT_texel_buffer_alignment.
In earlier core revisions of the Vulkan specification, we added a number of optional features to indicate that a particular feature is officially recommended by the Working Group or is expected to be reliably supported in certain markets. However, this mechanism of advertising “forward-looking” functionality has not resulted in clear guidance as there has been no firm agreement within Khronos to support these features from a certain date or in certain markets. As a result, developers working on a title often don’t have a clear idea of how well supported a particular feature is and must comb through vulkan.gpuinfo.org or ask IHVs directly what their plans are. So, we are now taking a different approach to advertising forward-looking functionality -- defining a public roadmap.
The Vulkan Roadmap will be used to decide where and how we spend our development efforts over the coming years. Periodically, we will create milestones along the roadmap to define features that will become the new baseline for mid-to-high-end GPUs across smartphone, tablet, laptop, desktop, and console markets from an assigned year. Defined roadmap milestones have significant advantages over the previous use of individual ‘core optional’ feature bits:
- Grouping of features into a coherent set
- Consensus and support from vendors shipping into the targeted markets
- A target release timeline; e.g., most Vulkan adopters supporting the Vulkan 2022 milestone will offer conforming devices by the end of the year
This new level of roadmap clarity provides hardware vendors a more precise target base specification, enables platform owners to better plan hardware expectations, and gives developers a known feature baseline to use for applications and games.
The Roadmap 2022 Milestone
Today we’ve announced the first milestone on the roadmap; Vulkan Roadmap 2022. The Roadmap 2022 milestone is a significant increase in required functionality beyond Vulkan 1.3, requiring several long-standing optional features that developers have requested and raising a number of limits. Crucially, we’ve also worked to ensure that most hardware vendors are going to support this milestone for new mid-to-high-end devices they develop for smartphone, tablet, laptop, console, and desktop markets starting in 2022.
One of the most notable requirements of the Roadmap 2022 milestone is descriptor indexing, which was added to Vulkan 1.2 but left as optional. Descriptor indexing enables developers to use enormous numbers of descriptors across their shaders without rebinding descriptor sets and to update those descriptors in parallel with rendering. This lets applications make much smarter choices about resource management. Hai Nguyen gave a talk on this at our 2018 developer day in Montreal, and there are also several excellent articles on this topic. This is often referred to as “bindless” due to the historical association with GL_ARB_bindless_texture.
Another key highlight of the Roadmap 2022 milestone is that it makes subgroup support much more consistent:
- A minimum subgroup size of 4 is required
- Fragment and compute shaders must support subgroup operations
- Subgroup vote, arithmetic, ballot, shuffle, shuffle relative, and quad group operations must all be supported.
Developers should be able to make much wider use of subgroup operations when shipping with the Roadmap 2022 milestone as minimum requirement. A number of applications already rely on this functionality being present and consolidating it in the Roadmap 2022 milestone should help ensure future vendor support.
One newer extension has also been added to the Roadmap 2022 milestone; VK_KHR_global_priority, which combines VK_EXT_global_priority and VK_EXT_global_priority_query into a single extension, enabling better control over scheduling between multiple processes.
A non-exhaustive list of other things that are no longer optional in the Roadmap 2022 milestone includes anisotropic filtering, Y’C B C R sampling, scalar block layouts for buffer resources, depth clamping, depth bias clamping, mirror-clamp-to-edge sampling, independent blending, sample rate shading, precise occlusion queries, fragment stores and atomics, standard sample locations, and full 32-bit draw indices.
For a full list of features and limits added or improved in the Roadmap 2022 milestone, please refer to the Roadmap 2022 entry in the main specification.
Ongoing Roadmap Development
The Vulkan Roadmap 2022 milestone is intended to become widely supported in a short timeframe, so it only includes hardware functionality which vendors already planned to ship, and instead influences software driver implementations. With future milestones we aim to provide a multi-year lead time, allowing vendors to modify both software and hardware roadmaps as they are developed, and giving sufficient time for active discussion and influence over silicon designs.
We have started discussions about the upcoming roadmap milestones within the working group, with announcements planned later in the year. Longer term roadmap milestones will focus on problem solving and use cases rather than prescribing features, enabling refinement of solutions that meet developer needs. Encoding these items in a roadmap and getting early buy-in from vendors should help ensure their wide and consistent support.
Our current roadmap plans focus on Vulkan’s most demanding markets - mid-to-high-end across smartphone, tablet, laptop, console, and desktop. Other markets continue to be very important to Vulkan, but at present do not seem to require roadmap milestones of their own. Embedded systems, wearables, and other area-critical markets are well served by the core Vulkan baseline, and future feature planning will continue to account for this. Vulkan SC and the Vulkan Portability effort address unique market needs and will continue to evolve independently, though they may issue roadmap milestones in the future if beneficial to their developer communities. If other markets emerge with unique needs across a large number of vendors, we can create appropriate roadmaps or profiles.
Khronos’ multi-company governance framework provides a unique opportunity for the industry to forge consensus both on Vulkan’s current functionality and future roadmap. In particular, building genuine consensus around longer-term hardware roadmaps will enable Vulkan to lead the industry in raising baseline functionality for key markets, while reducing developer fragmentation between market segments such as mobile and desktop.
We believe that these initiatives will improve the Vulkan development experience, and we are keen to hear your thoughts and feedback! Please join us on the Vulkan Discord, where we’re inviting discussion.
If you want a deeper dive, the Vulkan Working Group is hosting a Vulkanised Webinar on February 1, 2022 that will provide an opportunity to discover more about these initiatives and to ask questions about Vulkan 1.3, the Vulkan roadmap, and profiles. Registration is open here. We look forward to hearing from you!