Setup virtio-gpu for ARM Windows guest via Qemu on Orion O6

Arm Windows virtualization via Qemu can easily obtain the graphics support through ramfb. However, this mode has many limitations such as fixed screen resolution and poor performance.


The virtio-win ARM version virtio-gpu driver - viogpudo helps to improve the user experience.

Configuration

Host OS: Debian12

Qemu Version: 7.2+dfsg-7+deb12u16

Arm Windows ISO
Download from Download Windows 11 Arm64

virtio-win driver
Download from https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.262-1/virtio-win-0.1.262.iso

Qemu command

taskset -c 6,7,8,9,10,11 /usr/bin/qemu-system-aarch64 \
        -M virt --enable-kvm -m 8G -cpu host -smp cores=6 \
        -bios ./QEMU_EFI.fd \
        -device ramfb \
        -device virtio-gpu-gl \
        -display gtk,gl=on \
        -device qemu-xhci -device usb-kbd -device usb-tablet \
        -nic user,model=virtio-net-pci \
        -device usb-storage,drive=virtio-drivers \
        -drive if=none,id=virtio-drivers,format=raw,media=cdrom,file=./virtio-win-0.1.262.iso \
        -drive if=virtio,id=system,format=qcow2,file=./e2d24d60-2cfc-4ffa-a727-6a34a19a56d9_run.qcow2

Install viogpudo

  1. The following parameter mounts virtio-win-0.1.262 partition to the guest,
    -drive if=none,id=virtio-drivers,format=raw,media=cdrom,file=./virtio-win-0.1.262.iso \
  2. Install the viogpudo driver from the mounted virtio-win-0.1.262 folder,
  3. There will be two displays once the driver is installed successfully. Select to only show on screen 2,
  4. The following parameters enable viogpudo driver,
     -device virtio-gpu-gl \
     -display gtk,gl=on \
    
  5. Select “virtio-gpu-gl-pci” under “View” menu in QEMU GUI,
  6. The viogpudo driver is now available in the Windows guest,

Experimental - viogpu3d

The RP https://github.com/virtio-win/kvm-guest-drivers-windows/pull/943 provides 3d accelerated virtiogpu in Windows guest. To use this,

  1. Build and install viogpu3d driver in the Windows guest,
    GitHub - max8rr8/kvm-guest-drivers-windows at viogpu3d
  2. Build and install Mesa in the Windows guest,
    https://gitlab.freedesktop.org/max8rr8/mesa/-/tree/viogpu_win
  3. Use the latest virglrenderer, which contains the following commits on the host,
    https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1185/commits

The 3D application can now be run in the guest,


Note: viogpu3d is only for experimental use as it still has numerous stability issues.