The Open-Source NVIDIA/Nouveau vs. NVIDIA Linux Driver At The End Of 2019 - Poor But A Lot Of Hope
While the open-source Radeon Linux graphics stack has made some remarkable improvements this year not only from AMD but also the likes of Valve, unfortunately not as much can be said about the state of the open-source NVIDIA (Nouveau) driver. The Nouveau Linux graphics driver remains much slower than the proprietary driver, the hardware with the best support is several generations old, and due to the lack of signed firmware images there still isn't yet any open-source 3D for the Turing GPUs that have been shipping for months. But there may be hope in 2020.
During 2019 there wasn't any major breakthroughs in the open-source NVIDIA / Nouveau driver support when it comes to desktop graphics. The best-supported hardware is still the GeForce 600/700 "Kepler" series since at least there is manually re-clocking support for being able to push the GPU and video memory to their higher clock speeds rather than being bound to the much lower boot clock speeds. That re-clocking is still done manually and even in the case of the GTX 680 on Linux 5.5 I had to resort to manually transitioning between each performance state up to the highest clock speed - when trying to jump straight to the highest clock speed, the GPU hung and screen artifacts appeared.
For the GeForce GTX 900 Maxwell series and newer, there isn't any re-clocking support at all and thus just bound to the lower boot clock speeds. That really hinders the performance of the open-source NVIDIA driver as you can see with the latest benchmarks in this article. Supporting re-clocking on Maxwell and newer isn't easily possible due to the NVIDIA signed firmware requirements and not yet providing the PMU bits for properly handling power management to allow the re-clocking to be done in a sane manner and ensuring proper power/thermal handling. Pascal is in the same boat and for Turing this year mode-setting support came about but no hardware acceleration yet.
The Nouveau Gallium3D driver is still exposing OpenGL 4.3 for the NVIDIA GPUs though OpenGL 4.5 at least is within the realm of possibilities once ironing out a few more extensions and hitting CTS certification. OpenGL 4.6 support is still more of a challenge especially in needing to handle GL_ARB_gl_spirv and friends...
With that said, there still isn't any Nouveau Vulkan driver that is usable for end-users yet. As another let down.
But there has been some good news this year for Nouveau. Red Hat continues having developers work on the open-source NVIDIA driver stack with a compute focus. This year they have been working on SPIR-V support for OpenCL, various OpenCL Gallium3D driver changes, Nouveau NIR support, SVM support via HMM, and other infrastructure work.
This is where things could get exciting in 2020... Red Hat continue is investing in Nouveau from the compute/OpenCL angle, which at this stage doesn't make much sense considering the above-mentioned problems around re-clocking and not being able to perform optimally and the latest generation hardware not even having accelerated support right now. Yet for 2+ years they have been working on the Nouveau OpenCL bits while seemingly ignoring the "elephant in the room" of the OpenCL support being basically useless if the GPU can't perform well. But we also know that Red Hat and NVIDIA are collaborating on some open-source efforts. It was also late this summer NVIDIA started an organized GPU documentation site. So what the hell is going on?
There could be a bigger NVIDIA open-source play happening in 2020. As I was first to report earlier this month, at next year's GPU Technology Conference in March, it looks like NVIDIA has some sort of open-source driver announcement to make. It's very unlikely NVIDIA would be open-sourcing their entire driver stack due to IP/legal issues and other matters, but the most likely scenario if NVIDIA is making some sort of new open-source push would be on getting their kernel driver opened up. That would be a big step forward in Linux compatibility while allowing CUDA and their other user-space drivers to remain closed-source. Their kernel driver as open-source would clear up a lot of headaches/issues users have in the NVIDIA proprietary driver today and then the Nouveau Mesa components -- including Red Hat's investments into compute -- could be adapted to those kernel interfaces. With their kernel driver having automatic re-clocking and other features not currently supported by the Nouveau DRM driver, that would in turn take care of most of the problems right now blocking better open-source NVIDIA GPU support. Anyhow, this is just speculation at this point that their 2020 open-source play would be about their kernel driver, but at least it would explain why NVIDIA is continuing to invest in the Nouveau OpenCL/compute user-space portion. We'll see come March or so.
For those wondering what the open-source NVIDIA performance looks like today with manually re-clocking the GeForce GTX 680 to its highest performance state and then the more limited GeForce GTX 980 Maxwell and GTX 1080 Pascal open-source support, here are some benchmarks of Mesa 20.0-devel + Linux 5.5 Nouveau compared to NVIDIA's proprietary 435.21 release driver. Obviously only OpenGL performance could be compared and for titles that could run on Nouveau.