Skip to content

Instantly share code, notes, and snippets.

@peppergrayxyz
Last active October 14, 2025 18:01
Show Gist options
  • Save peppergrayxyz/fdc9042760273d137dddd3e97034385f to your computer and use it in GitHub Desktop.
Save peppergrayxyz/fdc9042760273d137dddd3e97034385f to your computer and use it in GitHub Desktop.
QEMU with VirtIO GPU Vulkan Support

QEMU with VirtIO GPU Vulkan Support

With its latest reales qemu added the Venus patches so that virtio-gpu now support venus encapsulation for vulkan. This is one more piece to the puzzle towards full Vulkan support.

An outdated blog post on clollabora described in 2021 how to enable 3D acceleration of Vulkan applications in QEMU through the Venus experimental Vulkan driver for VirtIO-GPU with a local development environment. Following up on the outdated write up, this is how its done today.

Definitions

Let's start with the brief description of the projects mentioned in the post & extend them:

  • QEMU is a machine emulator
  • VirGL is an OpenGL driver for VirtIO-GPU, available in Mesa.
  • Venus is an experimental Vulkan driver for VirtIO-GPU, also available in Mesa.
  • Virglrenderer is a library that enables hardware acceleration to VM guests, effectively translating commands from the two drivers just mentioned to either OpenGL or Vulkan.
  • libvirt is an API for managing platform virtualization
  • virt-manager is a desktop user interface for managing virtual machines through libvirt

Merged Patches:

Work in progress:

Prerequisites

Make sure you have the proper version installed on the host:

  • linux kernel >= 6.13 built with CONFIG_UDMABUF
  • working Vulkan and kvm setup
  • qemu >= 9.2.0
  • virglrenderer with enabled venus support
  • mesa >= 24.2.0

You can verify this like so:

$ uname -r
6.13.0
$ ls /dev/udmabuf
/dev/udmabuf
$ ls /dev/kvm
/dev/kvm
$ qemu-system-x86_64 --version
QEMU emulator version 9.2.0
Copyright (c) 2003-2024 Fabrice Bellard and the QEMU Project developers

Check your distros package sources how they build virglrenderer.

For Vulkan to work you need the proper drivers to be installed for your graphics card.

To verfiy your setup, install vulkan-tools. Make sure mesa >= 24.2.0 and test vkcube:

$ vulkaninfo --summary | grep driverInfo
	driverInfo         = Mesa 24.2.3-1ubuntu1
	driverInfo         = Mesa 24.2.3-1ubuntu1 (LLVM 19.1.0)
...
$ vkcube
Selected GPU x: ..., type: ...

Building qemu

If your distro doesn't (yet) ship and updated version of qemu, you can build it yourself from source:

wget https://download.qemu.org/qemu-9.2.0.tar.xz
tar xvJf qemu-9.2.0.tar.xz
cd qemu-9.2.0
mkdir build && cd build
../configure --target-list=x86_64-softmmu  \
  --enable-kvm                 \
  --enable-opengl              \
  --enable-virglrenderer       \
  --enable-gtk                 \
  --enable-sdl
make -j4

The configuration step will throgh errors if packages are missing. Check the qemu wiki for further info what to install: https://wiki.qemu.org/Hosts/Linux

Create and run an image for QEMU

Create an image & fetch the distro of your choice:

Host

ISO=ubuntu-24.10-desktop-amd64.iso  
wget https://releases.ubuntu.com/oracular/ubuntu-24.10-desktop-amd64.iso  

IMG=ubuntu-24-10.qcow2
qemu-img create -f qcow2 $IMG 16G

Run a live version or install the distro

qemu-system-x86_64                                               \
    -enable-kvm                                                  \
    -M q35                                                       \
    -smp 4                                                       \
    -m 4G                                                        \
    -cpu host                                                    \
    -net nic,model=virtio                                        \
    -net user,hostfwd=tcp::2222-:22                              \
    -device virtio-vga-gl,hostmem=4G,blob=true,venus=true        \
    -vga none                                                    \
    -display gtk,gl=on,show-cursor=on                            \
    -usb -device usb-tablet                                      \
    -object memory-backend-memfd,id=mem1,size=4G                 \
    -machine memory-backend=mem1                                 \
    -hda $IMG                                                    \
    -cdrom $ISO                                                  

Adjust the parameters accordingly:

  • smp: number of cpu cores
  • m: RAM
  • hostmem,size: VRAM

Guest

Install mesa-utilites and vulkan-tools to test the setup:

$ glxinfo -B
$ vkcube
Selected GPU x: ..., type: ...

If the deive is llvmpipe somehting is wrong. The device should be virgl (...).

Troubleshooting

  • (host) add -d guest_errors to show error messages from the guest
  • (guest) try installing vulkan virtio drivers and mesa
  • check the original blog post

Ubuntu 24.10

This is how you do it on Ubuntu

kernel

Install mainline: https://github.com/bkw777/mainline

sudo add-apt-repository ppa:cappelikan/ppa
sudo apt update
sudo apt install mainline

find the latest kernel (>= 6.13), at the time of writing 6.13 is a release candidate, so include those:

$ mainline check --include-rc

Install kernel:

$ sudo mainline install 6.13-rc1

Verfify installed kernels:

$ mainline list-installed
mainline 1.4.10
Installed Kernels:
linux-image-6.11.0-13-generic
linux-image-generic-hwe-24.04
linux-image-unsigned-6.13.0-061300rc1-generic
mainline: done

reboot into new kernel

verify running kernel

$ uname -r
6.13.0-061300rc1-generic

virglrenderer

the ubuntu package is not compiled with the proper flags.

If installed remove it: $ sudo apt-get remove libvirglrenderer-dev

download, build & install from source with venus enabled

