Testing The Open-Source "RADV" Radeon Vulkan Driver vs. AMDGPU-PRO
With word coming out last week that the RADV open-source Vulkan driver can now render Dota 2 correctly, I've been running some tests the past few days of this RADV Vulkan driver compared to AMD's official (but currently closed-source) Vulkan driver bundled with the AMDGPU-PRO Vulkan driver.
Even months before the formal release of the Vulkan specification, AMD communicated that they would be initially releasing a closed-source Vulkan Linux driver that would later be open-sourced. We are 6+ months past the Vulkan 1.0 release, this Vulkan Linux driver has yet to be open-sourced nor has AMD communicated when that code drop may actually take place.
In the absence of the open-source Radeon Vulkan driver, David Airlie and Bas Nieuwenhuizen set out to develop their own "community" based Radeon Vulkan driver at least as an interim solution and potentially to pressure AMD to get out their official Vulkan driver. Bas Nieuwenhuizen is an independent contributor while David Airlie is the DRM subsystem maintainer and Red Hat developer who has long been involved in open-source AMD/ATI Linux driver efforts.
This new driver, RADV, is housed within the Mesa Git tree. RADV re-uses the AMDGPU LLVM compiler back-end, makes use of Intel's work on NIR within Mesa, and interfaces with the AMDGPU kernel DRM driver. Airlie explained in his original RADV announcement that this Radeon Vulkan driver is based upon Intel's "ANV" open-source Vulkan driver while the winsys to interface with the AMDGPU DRM kernel code is ported from Gallium3D.
The RADV approach basically goes from SPIR-V through the NIR intermediate representation to LLVM IR for consumption by the AMDGPU LLVM back-end. There isn't any "Vulkan state tracker" for Gallium3D with this Khronos API being too low-level for implementing on top of Gallium.
While the RADV driver was just started this summer, as of last week they already have it running with clean rendering on Valve's Dota 2 game. The bring-up of RADV was very brisk due to being able to re-use a lot of existing open-source Linux driver code and the fact that Vulkan drivers are much lighter/thinner than OpenGL drivers.
Much of the RADV testing/development has happened from Tonga (e.g. R9 285 / R9 380) and Fiji (R9 Fury) hardware and that seems to be where you can get the best mileage from this open-source Vulkan driver. There were some regressions recently for Radeon RX 400 (Polaris) hardware, but with the latest Git code as of Monday it seemed to be working fine for at least my RX 480.
Assuming RADV doesn't get killed off by an official AMD Vulkan code drop, there are plans to get RADV working for other AMD GCN GPUs. My tests for this article happened with a Radeon R9 285, R9 Fury, and RX 480.
The Talos Principle and Dota 2 are the current main Linux games available with Vulkan renderers, not counting vkQuake or the light demos. Most of the RADV efforts so far have been around Dota 2 and the Vulkan conformance tests and other popular Vulkan code samples.
The Talos Principle
Not for benchmarking, but in curious to see how far RADV is with The Talos Principle Vulkan renderer, here are some pictures when trying the Git code:
Not pretty, but then again they are most of the way there and given the speed at which RADV has been advancing, it wouldn't be too surprising if this game is playing with this open-source Vulkan driver in a matter of days or weeks.
Now onto the Dota 2 fun....