Recently I played around with QEMU+KVM and virtio-gpu and am surprised how well it works nowadays, especially with venus (Vulkan).
The setup:
CPU: AMD 7950X3D
RAM: 64GB RAM
GPU: AMD 9070XT 16GB
OS: Arch Linux (Kernel 6.16)
I tried venus and drm_native_context in an Arch and an Ubuntu 25.04 guest.
Sadly kernel 6.16 seems to have an issue so the required drm host_visible feature was not available on Arch and I gave up on that guest system for the time being.
For drm_native_context I had to rebuild virglrenderer + qemu on host and mesa inside the guest system. They all required extra compile configs/patches that I gathered from the QEMU drm_native_context patchsets:
- [v7] Support virtio-gpu DRM native context | Patchew
- [v13] Support virtio-gpu DRM native context | Patchew
In the end I was able to successfully run accelerated vkcube in the Ubuntu guest but more complex applications crashed I changed to venus.
venus was much simpler and basically worked out of the box with Ubuntu. No patches or anything special needed.
Running Half-Life 2 I got ~300FPS but somehow my mouse look stopped working in-game. This seems to be more of an issue with QEMU and not so much the acceleration, though. Other 3D games also suffered from this issue. Using a passthrough USB mouse works fine, but the cursor is invisible on desktop. Again I think in my case this is an issue with QEMU and not virtio-gpu.
Running llama.cpp with Vulkan backend inside a container on the VM gave me a good boost in token generation (CPU: 1.33t/s, GPU: 27.43t/s) for Qwen3-4B-Instruct-2507-Q8 and it worked really well. The FP16 version still achieved ~20t/s.
At first I thought you have to provide a subset of memory to the VM and QEMU requires it to be a power of 2 so I would be limited to 8GB, but it also did not complain just allowing the full 16GB of my card.
Overall I’m super impressed by the results. I am new to QEMU and KVM and also learned a lot doing this.