Vulkan 1.0 Released: What You Need To Know About This Cross-Platform, High-Performance Graphics API
Today's the day! It's Vulkan day! After the better part of two years of hard work, Vulkan 1.0 is ready to meet the world! Today The Khronos Group is announcing the release of Vulkan 1.0 with an embargo that just expired. This hard-launch today is met by the public release of the first conformant driver. The first Vulkan-powered game is also in public beta as of today, but the Linux situation as of today isn't entirely exciting for end-users/gamers as most vendors are still baking their Linux support with Windows generally taking priority. However, even ignoring operating system differences, you need to make sure your expectations are realistic before trying to fire up a Vulkan game while giving developers time to learn and design for this new graphics API.
This first Vulkan 1.0 article today on Phoronix is recapping the briefing I had last week with The Khronos Group and since then with the various IHVs, game developers, and others regarding Vulkan Linux support. I've also been trying out Vulkan on some of my systems, exploring some Vulkan code, and more. This article just covers the highlights while I will have several other Vulkan Linux driver articles out in the days ahead, so be sure to check them all out. Also, if there are any details not covered in these articles today on Phoronix, on Thursday is when Khronos is hosting the Vulkan webinar with more information.
What Is Vulkan 1.0
Vulkan is The Khronos Group's answer to Microsoft DirectX 12, Apple's Metal, and the former AMD Mantle API for providing high-performance graphics. Yes, Vulkan started out as being based upon AMD's Mantle tech, but it has evolved well beyond where it was left by AMD. While some people on web forums and elsewhere have talked of Vulkan as a re-branded Mantle, that is not true and has changed significantly since then -- it's no longer tied to AMD's GCN hardware design, Vulkan fits use-cases across all ecosystems, the API has evolved a lot after being reviewed by many different parties, etc. Khronos President Neil Trevett made it quite clear that Vulkan is much more than just a slightly different take on Mantle.
Vulkan 1.0 is designed to fit use-cases from mobile to desktop to console and embedded, is now an explicit API with multi-threading capabilities, is much lower overhead compared to OpenGL drivers, supports precompiled shaders via SPIR-V, and numerous other benefits as already covered in countless Phoronix articles. Unlike the alternative APIs, Vulkan is cross-platform and a real industry standard.
Vulkan 1.0 isn't the end of the game but future revisions are, of course, coming once the working group has received feedback from more developers about the specification.
OpenGL Is Staying
While Vulkan 1.0 is out for high performance graphics, OpenGL isn't being abandoned by the Khronos Group but the working group will remain and evolve. Vulkan won't be needed by all game/application developers depending upon how much you care about performance, if you need legacy driver / graphics card support, are looking for an API that's easier to target, your workload can't be parallelized, etc.
There's also been talk of adding SPIR-V support to OpenGL and making other improvements on that front. The Khronos Group isn't announcing any new OpenGL specifications/updates officially today, but stay tuned for later this year.
One of the (currently unofficial) OpenGL extensions I've seen so far and exposed by the NVIDIA driver is GL_NV_draw_vulkan_image. This extension provides DrawVkImageNV() for drawing a rectangle to display some/all of the contents of a two-dimensional Vulkan VkImage. This extension also provides functions for synchronizing drawing between Vulkan and OpenGL. Basically the extension provides a way for presenting rendered Vulkan content within an OpenGL context.
Vulkan Gaming & Launch Title
Croteam has made available Talos Principle with a Vulkan renderer on Steam as a launch game for today. Sadly, the Linux version of Talos Principle with the Vulkan renderer isn't yet publicly available but will be soon. The delay was on getting conformant drivers in hand. The conformant Vulkan 1.0 drivers are really coming about at last-minute that the Windows version should now be available on Steam in beta form. From Valve, Dota 2 with Vulkan support is also expected shortly while other games supporting Vulkan will also be appearing in the near future.
From one of the game developers at a major studio taking an early stake in Vulkan I was forewarned not to expect any performance miracles out of Vulkan titles at this point. The straightforward explanation is that while the Vulkan API offers a lot of performance possibilities and greater optimizations, the current games/engines are still tuned for DirectX 11 / OpenGL with just calling into the Vulkan functions. It won't be until the new games or reworked engines appear that are really designed around Vulkan will there be much greater performance over OpenGL/DX11. In fact, be forewarned, in some cases right now the Vulkan versions of games may actually be slower than the OpenGL renderer until various bugs are worked out in both the drivers and games.
Game developers are excited about the possibilities offered by Vulkan, but it will take time for them to become fully realized. A similar situation was cited that when Direct3D 11 was rolled out and games began supporting it, not until some time later were games beginning to run much faster than the Direct3D 9 rendered equivalents. In taking full advantage of Vulkan compared to their DX11/GL rendering models, some of the work is straightforward enough that interested game developers should be able to send down optimizations as future patches to games while other optimizations for Vulkan are more invasive to the design and thus getting a really Vulkan-focused engine wouldn't come until future projects (games and engines).
Next pages have the juicy Vulkan Linux driver details, demos, and other fun technical details!
Vulkan Linux Drivers
The conformant drivers as of writing this article are: Imagination Technologies on Linux, Intel on Linux, NVIDIA on Android / Linux / Windows, and Qualcomm for Android 6.0. Yep, no mention at all of AMD, which was quite the jaw-dropper when I was sent over this material last week...
The Intel Linux Vulkan driver made the list as conformant but no mention of the Intel Windows driver. It appears that the Intel Vulkan Windows and Linux drivers are different with the OTC and VPG groups within Intel and each seemingly maintaining a different driver. This is similar to how it's done with the Intel Windows/Linux OpenGL driver and sadly from initial indications it doesn't appear that there is a unified approach for Vulkan. While originally there was much talk about an open-source Intel Linux driver for Vulkan initially developed by LunarG in cooperation with Valve Software, it appears that the production Intel Vulkan Linux driver is in fact not based upon LunarG's prototype. However, from another source I heard there was indications Intel is pursuing both an open and closed-source Linux Vulkan driver. This is similar to how they have the open-source Beignet OpenCL implementation and separately they have a closed-source Linux OpenCL driver on a completely different code-base for different customers. However, that dual Intel Vulkan Linux driver strategy hasn't been confirmed. Intel will make available more Vulkan driver details shortly about their driver situation, what hardware generations will be supported, etc, at which time they will be shared on Phoronix.
On the NVIDIA side, it's great to see both Android and Linux support at-launch and their Windows support goes from Windows 10 back to Windows 7. NVIDIA is supporting Vulkan on the GeForce 600 "Kepler" graphics processors and newer. The NVIDIA Vulkan driver going out today is considered beta. Pretty much the best Vulkan support going out today is from NVIDIA.
On the AMD side, the Vulkan Linux driver is initially closed-source as expected and likely will not even be released today for penguin gamers. That's because unfortunately the Vulkan Linux driver quality is not up to the same level as AMD's Vulkan Windows driver. The Windows-only driver release is considered "alpha/beta-ish" while the Linux driver is "not quite ready for prime-time." AMD is looking to begin pushing the Linux version when their Windows version comes out of beta in the regular release cycle. In regards to when the AMD Vulkan code might be opened, I heard, "opening the full stack is still a ways off, but it's certainly something we're hoping to do."
With regard to the AMD Vulkan Linux driver, also keep in mind that it's only going to work with the AMDGPU DRM driver. For the hardware supported by default currently with the AMDGPU DRM driver is the Tonga, Fiji, Iceland, Carrizo, and Fury graphics cards along with all future models. Basically, GCN 1.2 and newer. There does remain though the experimental AMDGPU GCN 1.1 support if building your kernel that way, but no support at present in the DRM kernel driver for GCN 1.0 or earlier.
Imagination Technologies will be making available some tech demos shortly and they also have prepped their Vulkan driver for PowerVR graphics hardware.
The Vulkan Common Loader
Similar to the concepts of GLVND and the OpenCL Installable Client Drivers (ICD), the Vulkan driver layout is much better than the current state of the OpenGL Linux ABI and similar to OpenCL relies on the concept of ICDs. Vulkan makes use of a common loader originally developed by LunarG and should soon make its way into various Linux distribution repositories.
This common loader is, of course, vendor/driver-agnostic and is open-source. This loader is what provides the libvulkan.so.1 and the Debian package I've seen so far indicates it is aptly-named vulkan-loader. In fact, this same common loader is used on Windows as well.
Until this common loader is found widely throughout the ecosystem, expect the proprietary drivers to continue to package it as part of their distribution installer. Each Vulkan driver on the system installs an ICD file in JSON format via /etc/vulkan/icd.d/. In the case of the NVIDIA Linux driver at least, the Vulkan support is still loaded through the driver's libGL.so.1.
Wayland & Mir
For months we've been reporting that Mir and Wayland would have first-rate Vulkan support along with X11 (when using DRI3 rendering). This all remains accurate and there is Mir and Wayland platform support with Vulkan 1.0. It's also still possible to adapt Vulkan for any embedded use-cases, like maybe one day seeing DirectFB support for Vulkan.
As part of today's hard-launch, the LunarG SDK for Windows and Linux is being made available today. A Google Android SDK for Vulkan will be made available in the near future. As part of the SDK, the vulkan.h and vk_platform.h header files will be made public.
The LunarG SDK is open-source and contains a lot of useful resources for helping developers, plugging in the Vulkan validation layer for checking Vulkan code, and more. The RenderDoc graphics debugger is also receiving Vulkan support and that code is imminent for landing.
The Vulkan Test Suite will also soon appear on GitHub as the conformance tests for the interface. Other tools, validators, and Vulkan code samples are also being made open-source by this industry consortium.
While waiting for more games to be released with Vulkan support, expect the various IHVs to provide various -- open and closed-source demos. So far I've seen a Linux/Android demo from NVIDIA while they have some on the way. Excitingly, with Linux support and even source code. This is great to see with Linux users tending to miss out on graphics tech demos for many years and always being frustrated at past graphics card launch events that the companies generally have not been releasing Linux demos. At least one of the NVIDIA demos NVIDIA I've been playing with is open-source and will have both an OpenGL and Vulkan renderer.
Stay tuned, still working on it. The Linux drivers are coming hot off the compiler and pretty much all parties involved have warned about getting Linux gamers' hopes too high over the initial performance of Vulkan. Most of my pre-release Linux Vulkan driver testing was on the NVIDIA side while waiting on AMD to get a workable Vulkan Linux build to send over and Intel opting not to provide any early access.
While not really a hugely interesting benchmark in its current form, here is an OpenGL vs. Vulkan comparison for one of NVIDIA's demos they will be open-sourcing. This shows ideal Vulkan and OpenGL code-paths and shows the rendering time drop on a Maxwell GPU from 30ms with OpenGL to around 7ms with Vulkan.
Again, stay tuned for the really interesting stuff as this was just a brief demo I fixed up for building on Linux last night.
Vulkan Is Exciting Today From A Tech & Developer Perspective, More Exciting To Linux Gamers Later On
Overall, today is an extremely exciting day and is a critical milestone for open, cross-platform, industry-backed computer graphics. However, it isn't as magical today from an end-user perspective as one might have hoped from the Linux side with the Vulkan Linux drivers remaining a step behind Windows, similarly the Linux games also trailing, the NVIDIA Linux driver still leading the pact, etc, but then again this is the first time Khronos has ever pursued a hard-launch of a new specification. This day is really exciting though if you are a developer wishing to learn a new graphics API! The Vulkan scene is building up to be very bright in the months ahead once the drivers and supported games/software have matured. It's also exciting to think about the possibilites now with this single API across mobile, desktop, and other form factors for low-level accelerated graphics.
As pointed out in the article, it's also important as an end-user/gamer to keep your Linux gaming expectations realistic as it won't be until the new generation of engines/games that fully adapt to using the Vulkan API design that you will see significantly better performance. For games just plugging Vulkan into their OpenGL/DX11 designed titles, you won't see much greater performance (if any) than these current rendering implementations, at least from the game developers I spoke with ahead of launch. And as outlined in this article, OpenGL isn't at the end of the road and it will still be maintained concurrently with Vulkan by its respective Khronos working group. There's also exciting stuff still coming out of WebGL, OpenCL, and OpenGL SC, among other Khronos WGs.
I hope you found this overview useful and stay tuned for a lot more interesting coverage in the days ahead... Working as fast and reasonably as I can to single-handedly pump out all of the many interesting Vulkan Linux test cases, how to articles, and more. If you would like to show your support for all of our Linux graphics news coverage, please consider joining Phoronix Premium with our latest sale ending today. There will be AMD, Intel, NVIDIA Linux Vulkan benchmarks on Phoronix. I'm also looking at Windows vs. Linux Vulkan benchmarks. Let me know what else you'd like to see, of course, priority is given to those who are a premium member/supporter of the site. There will also be some Vulkan benchmarks landing soon via the Phoronix Test Suite.
If you enjoyed this article consider joining Phoronix Premium to view this site ad-free, multi-page articles on a single page, and other benefits. PayPal or Stripe tips are also graciously accepted. Thanks for your support.