kvm-guest-drivers-windows: viogpu: can't set resolution higher than 1024x768

In Windows display settings I see 3 resolution options:

  • 3840x1912
  • 1024x768
  • 800x600

When I select 3840x1912, I immediately see “Guest disabled display.” message and then guest reboots. No memory dump is created.

With https://gitlab.freedesktop.org/spice/win32/virtio-gpu-wddm-dod I see more resolution options, and 1920x1080 is working.

The same (almost) issue reported there: https://gitlab.freedesktop.org/spice/win32/virtio-gpu-wddm-dod/-/issues/5 (before I found that the driver is now included here)

About this issue

Most upvoted comments

@marioroy I will try to add more resolutions/memory allocation support in the next release.

Currently viogpudo driver allocates 16MB memory buffer, which is too small for resolutions like 3840x1880 .

I will try to increase this size in the next release. Vadim.

This is a really helpful thread, as I also wanted to set a resolution of 2560 x 1440. Thank you so much @vrozenfe!

Just an FYI follow-up on the additional query @BentHaase raised, which i will paraphrase as to how to set this via the XML definition?.

I was able to achieve this by configuring the resolution element as shown below. This is documented as being a supported element in the libvirt XML docs so hopefully also answers that additional query

<video>
  <model type="virtio" heads="1" primary="yes">
    <resolution x="2560" y="1440"/>
  </model>
  <alias name="video0"/>
  <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0"/>
</video>

  ....

With this in place, i was then able to see the correct parameters being passed to qemu in the libvirt log for the VM. FYI they were as follows:-

-device virtio-vga,id=video0,max_outputs=1,xres=2560,yres=1440,bus=pcie.0,addr=0x1

@amezin

I will try too support the bigger resolutions soon.

4K resolutions should work with the following fix https://github.com/virtio-win/kvm-guest-drivers-windows/pull/1019

the latest virtio-gpu-dod 64-bit drivers for Win10 and Win11 platforms can be found here https://people.redhat.com/vrozenfe/viogpu247.zip.

Not officially tested yet. Use it on your own rick. Best, Vadim.

@BentHaase It has to be “-device virtio-vga,edid=on,xres=2560,yres=1440” of course, but let me check if it works fine with the recent drivers.

@Lilith2208 currently we pre-allocate 16MB buffer on Win10 and 8MB on Win8/8.1 https://github.com/virtio-win/kvm-guest-drivers-windows/blob/master/viogpu/viogpudo/viogpudo.cpp#L2368 16MB should be enough to handle 2048x2048 resolution in 32bit per pixel mode. 2560x1600x4 requires even a bit less than 16MB. What kind of viewer do use?

In any case 16MB is a temporary limit that planed to be fixed in the future versions.

Vadim.

@jwatt

Win10 currently (latest-build 204) works with up to 16MB (2KB x 2KB x 32bpp) surface. I still have a plan to make it bigger (up to 256 MB) but it might take some time. There is also a new feature introduced in build 204 that allows to change the Windows VM screen resolution dynamically https://bugzilla.redhat.com/show_bug.cgi?id=1923886.

Vadim.