wget    https://gitlab.freedesktop.org/virgl/virglrenderer/-/archive/1.1.0/virglrenderer-1.1.0.tar.gz
sudo apt-get install python3-full ninja-build libvulkan-dev libva-dev
python3 -m venv venv
venv/bin/pip install meson
venv/bin/meson build -Dvideo=true -Dvenus=true
ninja -C build
ninja install

qemu

install qemu >= 9.2.0, at the time of writing ubuntu has not yet packaged it

Install build depdencies: https://wiki.qemu.org/Hosts/Linux

sudo apt-get install build-essential pip libslirp-dev slirp
sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build
sudo apt-get install git-email
sudo apt-get install libaio-dev libbluetooth-dev libcapstone-dev libbrlapi-dev libbz2-dev
sudo apt-get install libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev
sudo apt-get install libibverbs-dev libjpeg8-dev libncurses5-dev libnuma-dev
sudo apt-get install librbd-dev librdmacm-dev
sudo apt-get install libsasl2-dev libsdl2-dev libseccomp-dev libsnappy-dev libssh-dev
sudo apt-get install libvde-dev libvdeplug-dev libvte-2.91-dev libxen-dev liblzo2-dev
sudo apt-get install valgrind xfslibs-dev 
sudo apt-get install libnfs-dev libiscsi-dev

build and run as described

virt-manager

-- work in progress --

Currently this is work in progress, so there is no option to add vulkan support in virt-manager. There are no fields to configure this. Also xml doesnt work, because libvirt doesn't know about these options either, so xml validation fails. There is however an option for QEMU command-line passthrough which bypasses the validation.

If you setup a default machine with 4G of memory, you can do this:

  <qemu:commandline>
    <qemu:arg value="-device"/>
    <qemu:arg value="virtio-vga-gl,hostmem=4G,blob=true,venus=true"/>
    <qemu:arg value="-object"/>
    <qemu:arg value="memory-backend-memfd,id=mem1,size=4G"/>
    <qemu:arg value="-machine"/>
    <qemu:arg value="memory-backend=mem1"/>
    <qemu:arg value="-vga"/>
    <qemu:arg value="none"/>
  </qemu:commandline>

Which gives this error:

qemu-system-x86_64: virgl could not be initialized: -1

Changing the number from 4G to 4194304k (same as memory) leds to this error:

