Linux 5.9 Brings Hardware Accelerated Video Playback To 10+ Year Old AMD Graphics Cards Using The "amdgpu" Linux Kernel Driver
AMD kicked off their HD 7000 series graphics cards with the launch of the Radeon HD 7970 code-named "Tahiti" in December 2011. Linux users are finally able to get working Hardware Video Decoding and Vulkan support on these and other older AMD graphics cards using the Linux kernel's "amdgpu" driver.
written by 윤채경 (Yoon Chae-kyung). published 2020-09-10 - last edited 2020-09-14
The mpv video player playing a video with SNSD performing "Time Machine" on stage. Playback is done using hardware accelerated video decoding on a Radeon 7850 GPU powered by the "amdgpu" kernel driver. The desktop environment is something called Xfce 4.14 and the GNU/Linux distribution is an upcoming IBM product called "Fedora 33".'
The Linux graphics driver for AMD graphics cards was named
radeon when the Radeon HD 7000 series graphics cards were launched back in 2011. That driver worked alright at the time and basic things like OpenGL backed by the Mesa graphics stack, video accelerated playback and HDMI audio worked fine on early "Graphics Core Next" (GCN) based cards.
Those with 10 year old AMD graphics cards can finally use Vulkan and hardware accelerated video decoding.
AMD started developing a shiny new revolutionary Linux driver called
amdgpu around the time their third generation GCN "Volcanic Island" cards were launched. AMD stuck the
amdgpu driver and sort of forgot about the
radeon driver. That left those with first and second-generation GCN cards in the cold as second-class citizens.
radeon driver on older AMD graphics cards and APUs was fine for many years, and those with older cards did not miss out on much until the advent of the Vulkan graphics API. The Mesa
RADV Vulkan driver can only be used with the
amdgpu graphics driver.
amdgpu did get some support for older cards a few years back but there were some glaring problems with using that driver:
- HDMI audio didn't work on most cards.
- Hardware accelerated video encoding and decoding was unsupported.
That meant that those with old AMD graphics cards had to choose between Vulkan OR hardware accelerated video decoding. You could not have both features.
That situation will finally be rectified when Linux 5.9 is released. AMD developer Alex Jivin took it upon himself to port UVD and VCE power managment, UVD clock control and VCE clock control for Southern Island graphics cards from the
radeon driver to the
amdgpu driver this summer and the code was sneaked in during the Linux 5.9 merge window. AMD has also provided new amdgpu firmware for these cards.
Linux 5.9 finally allows those with very old AMD graphics cards to use Vulkan and have working hardware accelerated video encoding and decoding.
amdgpu is still not the default driver for older AMD graphics cards. Using a kernel parameter is still required. You will need to use one of the following kernel parameters to choose it:
|Ancient AMD tech||Kernel options enabling the |
|Southern Islands cards
R9 270, R7 240, R7 250, R9-280, R9 370X
Kernel parameters can be added to
/etc/sysconfig/grub (assuming you are using the GRUB bootloader).
We have tested the shiny new
amdgpu support for a decade old graphics cards in Linux 5.9 using Linux 5.9 rc4 and a AMD Radeon 7850 with 2 GiB RAM. This particular first-generation GCN card finally works as it should have when it was launched in March 2012. HDMI audio output works, Vulkan works and VAAPI accelerated hardware video decoding works. They've even made suspend to RAM work. Suspend to disk, on the other hand, is utterly broken. Perhaps they forgot about that one. Still, the current situation is better than it was when we wrote our "The Current State Of Older AMD Graphics Hardware On Linux: What Driver To Use And What To Expect" article earlier this year.
The kernel ring buffer (dmesg) on a machine with a Radeon HD 7850 GPU running Linux 5.9 rc4 after resuming from hibernation. The screenshot was taken by ssh-ing in from another machine since there's no hope of getting anything on the attached monitor at that point.
OpenCL compute using the Radeon Open Compute framework is of course not supported on any of the older first and second generation GCN cards. AMD didn't write a huge graphics compute framework just so hobbyists can have OpenCL acceleration in LibreOffice. You can use Radeon Open Compute for that purpose on most RX 400-series cards and newer but you can forget about it if your card is older than that.
The newfound support for hardware video decoding on older AMD graphics cards is probably a big part of the reason why some AMD fanboys call AMD graphics cards "fine wine": It may take a decade but you'll eventually get most of the feature-set you should have gotten right away when you bought the card. AMD has added support for their upcoming "Sienna Cichlid" and "Navy Flounder" graphics chips to Linux 5.9 so we can only hope those who buy these upcoming AMD cards based on an entirely new architecture (they are not NAVI-based, amdgpu/sdma_v5_2.c clearly shows it's a new display core) will get them mostly working quicker than those who bought first-generation GCN cards did.