Cannot get AMD GPU Working (Vulkaninfo always hits error)

Hello, I’m a relatively new CachyOS user and have been extremely happy with it so far, even during a couple of moments where I’ve had to get my feet wet fixing some small issues. Recently I experienced a similar issue as in this thread and decided that was my sign to switch from an Nvidia GPU to an AMD one. Specifically my old GPU was a 2080ti and the new GPU is an RX 9070 XT.

However, immediately after installing the GPU, I noticed that all my Steam games that used a compatibility layer were no longer launching. A native game (Factorio) ran at an extremely low FPS (1-5 fps), and FurMark also never exceeded 1 fps, with the GPU usage graph never exceeding 15% GPU usage.

At the same time I also noticed that btop was not detecting a GPU and was not displaying any GPU usage data. At this point I figured it was possibly a driver issue and after some more research I’m coming up empty.

What I’ve done so far:

  • Updated with pacman -Syu
  • Ran chwd -r nvidia-open-dkms to remove the remaining nvidia drivers
  • Updated my initramfs
  • Rebooted
  • Checked with vulkaninfo, which returned an error (more on this below)
  • Ran chwd -r amd and deleted all my graphics drivers (oops)
  • Chrooted from live USB and ran chwd -a to get the AMD drivers back
  • Rebooted
  • vulkaninfo still doesn’t work
  • Tried following the steps in this guide from the Arch wiki, but didn’t result in any change, and honestly I don’t feel like I fully understand what it was telling me to do.

When I try to run vulkaninfo --summary after the steps described in The CachyOS Wiki’s GPU Migration page I get the following error:

❯ vulkaninfo --summary
WARNING: [../mesa-25.2.6/src/amd/vulkan/radv_physical_device.c:2160] Code 0 : Could not get the kernel driver version for device /dev/dri/renderD128: Invalid argument (VK_ERROR_INCOMPATIBLE_DRIVER)
ERROR: [Loader Message] Code 0 : setup_loader_term_phys_devs:  Failed to detect any valid GPUs in the current config
ERROR at /usr/src/debug/vulkan-tools/Vulkan-Tools/vulkaninfo/./vulkaninfo.h:247:vkEnumeratePhysicalDevices failed with ERROR_INITIALIZATION_FAILED

Interestingly, if I run sudo vulkaninfo --summary, I get a different output:

❯ sudo vulkaninfo --summary
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
WARNING: radv is not a conformant Vulkan implementation, testing use only.
==========
VULKANINFO
==========

Vulkan Instance Version: 1.4.328


Instance Extensions: count = 24
-------------------------------
VK_EXT_acquire_drm_display             : extension revision 1
VK_EXT_acquire_xlib_display            : extension revision 1
VK_EXT_debug_report                    : extension revision 10
VK_EXT_debug_utils                     : extension revision 2
VK_EXT_direct_mode_display             : extension revision 1
VK_EXT_display_surface_counter         : extension revision 1
VK_EXT_headless_surface                : extension revision 1
VK_EXT_surface_maintenance1            : extension revision 1
VK_EXT_swapchain_colorspace            : extension revision 5
VK_KHR_device_group_creation           : extension revision 1
VK_KHR_display                         : extension revision 23
VK_KHR_external_fence_capabilities     : extension revision 1
VK_KHR_external_memory_capabilities    : extension revision 1
VK_KHR_external_semaphore_capabilities : extension revision 1
VK_KHR_get_display_properties2         : extension revision 1
VK_KHR_get_physical_device_properties2 : extension revision 2
VK_KHR_get_surface_capabilities2       : extension revision 1
VK_KHR_portability_enumeration         : extension revision 1
VK_KHR_surface                         : extension revision 25
VK_KHR_surface_protected_capabilities  : extension revision 1
VK_KHR_wayland_surface                 : extension revision 6
VK_KHR_xcb_surface                     : extension revision 6
VK_KHR_xlib_surface                    : extension revision 6
VK_LUNARG_direct_driver_loading        : extension revision 1

Instance Layers: count = 6
--------------------------
VK_LAYER_INTEL_nullhw           INTEL NULL HW                                                1.1.73   version 1
VK_LAYER_MESA_anti_lag          Open-source implementation of the VK_AMD_anti_lag extension. 1.4.303  version 1
VK_LAYER_MESA_device_select     Linux device selection layer                                 1.4.303  version 1
VK_LAYER_MESA_overlay           Mesa Overlay layer                                           1.4.303  version 1
VK_LAYER_MESA_screenshot        Mesa Screenshot layer                                        1.4.303  version 1
VK_LAYER_MESA_vram_report_limit Limit reported VRAM                                          1.4.303  version 1

Devices:
========
GPU0:
        apiVersion         = 1.4.318
        driverVersion      = 25.2.6
        vendorID           = 0x1002
        deviceID           = 0x7550
        deviceType         = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
        deviceName         = AMD Radeon RX 9070 XT (RADV GFX1201)
        driverID           = DRIVER_ID_MESA_RADV
        driverName         = radv
        driverInfo         = Mesa 25.2.6-cachyos1.2
        conformanceVersion = 1.4.0.0
        deviceUUID         = 00000000-0e00-0000-0000-000000000000
        driverUUID         = 414d442d-4d45-5341-2d44-525600000000

I’ve reached the limit of my current troubleshooting proficiency and I can’t figure out what I’m doing wrong or what I need to do to fix this. Does anyone have an idea on what’s happening and how to address it? Any information on this is welcome; I love learning more about how computers work!

EDIT: I realized I hadn’t linked the result of cachyos-bugreport.sh: 9e6d6fd

I somewhat fixed my own problem! Turns out the answer was in an Arch Forum post that I had overlooked previously.

It looks like that was just a temporary solution, I still have an issue.

Specifically, it appears the mesa drivers are not new enough to support the 9070XT, and I needed the mesa-git and lib32-mesa-git drivers from the AUR. The solution was then to run yay -Syu mesa-git lib32-mesa-git and overwrite the existing mesa and vulkan drivers. After that, everything works as expected.

Unfortunately now I am stuck with all my programs choosing to use llvmpipe instead of the GPU to render, which results in everything running extremely slowly.

Strangely, lspci -k shows that the amdgpu driver is loaded

0e:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Navi 48 [Radeon RX 9070/9070 XT/9070 GRE] (rev c0)
        Subsystem: ASRock Incorporation Device 5417
        Kernel driver in use: amdgpu
        Kernel modules: amdgpu

However, glxinfo shows that OpenGL is using llvmpipe for rendering

❯ glxinfo -B
name of display: :0
failed to get driver name for fd 4
failed to get driver name for fd 5
glx: failed to create dri3 screen
failed to load driver: radeonsi
display: :0  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Mesa (0xffffffff)
    Device: llvmpipe (LLVM 21.1.4, 256 bits) (0xffffffff)
    Version: 26.0.0
    Accelerated: no
    Video memory: 64192MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 4.5
    Max compat profile version: 4.5
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
Memory info (GL_ATI_meminfo):
    VBO free memory - total: 0 MB, largest block: 0 MB
    VBO free aux. memory - total: 55754 MB, largest block: 55754 MB
    Texture free memory - total: 0 MB, largest block: 0 MB
    Texture free aux. memory - total: 55754 MB, largest block: 55754 MB
    Renderbuffer free memory - total: 0 MB, largest block: 0 MB
    Renderbuffer free aux. memory - total: 55754 MB, largest block: 55754 MB
Memory info (GL_NVX_gpu_memory_info):
    Dedicated video memory: 0 MB
    Total available memory: 64192 MB
    Currently available dedicated video memory: 0 MB
OpenGL vendor string: Mesa
OpenGL renderer string: llvmpipe (LLVM 21.1.4, 256 bits)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 26.0.0-devel (git-e3404af0ed)
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 4.5 (Compatibility Profile) Mesa 26.0.0-devel (git-e3404af0ed)
OpenGL shading language version string: 4.50
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile

OpenGL ES profile version string: OpenGL ES 3.2 Mesa 26.0.0-devel (git-e3404af0ed)
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

Does anyone know how to actually use the AMD GPU instead of llvmpipe?

Hello and welcome,

Can we get the output from;

sudo cachyos-bugreport.sh

Hi, thanks for the welcome! Here’s the output from cachyos-bugreport.sh: 9e6d6fd

Some more possibly important context:

  • There is no card0 in /dev/dri. ls -al /dev/dri returns:
drwxr-xr-x        - root 12 Nov 03:44  .
drwxr-xr-x        - root 12 Nov 03:44  ..
drwxr-xr-x        - root 12 Nov 03:44  by-path
crw-rw----@   226,1 root 12 Nov 03:44 󰡯 card1
crw-rw-rw-  226,128 root 12 Nov 03:44 󰡯 renderD128
  • greping dmesg for drm gives me the following excerpt:
[    0.671233] [drm] Initialized simpledrm 1.0.0 for simple-framebuffer.0 on minor 0
[    3.861572] amdgpu 0000:0e:00.0: amdgpu: [drm] Loading DMUB firmware via PSP: version=0x0A000400
[    3.861950] amdgpu 0000:0e:00.0: amdgpu: Found VCN firmware Version ENC: 1.9 DEC: 9 VEP: 0 Revision: 38
[    4.142734] amdgpu 0000:0e:00.0: amdgpu: SMU is initialized successfully!
[    4.143726] amdgpu 0000:0e:00.0: amdgpu: [drm] Display Core v3.2.340 initialized on DCN 4.0.1
[    4.147879] amdgpu 0000:0e:00.0: amdgpu: [drm] DMUB hardware initialized: version=0x0A000400
[    4.820792] [drm] Initialized amdgpu 3.64.0 for 0000:0e:00.0 on minor 1
  • My mkinitcpio.conf already has MODULES = (amdgpu) in it, and I’ve tried blacklisting simpledrm as described in this Arch forum thread and regenerating initramfs, but that doesn’t seem to have prevented simpledrm from grabbing minor0 before amdgpu

I’m not currently at my computer right now so it may take me some time to get more detailed dmesg or journalctl output, but this is what I can remember from my efforts yesterday.

Unfortunately I’m a bit pressed for time as I’ll be traveling in a few days. I’ll probably try just re-installing the OS as I have backups I can restore from. Hopefully this can clean the system of any errant configurations left over from when it was originally running an nvidia GPU…

Ultimately, reinstalling CachyOS solved the driver issue. I’m still not sure what the issue was originally, but I suspect it had to do with not cleanly migrating from Nvidia to AMD. In the end my issue is resolved.

I’m amending this post in case someone else runs into the same issue as I think I’ve managed to track down the culprit that messed up the GPU drivers for me.

TL;DR: OpenGL will start failing to load radeonsi for me after installing nomachine from the AUR. I’m not yet sure exactly why this is happening, but I’ve at least got a responsible party that I can look into.

After getting burned twice by this issue, I reinstalled CachyOS using Limine and modified its config to keep 50 snapshots so if this ever happened again I can go through them one by one until I identify the problem install. Turns out OpenGL works fine with radeonsi until the moment I install nomachine from the AUR. I’ll have to go through its PKGBUILD more closely next time I guess, but at least I can revert to a working snapshot. I can see why so many people love Limine and BTRFS snapshots now :slight_smile:

You are not the first it seems, and it does not appear to be particular to amd either..

It’s the worst PKGBUILD I have ever saw, lot of unnecessary gzip operations… Doesn’t have anything in the PKGBUILD that could change your configs. I didn’t download the gzip to have a look around. Why do you need nomachine?