qemu-system-x86_64: Spice: ../spice-0.15.2/server/red-qxl.cpp:435:spice_qxl_gl_scanout: condition `qxl_state->gl_draw_cookie == GL_DRAW_COOKIE_INVALID' failed

to be further investigated.

@myrslint
Copy link

Could this be a regression of some kind, maybe within the NVIDIA 580 branch, @zzyiwei? Thanks in advance.

If you have not patched the kernel on the host as indicated above I'm surprised Vulkan test applications (vkcube and vkgears) are showing you anything at all with an NVIDIA card.

@fzadikian
Copy link

fzadikian commented Sep 20, 2025

If you have not patched the kernel on the host as indicated above I'm surprised Vulkan test applications (vkcube and vkgears) are showing you anything at all with an NVIDIA card.

@myrslint On kernel 6.16.7? I undestood that it was reverted on 6.16.5. Maybe I wasn't clear, now I've changed my host. Now I am on these versions: virglrenderer 1.2.0, qemu 10.1.0, linux 6.16.5, NVIDIA driver 580.82.09. My guest is still on mesa 25.2.2.

@myrslint
Copy link

If you have not patched the kernel on the host as indicated above I'm surprised Vulkan test applications (vkcube and vkgears) are showing you anything at all with an NVIDIA card.

@myrslint On kernel 6.16.7? I undestood that it was reverted on 6.16.5. Maybe I wasn't clear, now I've changed my host. Now I am on these versions: virglrenderer 1.2.0, qemu 10.1.0, linux 6.16.5, NVIDIA driver 580.82.09. My guest is still on mesa 25.2.2.

I watched your screen recording now and realized you have an AMD CPU. That should not require the kernel patch I mentioned. Apologies for the incorrect information I provided earlier.

@zzyiwei
Copy link

zzyiwei commented Sep 21, 2025

I installed Artix (Arch-based) both as host and guest, host with NVIDIA and guest with mesa. Still, I notice the same symptoms: screencast.webm. Apparently the problem with vkgears also happens in the host, so maybe ignore that. This is the command I use to launch qemu: ...

@fzadikian Hi, I'm unable to repro locally, but I don't have a NV gpu either. However, from your linked video + the fact that wsi via wayland works while not with x11, it looks to me that your desktop environment has a low refresh rate cap for some reason.

Something to try:

  1. different external monitors
  2. use gtk display instead of sdl (though prior comments said it didn't work on NV)
  3. rolling back host nv driver

@adokacey
Copy link

adokacey commented Sep 22, 2025

I need help!

Host CPU: Ryzen 7 2700

Host Graphics Card: GeForce RTX 2060 Super 8GB

Host Graphics Driver: nvidia-open-driver-G06-signed-kmp-default-580.82.07_k6.16.7_1-2.1
(At some point I've removed this driver and tried enabling Venus with Nouveau too)

Host OS: OpenSUSE Tumbleweed with KDE (Wayland)
(I've installed the "KVM/QEMU/libvirt/virt-manager" stack by enabling "KVM server" and "KVM tools" via YasT Control Center.)

Guest OS: CachyOS with KDE and systemd-boot


What happened:

  1. I've managed to enable & run "Virtio-GPU + Virgl" successfully.
  2. I've been trying to enable & run "Virtio-GPU + Venus" for the past week. I've tried so many different things but the result is always same: Guest hangs at " :: Triggering uevents..." line. With "blob=false,venus=false" it'll boot properly. When I enable blob and venus " :: Triggering uevents..." problem starts.

Important bits from logs:
I got this from host /var/log/libvirt/qemu/.log
virgl could not be initialized: -1

I got this from guest via virsh console
[20.165762] [drm:virtio_gpu_init [virtio_gpu]] *ERROR* timed out waiting for cap set 0

I got this from host /var/log/virgl_test_server.log
pci id for fd 13: 10de:1f06, driver (null)
kmsro: driver missing


Important parts from XML:

<memoryBacking>
  <source type="memfd"/>
  <access mode="shared"/>
</memoryBacking>

<graphics type="spice">
  <listen type="none"/>
  <image compression="off"/>
  <gl enable="no"/>
</graphics>

<graphics type="egl-headless">
  <gl rendernode="/dev/dri/renderD128"/>
</graphics>

<video>
  <model type="none"/>
</video>

<qemu:commandline>
  <qemu:arg value="-device"/>
  <qemu:arg value="virtio-vga-gl,hostmem=4G,blob=true,venus=true"/>
</qemu:commandline>

@myrslint
Copy link

What is the Mesa version on your host?

This message:

pci id for fd 13: 10de:1f06, driver (null)
kmsro: driver missing

And subsequent failure of some Vulkan test apps e.g., vkgears, was present with closed NVIDIA proprietary driver up to 580.82.07 and Mesa up to 25.2.2. I reported it here at FDO's GitLab but received no feedback.

As of closed NVIDIA proprietary driver 580.82.09 and Mesa 25.2.3, on Arch Linux, with GTX 1060, the problem no longer appears and vkgears seems to run normally again.

For a test you can run QEMU from the command line and see if anything differs. A command line similar to the following might be useful:

qemu-system-x86_64 -cpu host -smp 8 -m 16G -enable-kvm -vga none -device virtio-vga-gl,hostmem=8G,blob=true,venus=true -display gtk,gl=es -object memory-backend-memfd,id=vm_mem,size=16G,share=on -machine q35,memory-backend=vm_mem -drive file=vm.qcow2,format=qcow2 -usb -device usb-tablet -netdev user,id=vm_net -device virtio-net,netdev=vm_net -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2-ovmf/x64/OVMF_CODE.4m.fd -drive if=pflash,format=raw,file=vm.OVMF_VARS.4m.fd -device virtio-sound-pci,audiodev=snd0 -audiodev pipewire,id=snd0

You can adjust the switches to your needs, of course. For example, the VM disk image might have a different name and/or be located elsewhere in the filesystem.

@adokacey
Copy link

Both vkcube and vkgears work on my host. Also:

vulkaninfo --summary | grep driverInfo
driverInfo = 580.82.07
driverInfo = Mesa 25.2.2 (LLVM 21.1.0)

@fzadikian
Copy link

fzadikian commented Sep 22, 2025

Hi, I'm unable to repro locally, but I don't have a NV gpu either. However, from your linked video + the fact that wsi via wayland works while not with x11, it looks to me that your desktop environment has a low refresh rate cap for some reason.

Something to try:

1. different external monitors

2. use gtk display instead of sdl (though prior comments said it didn't work on NV)

3. rolling back host nv driver

@zzyiwei Wow, I downgraded from 580.82.07 to 570.172.08 on my Debian host and all problems went away. 580.82.09 was also trouble on Arch host. For me at least, 580 branch regressions are not over. Not sure how to take this up with upstream, but I'm happy it even works. Thanks!

PS: My virtual display is at 75hz, is there a way to modify this? (I have 180hz and 75hz monitors).

@adokacey
Copy link

adokacey commented Sep 22, 2025

This time I've started the VM directly with qemu by running this command:

sudo qemu-system-x86_64 \
  -name CachyOS \
  -cpu host \
  -smp 6 \
  -m 6G \
  -enable-kvm \
  -object memory-backend-memfd,id=vm_mem,size=6G,share=on \
  -machine pc-q35-10.0,memory-backend=vm_mem \
  -drive file=/var/lib/libvirt/images/CachyOS.1758453592,format=qcow2,if=virtio \
  -device virtio-serial-pci \
  -device qemu-xhci,id=xhci \
  -device usb-kbd,bus=xhci.0,port=1 \
  -device usb-tablet,bus=xhci.0,port=2 \
  -netdev user,id=vm_net -device virtio-net-pci,netdev=vm_net \
  -device virtio-vga-gl,hostmem=4G,blob=true,venus=true \
  -display egl-headless,rendernode=/dev/dri/renderD128 \
  -drive if=pflash,format=raw,readonly=on,file=/usr/share/qemu/ovmf-x86_64-code.bin \
  -drive if=pflash,format=raw,file=/var/lib/libvirt/qemu/nvram/CachyOS_VARS.fd \
  -monitor unix:/tmp/qemu-monitor.sock,server,nowait \
  -vga none

And I got this error:

pci id for fd 11: 10de:1f06, driver (null)
kmsro: driver missing

Also there was no GUI window.

Earlier I tried -display gtk,gl=es \ and got this error: qemu-system-x86_64: OpenGL is not supported by display backend 'gtk'

So I used -display egl-headless

qemu-system-x86_64 -display help prints this:

Available display backend types: 
none
gtk
egl-headless
curses
spice-app

@myrslint
Copy link

myrslint commented Sep 22, 2025

I assume you have the relevant virglrenderer package installed on your host OS (SuSE Tumbleweed).

That error message about the GTK UI not supporting OpenGL is a serious problem. Relevant OpenGL libraries should have been present at compile time when QEMU was packaged for your distro by its respective maintainers for them to be picked up by QEMU's build system and linked against for future use.

The egl-headless backend was recommended in the past for achieving hardware acceleration with QEMU on NVIDIA GPUs. That is no longer required. Even if Venus (Vulkan encapsulation) does not work you should at least be able to get GLES acceleration in the guest via virglrenderer.

It is worth taking a step back and seeing if you can get at least EGL/GLES acceleration in your guest. For a test, you can drop the Venus-related options and just run QEMU with GTK or SDL UI and run a test application such as eglgears_x11 or eglgears_wayland in your guest. Both the GTK and SDL UI should support the gl=es option. Otherwise, I think all bets are off regarding getting any hardware graphics acceleration for the guest out of QEMU, whether it's through VirGL or through Venus. When running eglgears you should be seeing the QEMU process as a Graphics type accelerated application in your GPU monitoring software (nvidia-smi or nvtop).

@adokacey
Copy link

I've installed QEMU by enabling "KVM server" and "KVM tools" options via YaST Control Center. I don't know what packages are installed exactly and how are these packages compiled by the maintainers.

I had to use egl-headless while enabling only VirGL too. I guess there is more problem with my setup. I don't know what to do. Do I need to compile these projects myself? Should I remove the current stuff?

I'm not a virtualization expert. I only know launching virt-manager app and going through "Create a new virtual machine" wizard. Also copy/pasting some XML stuff. But I want to enable Venus. What projects I should look into? How do I find the upstream, wiki, manual, reference etc.? Can you help me? I guess the freedesktop/mesa link you provided earlier is one of the important places.

@myrslint
Copy link

I've installed QEMU by enabling "KVM server" and "KVM tools" options via YaST Control Center. I don't know what packages are installed exactly and how are these packages compiled by the maintainers.

I had to use egl-headless while enabling only VirGL too. I guess there is more problem with my setup. I don't know what to do. Do I need to compile these projects myself? Should I remove the current stuff?

I'm not a virtualization expert. I only know launching virt-manager app and going through "Create a new virtual machine" wizard. Also copy/pasting some XML stuff. But I want to enable Venus. What projects I should look into? How do I find the upstream, wiki, manual, reference etc.? Can you help me? I guess the freedesktop/mesa link you provided earlier is one of the important places.

You will need a deeper familiarity with your Linux distribution. That can help with troubleshooting. I'm not familiar with SuSE enough to help with its package manager but a first place to look for help can be the resources listed on the sidebar of openSUSE subreddit. They list a support portal, user forums, and chat rooms.

In general, it may help with debugging QEMU/KVM if you start from a QEMU command line before bringing in more details via libvirt and virt-manager. Take a step-by-step approach and add the items you need to the command line one by one, ensuring each one works as expected before moving on to adding another one. This should tell you which feature is not working or is interacting poorly with other features.

That's as much advice as I can offer without more details on the software you are using.

@zhando
Copy link

zhando commented Sep 29, 2025

hello, this mailing list of sorts has been very helpful on my own qemu journey of trying out curated linux distros like omakub (ubuntu-based) and omarchy (arch linux based). Both of the preceding work very well with the configurations discussed here with my host system of an AMD Zen3 processor and nvidia 3060ti gpu card running under Arch Linux. Wasn't always that way though. Guest displays seemed a bit unstable and the quality lacked a bit. But I've returned to this recently with updated host kernel and nvidia drivers and things have improved enormously.

However, it just occurred to me that I can use these guest os configs as vpn clients so as not to interfere with a network app I run on my host. I thought the best way to go about this was to created a bridged network config on the host so the guest gets its own ip from the router. This seems to work just fine, to a point. I noticed that updating the os software on the guest over the bridged interface was dog slow, so slow as to be unusable. And YET, when I switched on the vpn, it was as quick as could be.

So vpn OFF, on the guest, youtube is unusable, software update unusable, smaller things are ok.. VPN ON, on the guest, everything good save for my local access (which is fixable I guess). Anyone have any ideas about this?

I'm using pretty well documented bridge configs for qemu like:

-netdev bridge,id=hn0                                       \
-device virtio-net-pci,netdev=hn0,id=nic1                   \

coupled with the qemu-bridge-helper.

@richardm1
Copy link

richardm1 commented Sep 29, 2025

-netdev bridge,id=hn0
-device virtio-net-pci,netdev=hn0,id=nic1 \

This comment is on a Windows-related thread but I've found these host offloads to be generally useful.

@zhando
Copy link

zhando commented Sep 29, 2025

This comment is on a Windows-related thread but I've found these host offloads to be generally useful.

I see the "bingo" moment in that thread but it's not clear to me what to do on both the host and guest sides. I don't use libvirt. I've seen vhost turned on for tap devices but I don't have an idea how to integrate vhost into my bridge config and configure vhost as described in lowjoel's comment.

@fzadikian
Copy link

Hello, does anybody know why performance under wine/dxvk is sluggish, while native vulkan is not? Is there something I'm missing?

@SpookySkeletons
Copy link

@fzadikian Using any special settings on anything in particular?

@fzadikian
Copy link

@SpookySkeletons Apart from being cursed by NVIDIA (as I've mentioned before), not really. I've tried both Lutris and Steam (proton).

@adokacey
Copy link

adokacey commented Oct 4, 2025

Hello all, I'm still trying to solve the problem. I'll provide the diagnostic info again.

CPU: Ryzen 7 2700
GPU: GeForce RTX 2060 Super 8 GB
Guest OS: CachyOS with KDE + Wayland
Host OS: OpenSUSE Tumbleweed with KDE + Wayland
Virtualization Stack: KVM / QEMU / libvirt / virt-manager installed via YaST Control Center by enabling "KVM server" and "KVM tools"

(Host) QEMU Version: 10.1.0-2.1
(Host) libvirglrenderer1: 1.1.1-1.1
(Host) Kernel Version: 6.17.0-1-default
(Host) GPU Driver Name & Version: nvidia-open-driver-G06-signed-kmp-default 580.95.05_k6.17.0_1-1.1

(Host) vulkaninfo --summary | grep driverInfo

driverInfo         = 580.95.05
driverInfo         = Mesa 25.2.4 (LLVM 21.1.2)

I'm starting the VM with this:

Problem 1: IF I TRY TO RUN THIS WITH sudo I GET THIS ERROR:
qemu-system-x86_64: OpenGL is not supported by display backend 'gtk'

SO THIS ONLY WORKS WITHOUT SUDO
By the way, both my login user and qemu user are already added to these groups: kvm, libvirt, render, video

/usr/bin/qemu-system-x86_64 \
-drive if=pflash,format=raw,readonly=on,file=/usr/share/qemu/ovmf-x86_64-code.bin \
-drive if=pflash,format=raw,file=/home/$USER/CachyOS_VARS.fd \
-drive file=/home/$USER/CachyOS-test.qcow2,if=virtio,format=qcow2 \
-machine pc-q35-10.0,memory-backend=vm_mem \
-enable-kvm \
-cpu host \
-smp 6,sockets=1,cores=6,maxcpus=6 \
-m 6G \
-object memory-backend-memfd,id=vm_mem,size=6G,share=on \
-device virtio-serial-pci \
-device qemu-xhci,id=xhci \
-device usb-kbd,bus=xhci.0,port=1 \
-device usb-tablet,bus=xhci.0,port=2 \
-netdev user,id=vm_net \
-device virtio-net-pci,netdev=vm_net \
-vga none \
-device virtio-vga-gl,hostmem=4G,blob=true,venus=true \
-display gtk,gl=on

Problem 2: Inside the guest when I try to run vkcube I get this output:

Selected WSI platform: wayland
Cannot find a compatible Vulkan installable client driver (ICD).
Please look at the Getting Started guide for additional information.

Problem 2a: Again, inside the guest when I try to run vulkaninfo --summary | grep driverInfo I get this output:

WARNING: [Loader Message] Code : terminator_CreateInstance: 
Received return code -6 from call to vkCreateInstance in ICD /usr/lib/libvulkan_virtio.so. Skipping this driver. 
ERROR: [Loader Message] Code : terminator_CreateInstance: Found no drivers! Cannot create Vulkan instance. 
This problem is often caused by a faulty installation of the Vulkan driver 
or attempting to use a GPU that does not support Vulkan.
ERROR at /usr/src/debug/vulkan-tools/Vulkan-Tools/vulkaninfo/./vulkaninfo.h:573:vkCreateInstance failed with 
ERROR INCOMPATIBLE_DRIVER

@myrslint
Copy link

myrslint commented Oct 5, 2025

Do you have Xwayland disabled on your host KDE, @adokacey?

@adokacey
Copy link

adokacey commented Oct 5, 2025

I solved "Problem 1" by using sudo -E instead of sudo.

Unfortunately "Problem 2" and "Problem 2a" are still continuing.

@myrslint both xwayland and xwaylandvideobridge are installed and running on the host.

@myrslint
Copy link

myrslint commented Oct 5, 2025

It is not a good idea to run QEMU with sudo, as root.

About the presence of Xwayland, I asked the question because I had only seen vulkaninfo fail with that error in the guest when the host had Xwayland disabled. It seems Venus can only use Xlib or XCB WSI on the host.

@adokacey
Copy link

adokacey commented Oct 5, 2025

I tried running these inside guest:
vkcube --wsi wayland
vkcube --wsi xcb
vkcube --wsi xlib

all are printing this same error:

Cannot find a compatible Vulkan installable client driver (ICD).
Please look at the Getting Started guide for additional information.

Also I've tried running vkgears too which is showing this output:
Failed to create Vulkan instance.

Only glxgears works inside the guest.

@adokacey
Copy link

I have tried everything. Even the chatbot got baffled:

I am going to be very direct. You have done everything perfectly. The commands you are running are correct. 
The host configuration is now immaculate—drivers are clean, permissions are set, IOMMU is configured, 
security policies are disabled.

The fact that you still see ERROR_INCOMPATIBLE_DRIVER means we have exhausted every possible configuration error.

I've completely uninstalled nvidia drivers and reinstalled. I've changed nvidia repo too. (It was wrongfully MicroOS before switched to Tumbleweed now).

I've disabled SELinux with sudo setenforce 0

I gave my user all the permissions: sudo setfacl -m u:$USER:rw /dev/dri/renderD128 /dev/nvidia0 /dev/nvidiactl /dev/nvidia-modeset /dev/null /dev/full /dev/zero /dev/random /dev/urandom /dev/ptmx /dev/kvm

Added my user to all relevant groups: kvm, render, video etc.

I'm running qemu with this command:

qemu-system-x86_64 \
  -enable-kvm \
  -m 8G \
  -cpu host \
  -smp 4 \
  -vga none \
  -device virtio-vga-gl,blob=true,venus=true,hostmem=4G \
  -display gtk,gl=on \
  -drive if=pflash,format=raw,readonly=on,file=/usr/share/qemu/ovmf-x86_64-code.bin \
  -drive if=pflash,format=raw,file=/home/$USER/ovmf-x86_64-vars.bin \
  -device virtio-net-pci,netdev=net0 \
  -netdev user,id=net0 \
  -device virtio-blk-pci,drive=disk0 \
  -drive if=none,id=disk0,format=qcow2,file=/home/$USER/test1.qcow2 \
  -device virtio-scsi-pci,id=scsi0 \
  -device virtio-mouse-pci \
  -device virtio-keyboard-pci

And I still get these same errors inside guest:

vkcube
Selected WSI platform: wayland
Cannot find a compatible Vulkan installable client driver (ICD).

Please look at the Getting Started guide for additional information.
vulkaninfo
WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Received return code -6 from call to vkCreateInstance in ICD /usr/lib/libvulkan_virtio.so. Skipping this driver.
ERROR: [Loader Message] Code 0 : terminator_CreateInstance: Found no drivers!
Cannot create Vulkan instance.
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.
ERROR at /usr/src/debug/vulkan-tools/Vulkan-Tools/vulkaninfo/./vulkaninfo.h:573:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER
VK_LOADER_DEBUG=all vulkaninfo
[Vulkan Loader] INFO:           Vulkan Loader Version 1.4.328
[Vulkan Loader] INFO:           No valid vk_loader_settings.json file found, no loader settings will be active
[Vulkan Loader] LAYER:          Searching for implicit layer manifest files
[Vulkan Loader] LAYER:             In following locations:
[Vulkan Loader] LAYER:                /home/$USER/.config/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.config/kdedefaults/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/xdg/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:             Found the following files:
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
[Vulkan Loader] INFO:           Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version 1.0.0)
[Vulkan Loader] INFO:           No valid vk_loader_settings.json file found, no loader settings will be active
[Vulkan Loader] LAYER:          Searching for implicit layer manifest files
[Vulkan Loader] LAYER:             In following locations:
[Vulkan Loader] LAYER:                /home/$USER/.config/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.config/kdedefaults/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/xdg/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:             Found the following files:
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
[Vulkan Loader] INFO:           Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version 1.0.0)
[Vulkan Loader] LAYER:          Searching for implicit layer manifest files
[Vulkan Loader] LAYER:             In following locations:
[Vulkan Loader] LAYER:                /home/$USER/.config/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.config/kdedefaults/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/xdg/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:             Found the following files:
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
[Vulkan Loader] INFO:           Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version 1.0.0)
[Vulkan Loader] LAYER:          Searching for explicit layer manifest files
[Vulkan Loader] LAYER:             In following locations:
[Vulkan Loader] LAYER:                /home/$USER/.config/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.config/kdedefaults/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /etc/xdg/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /etc/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.local/share/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /usr/local/share/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /usr/share/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:             Found no files
[Vulkan Loader] INFO:           No valid vk_loader_settings.json file found, no loader settings will be active
[Vulkan Loader] LAYER:          Searching for implicit layer manifest files
[Vulkan Loader] LAYER:             In following locations:
[Vulkan Loader] LAYER:                /home/$USER/.config/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.config/kdedefaults/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/xdg/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:             Found the following files:
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
[Vulkan Loader] INFO:           Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version 1.0.0)
[Vulkan Loader] LAYER:          Searching for implicit layer manifest files
[Vulkan Loader] LAYER:             In following locations:
[Vulkan Loader] LAYER:                /home/$USER/.config/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.config/kdedefaults/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/xdg/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:             Found the following files:
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
[Vulkan Loader] INFO:           Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version 1.0.0)
[Vulkan Loader] LAYER:          Searching for explicit layer manifest files
[Vulkan Loader] LAYER:             In following locations:
[Vulkan Loader] LAYER:                /home/$USER/.config/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.config/kdedefaults/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /etc/xdg/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /etc/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.local/share/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /usr/local/share/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /usr/share/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:             Found no files
[Vulkan Loader] INFO:           No valid vk_loader_settings.json file found, no loader settings will be active
[Vulkan Loader] LAYER:          Searching for implicit layer manifest files
[Vulkan Loader] LAYER:             In following locations:
[Vulkan Loader] LAYER:                /home/$USER/.config/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.config/kdedefaults/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/xdg/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:             Found the following files:
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
[Vulkan Loader] INFO:           Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version 1.0.0)
[Vulkan Loader] DRIVER:         Searching for driver manifest files
[Vulkan Loader] DRIVER:            In following locations:
[Vulkan Loader] DRIVER:               /home/$USER/.config/vulkan/icd.d
[Vulkan Loader] DRIVER:               /home/$USER/.config/kdedefaults/vulkan/icd.d
[Vulkan Loader] DRIVER:               /etc/xdg/vulkan/icd.d
[Vulkan Loader] DRIVER:               /etc/vulkan/icd.d
[Vulkan Loader] DRIVER:               /home/$USER/.local/share/vulkan/icd.d
[Vulkan Loader] DRIVER:               /usr/local/share/vulkan/icd.d
[Vulkan Loader] DRIVER:               /usr/share/vulkan/icd.d
[Vulkan Loader] DRIVER:            Found the following files:
[Vulkan Loader] DRIVER:               /usr/share/vulkan/icd.d/virtio_icd.x86_64.json
[Vulkan Loader] DRIVER:         Found ICD manifest file /usr/share/vulkan/icd.d/virtio_icd.x86_64.json, version 1.0.1
[Vulkan Loader] DEBUG | DRIVER: Searching for ICD drivers named /usr/lib/libvulkan_virtio.so
[Vulkan Loader] DRIVER:         Searching for driver manifest files
[Vulkan Loader] DRIVER:            In following locations:
[Vulkan Loader] DRIVER:               /home/$USER/.config/vulkan/icd.d
[Vulkan Loader] DRIVER:               /home/$USER/.config/kdedefaults/vulkan/icd.d
[Vulkan Loader] DRIVER:               /etc/xdg/vulkan/icd.d
[Vulkan Loader] DRIVER:               /etc/vulkan/icd.d
[Vulkan Loader] DRIVER:               /home/$USER/.local/share/vulkan/icd.d
[Vulkan Loader] DRIVER:               /usr/local/share/vulkan/icd.d
[Vulkan Loader] DRIVER:               /usr/share/vulkan/icd.d
[Vulkan Loader] DRIVER:            Found the following files:
[Vulkan Loader] DRIVER:               /usr/share/vulkan/icd.d/virtio_icd.x86_64.json
[Vulkan Loader] DRIVER:         Found ICD manifest file /usr/share/vulkan/icd.d/virtio_icd.x86_64.json, version 1.0.1
[Vulkan Loader] DEBUG | DRIVER: Searching for ICD drivers named /usr/lib/libvulkan_virtio.so
[Vulkan Loader] LAYER:          Searching for implicit layer manifest files
[Vulkan Loader] LAYER:             In following locations:
[Vulkan Loader] LAYER:                /home/$USER/.config/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.config/kdedefaults/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/xdg/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:             Found the following files:
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
[Vulkan Loader] INFO:           Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version 1.0.0)
[Vulkan Loader] INFO:           No valid vk_loader_settings.json file found, no loader settings will be active
[Vulkan Loader] INFO:           Portability enumeration bit was set, enumerating portability drivers.
[Vulkan Loader] LAYER:          Searching for implicit layer manifest files
[Vulkan Loader] LAYER:             In following locations:
[Vulkan Loader] LAYER:                /home/$USER/.config/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.config/kdedefaults/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/xdg/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /etc/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/local/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d
[Vulkan Loader] LAYER:             Found the following files:
[Vulkan Loader] LAYER:                /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
[Vulkan Loader] INFO:           Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version 1.0.0)
[Vulkan Loader] LAYER:          Searching for explicit layer manifest files
[Vulkan Loader] LAYER:             In following locations:
[Vulkan Loader] LAYER:                /home/$USER/.config/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.config/kdedefaults/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /etc/xdg/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /etc/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /home/$USER/.local/share/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /usr/local/share/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:                /usr/share/vulkan/explicit_layer.d
[Vulkan Loader] LAYER:             Found no files
[Vulkan Loader] DRIVER:         Searching for driver manifest files
[Vulkan Loader] DRIVER:            In following locations:
[Vulkan Loader] DRIVER:               /home/$USER/.config/vulkan/icd.d
[Vulkan Loader] DRIVER:               /home/$USER/.config/kdedefaults/vulkan/icd.d
[Vulkan Loader] DRIVER:               /etc/xdg/vulkan/icd.d
[Vulkan Loader] DRIVER:               /etc/vulkan/icd.d
[Vulkan Loader] DRIVER:               /home/$USER/.local/share/vulkan/icd.d
[Vulkan Loader] DRIVER:               /usr/local/share/vulkan/icd.d
[Vulkan Loader] DRIVER:               /usr/share/vulkan/icd.d
[Vulkan Loader] DRIVER:            Found the following files:
[Vulkan Loader] DRIVER:               /usr/share/vulkan/icd.d/virtio_icd.x86_64.json
[Vulkan Loader] DRIVER:         Found ICD manifest file /usr/share/vulkan/icd.d/virtio_icd.x86_64.json, version 1.0.1
[Vulkan Loader] DEBUG | DRIVER: Searching for ICD drivers named /usr/lib/libvulkan_virtio.so
[Vulkan Loader] DEBUG | LAYER:  Loading layer library libVkLayer_MESA_device_select.so
[Vulkan Loader] INFO | LAYER:   Insert instance layer "VK_LAYER_MESA_device_select" (/usr/lib/libVkLayer_MESA_device_select.so)
[Vulkan Loader] LAYER:          vkCreateInstance layer callstack setup to:
[Vulkan Loader] LAYER:             <Application>
[Vulkan Loader] LAYER:               ||
[Vulkan Loader] LAYER:             <Loader>
[Vulkan Loader] LAYER:               ||
[Vulkan Loader] LAYER:             VK_LAYER_MESA_device_select
[Vulkan Loader] LAYER:                     Type: Implicit
[Vulkan Loader] LAYER:                     Enabled By: Implicit Layer
[Vulkan Loader] LAYER:                         Disable Env Var:  NODEVICE_SELECT
[Vulkan Loader] LAYER:                     Manifest: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
[Vulkan Loader] LAYER:                     Library:  /usr/lib/libVkLayer_MESA_device_select.so
[Vulkan Loader] LAYER:               ||
[Vulkan Loader] LAYER:             <Drivers>
WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Received return code -6 from call to vkCreateInstance in ICD /usr/lib/libvulkan_virtio.so. Skipping this driver.
[Vulkan Loader] WARNING:        terminator_CreateInstance: Received return code -6 from call to vkCreateInstance in ICD /usr/lib/libvulkan_virtio.so. Skipping this driver.
ERROR: [Loader Message] Code 0 : terminator_CreateInstance: Found no drivers!
[Vulkan Loader] ERROR | DRIVER: terminator_CreateInstance: Found no drivers!
[Vulkan Loader] DEBUG | LAYER:  Unloading layer library /usr/lib/libVkLayer_MESA_device_select.so
Cannot create Vulkan instance.
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.
ERROR at /usr/src/debug/vulkan-tools/Vulkan-Tools/vulkaninfo/./vulkaninfo.h:573:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER

Host OS: Tumbleweed with KDE + Wayland (All up-to-date)
Guest OS: CachyOS with KDE + Wayland (All up-to-date)
GPU: RTX 2060 Super 8 GB
CPU: Ryzen 7 2700
SVM, IOMMU enabled
KVM / Qemu / libvirt / virt-manager stack installed
Qemu Version: 10.1.0-2.1
libvirglrenderer1 version: 1.1.1-1.1
Installed graphics driver package: nvidia-driver-G06-kmp-meta

vulkaninfo | grep driverVersion
        driverVersion     = 580.95.5.0
        driverVersion     = 25.2.4

@zzyiwei
Copy link

zzyiwei commented Oct 12, 2025

@adokacey On the guest side, see if VN_DEBUG=all vulkaninfo tells anything useful.

@zzyiwei
Copy link

zzyiwei commented Oct 12, 2025

Just saw your filed https://gitlab.freedesktop.org/virgl/virglrenderer/-/issues/636 issue. Let's follow up there.

@henriqueffc
Copy link

henriqueffc commented Oct 13, 2025

Host
i5-12450H and NVIDIA GeForce RTX 3050 6GB Laptop GPU.
Arch Linux 6.17.2-arch1-1, GNOME 49, Wayland.
qemu 10.1.1-1, virglrenderer 1.1.1-1, vulkan-icd-loader 1.4.328.1-1, vulkan-validation-layers 1.4.328.1-1, vulkan-intel 1:25.2.4-2 and nvidia-open-dkms 580.95.05-1

qemu-system-x86_64 \
        -enable-kvm \
        -M q35 \
        -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \
        -drive if=pflash,format=raw,file=/mnt/disk/VM/archvm2/OVMF_VARS.4m.fd \
        -smp 4 \
        -m 4G \
        -cpu host,migratable=off,kvm=on \
        -device virtio-net-pci,netdev=net0 \
        -netdev user,id=net0 \
        -device virtio-vga-gl,blob=true,venus=true,hostmem=4G \
        -display gtk,gl=on,show-cursor=off \
        -audio driver=sdl,model=virtio \
        -usb -device usb-tablet \
        -object memory-backend-memfd,id=mem1,size=4G \
        -machine memory-backend=mem1 \
        -hda /mnt/disk/VM/archlinuxconsid.qcow2

Guest
Arch Linux (stable kernel), GNOME 49, Wayland
vulkan-virtio 1:25.2.4-2 and vulkan-validation-layers 1.4.328.1-1
/etc/environment.d/90-environment.conf (https://wiki.archlinux.org/title/Vulkan#Switching_between_devices)

MESA_VK_DEVICE_SELECT=8086:46a3

It was necessary to force the iGPU to be selected as the Vulkan device. When qemu uses Nvidia, applications that use Vulkan for rendering won't launch. Vulkan still has some issues with animations using the iGPU, such as the gnome system monitor and the mouse and touchpad settings in the system settings.

Captura de tela de 2025-10-13 10-55-21

vulkaninfo --summary

Devices:
=========
GPU0:
	apiVersion		= 1.4.307
	driverVersion		= 25.2.4
	vendorID		= 0x8086
	deviceID		= 0x46a3
	deviceType		= PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
	deviceName		= Virtio-GPU Venus (Intel(R) Graphics (ADL GT2))
	driverID		= DRIVER_ID_MESA_VENUS
	driverName		= venus
	driverInfo		= Mesa 25.2.4-arch1.2
	conformanceVersion	= 1.4.0.0
	deviceUUID		= 2e90bc80-5a5b-985b-244d-4f0ce7540744
	driverUUID		= 2beec2c2-a6d3-4a74-73aa-42e1ed7609cc

GPU1:
	apiVersion		= 1.4.307
	driverVersion		= 25.2.4
	vendorID		= 0x10de
	deviceID		= 0x25ec
	deviceType		= PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
	deviceName		= Virtio-GPU Venus (NVIDIA GeForce RTX 3050 6GB Laptop GPU)
	driverID		= DRIVER_ID_MESA_VENUS
	driverName		= venus
	driverInfo		= Mesa 25.2.4-arch1.2
	conformanceVersion	= 1.4.0.0
	deviceUUID		= d041e5e5-54fc-a30e-bc3f-63f0a7af9235
	driverUUID		= 2beec2c2-a6d3-4a74-73aa-42e1ed7609cc

GPU2:
	apiVersion		= 1.4.318
	driverVersion		= 25.2.4
	vendorID		= 0x10005
	deviceID		= 0x0000
	deviceType		= PHYSICAL_DEVICE_TYPE_CPU
	deviceName		= llvmpipe (LLVM 20.1.8, 256 bits)
	driverID		= DRIVER_ID_MESA_LLVMPIPE
	driverName		= llvmpipe
	driverInfo		= Mesa 25.2.4-arch1.2 (LLVM 20.1.8)
	conformanceVersion	= 1.3.1.1
	deviceUUID		= 6d537511-3235-2e32-2e34-2d6172636800
	driverUUID		= 6cc6766d-7069-7065-5555-494400000000

GTK Inspector tool

Captura de tela de 2025-10-13 12-24-50 Captura de tela de 2025-10-13 12-25-01 Captura de tela de 2025-10-13 12-25-12

@zzyiwei
Copy link

zzyiwei commented Oct 13, 2025

@henriqueffc Hi, what if you downgrade host NV driver to some 570.x version? Just to check if you are affected by https://gist.github.com/peppergrayxyz/fdc9042760273d137dddd3e97034385f?permalink_comment_id=5745822#gistcomment-5745822

(or wait till Arch absorbs virglrenderer 1.2.x release)

@adokacey
Copy link

Upon @zzyiwei's recommendation I've installed vulkan-validationlayers package on the host (OpenSUSE Tumbleweed) and Venus (Vulkan) started working inside the guest (CachyOS). The problem was related to the way host's virglrenderer built. But installing vulkan-validationlayers package isn't the real fix; actually it's kind of bad performance wise. SUSE maintainers should build the virglrenderer correctly. More info here:

OpenSUSE virglrenderer Packaging Problem

Also there are still some other problems:

  1. vkcube runs normally but vkgears pause spinning if I ever stop moving the cursor or if I move the cursor to outside of the window of vkgears app.
  2. vulkaninfo too works now but there is still this error as the first line of output:
    ERROR: [Loader Message] Code 0 : libVkLayer_MESA_anti_lag.so: cannot open shared object file: No such file or directory
  3. Also guest is missing many resolutions and it has many weird resolutions listed. There are ones listed like 1792x1344 or resolutions that my 1080p - 144hz monitor can't even switch to; like 5120x2160. The ones like 1280x800, 1600x900 are missing.
  4. Also it's possible to enable 144hz with some resolutions (like 1440x900) but 1920x1080 only has 60hz.

@adokacey
Copy link

adokacey commented Oct 14, 2025

I solved the second problem by obtaining the missing file, libVkLayer_MESA_anti_lag.so, by installing vulkan-mesa-layers package in guest. Also, most probably, the first problem caused by vkgears app's inability to properly work under wayland.

Edit: I've solved the resolution problem too. I have added video=Virtual-1:1920x1080@144 as kernel parameter to /boot/loader/entries/linux-cachyos.conf it feels like a quick hack tho. I'd like to set all available resolutions and refresh rates etc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment