Khronos has just released version 1.1 of its high-performance GPU API, Vulkan. The heir apparent to OpenGL, and OpenGL ES, this thin and light API exposes the many features and benefits of a modern GPU like no other API and takes it into the GPU compute domain with a new programing language, SPIR-V. Added to that is support for container-like capabilities from Clang/LLVM, and LunarG (the folks who brought you Mesa).
The Vulkan ecosystem momentum continues to grow with improved developer tools, wide industry adoption, and new specification for evolved functionality and performance through the release of the Vulkan 1.1 and SPIR-V 1.3 specifications.
Version 1.1 expands Vulkan’s core functionality with developer-requested features, such as subgroup operations, while integrating (field proven) extensions from Vulkan 1.0.
New functionality in Vulkan 1.1 includes Subgroup Operations that enable highly-efficient sharing and manipulation of data between multiple tasks running in parallel on a GPU. Vulkan 1.1 also enables applications to perform rendering and display operations using resources that they cannot access or copy - for secure playback and display of protected multimedia content.
The Extensions that are now in Vulkan 1.1 Core include:
MultiviewA — single render pass can render to multiple image views simultaneously Use cases include rendering left and right eye views to a stereo VR headset, or six face views of a cube map, with a single drawcall
— which enables homogeneous multi-GPU systems such as CrossFireX and SLI for high-performance gaming and VR Device groups make the number of GPUs in the system relatively transparent to the application Applications can be written to use one or many GPUs with a minimum of changes
Cross-process and Cross-API sharing — to allow share memory and sync primitives (semaphores and fences) between APIs in a single application, or between multiple applications Many applications, e.g. allowing a compositor to present images from Vulkan and OpenGL ES applications to the same display device. This features is used in the Valve Steam VR SDK and other advanced mobile platforms
Advanced Compute Functionality — for read and write 16-bit quantities stored in GPU memory, and to refer to data structures using a restricted form of pointers Greatly expands Vulkan’s ability to support GPU compute kernels
HLSL support — with relaxed block layout enables support for the same memory data layout constraints as Microsoft’s HLSL Enables identical HLSL shaders in both Vulkan and DX applications Easier translation of HLSL into SPIR-V, the portable compiled shader format accepted by Vulkan
YCbCr support — allows sample the YCbCr color formatted textures produced by many video codecs Useful for compositing video streams and mixing them with other graphical content
In addition, a wide range of Vulkan 1.0 extensions have been integrated, bringing significant proven functionality into core Vulkan 1.1, including: simultaneous rendering of multiple image views, use of multiple GPUs in a single system, and cross-process API interoperability for advanced rendering and compositing operations often used in demanding applications such as Virtual Reality. These core functionalities also include advanced compute with 16-bit memory access, and support for HLSL memory layouts, and display, processing and compositing of video streams, through direct sampling of YCbCr color formatted textures produced by many video codecs.
Integral to the release of Vulkan 1.1 is the new SPIR-V 1.3 specification that expands the capabilities of the Vulkan shader intermediate representation to support subgroup operations and enable enhanced compiler optimizations. The SPIR-V tools ecosystem continues to gain significant momentum with front-end compilers for both GLSL and HLSL, and to expand low-level tooling support from the open source SPIRV-Tools project.
Vulkan 1.1 will drive increased industry momentum for this new-generation, cross-platform standard for explicit control over GPU acceleration. Vulkan now ships natively on almost all GPU-enabled platforms, including Windows 7, 8.X, 10, Android 7.0+ and Linux, plus Khronos recently announced open source tools to enable Vulkan 1.0 applications to be ported to macOS and iOS. Vulkan has widespread support in leading games engines including Unreal, Unity, Source 2 from Valve, id Tech, CroTeam’s Serious Engine, CryEngine, and Xenko. Vulkan is being used in over 30 cutting-edge games on diverse desktop and mobile platforms, including Doom, Quake, Roblox, The Talos Principle, Dota 2, and is the exclusive API used in AAA titles such as Wolfenstein II and Doom VFR.
Some of the new functionality in Vulkan 1.1 include protected content, restricted access or copying from resources used for rendering and display, and secure playback and display of protected multimedia content. Also include are subgroup operations that offer efficient mechanisms that enable parallel shader invocations to communicate and a wide variety of parallel computation models supported.
Subgroup operations within Vulakan have been greatly expanded.
Clspv OpenCL C has been brought to the Vulkan Compiler, as part of an experimental collaboration between Google, Codeplay, and Adobe. It’s been successfully tested on over 200K lines of Adobe OpenCL C production code, and is being released in open source https://github.com/google/clspv. It tracks top-of-tree LLVM and Clang, and is not a fork.
It compiles OpenCL C’s programming model to Vulkan’s SPIR-V execution environment. As a proof-of-concept that OpenCL compute can be brought seamlessly to Vulkan.
“We are excited to see the progress developers have made with the SPIR-V standardized IR. Developers are using the shader language of their choice and a variety of open source compilers to ship their games and applications. The Vulkan tools and ecosystem is evolving rapidly.” said David Neto, shader compiler team lead at Google and SPIR working group chair.
Khronos will also release full Vulkan 1.1 conformance tests into open source and AMD, Arm, Imagination, Intel Corporation, Nvidia and Qualcomm have implemented conformant Vulkan 1.1 drivers.
What do we think at JPR?
Open source Vulkan development tools continue to evolve alongside the specification. For example, the LunarG Vulkan SDK and tools layers have been upgraded to support Vulkan 1.1, including the Vulkan Layer Factory (VLF) to enable rapid layer development, the Device Simulation Layer to simulate target device capabilities, without requiring actual physical hardware and the new Assistant Layer to guide developers to best practices and to highlight potential application problems. In addition, the RenderDoc frame capture and introspection debugging tool has added full native Vulkan support on Android with help from Khronos members, and improved support for displaying SPIR-V disassembly using SPIRV-Tools and high-level languages through the SPIRV-Cross cross compiler. RenderDoc has also been upgraded to expose native disassembly and profiling information for vendors who support it, and to support the external memory features that now form a core part of Vulkan 1.1.
To encourage the collaborative evolution of the Vulkan ecosystem, Khronos has created the public Vulkan Ecosystem Forum to share issues and opportunities, and to coordinate cooperative solutions. The aim of the Forum is to respond to developer feedback and foster cross-functional discussions and engagement between users, tools developers and API designers. Join the conversation at Vulkan Ecosystem on GitHub.
Key take away is this: Vulkan, combined with SPIR could replace OpenCL and/or Cuda, and become the go to solution for future GPU compute and graphics applications.