* [PATCH qemu-server/pve-manager/docs v4 0/1] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support
@ 2026-08-31 9:38 Markus Frank
2026-08-31 9:38 ` [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Markus Frank @ 2026-08-31 9:38 UTC (permalink / raw)
To: pve-devel
v4:
* added docs patch
* pve-manager: change the memory label to '2D Memory Limit' when using
VirtIO to make the difference to the 'Host Memory Window' clearer
* qemu-server: made the description of virgl-features more general
v3:
ran `make tidy` in both repos and applied the changes
v2:
The QEMU documentation got updated and now explains that adding blob and
hostmem alone with or without "venus=on" enabled support for OpenGL 4.6.
So I decided to let the user decide which "feature set" to use:
* the default with up to OpenGL 4.3 support
* OpenGL 4.6 (hostmem=<size>G,blob=true)
* Vulkan & OpenGL 4.6 (hostmem=<size>G,blob=true,venus=true)
https://www.qemu.org/docs/master/system/devices/virtio/virtio-gpu.html
There is also a patch on the qemu-devel list which separates Vulkan from
OpenGL.
https://lists.gnu.org/archive/html/qemu-devel/2026-03/msg05502.html
So in the future we could add a "vulkan without opengl" or "drm" option.
The hostmem option allocates a host memory region that acts as virtual
VRAM, enabling virglrenderer to map graphics 'blobs' directly to fixed
memory addresses.
https://www.mail-archive.com/qemu-devel@nongnu.org/msg1173963.html
qeme-server:
Markus Frank (1):
fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support
src/PVE/QemuServer.pm | 36 +++++++++++++++++++++++++++++++++++-
1 file changed, 35 insertions(+), 1 deletion(-)
pve-manager:
Markus Frank (1):
ui: qemu: add VirGl feature selection in DisplayEdit
www/manager6/qemu/DisplayEdit.js | 79 +++++++++++++++++++++++++++++++-
1 file changed, 77 insertions(+), 2 deletions(-)
docs:
Markus Frank (1):
VirGL: add info about feature sets with OpenGL4.6 and vulkan
qm.adoc | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
--
2.47.3
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support 2026-08-31 9:38 [PATCH qemu-server/pve-manager/docs v4 0/1] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support Markus Frank @ 2026-08-31 9:38 ` Markus Frank 2026-08-31 15:29 ` DERUMIER, Alexandre ` (2 more replies) 2026-08-31 9:38 ` [PATCH pve-manager v4 2/3] ui: qemu: add VirGl feature selection in DisplayEdit Markus Frank 2026-08-31 9:38 ` [PATCH docs v4 3/3] VirGL: add info about feature sets with OpenGL4.6 and vulkan Markus Frank 2 siblings, 3 replies; 10+ messages in thread From: Markus Frank @ 2026-08-31 9:38 UTC (permalink / raw) To: pve-devel Adding the 'blob=on,hostmem=<size>' parameters to the 'virtio-gpu-gl' device allows the VM to use OpenGL 4.6. By default virtio-gpu-gl only supports up to OpenGL 4.3. If Vulkan support is needed, the 'venus=on' parameter is added to the 'virtio-gpu-gl' device, in addition to the two parameters required for OpenGL 4.6. The Venus protocol facilitates the translation of Vulkan API calls via the virglrenderer. To use it, the virgl-server package must be installed on the host. Set the default VirGL memory window to 2048 MiB, as having less could lead to instability inside the VM. Signed-off-by: Markus Frank <m.frank@proxmox.com> --- v4: * made the description of virgl-features more general * added bugzilla number to commit message src/PVE/QemuServer.pm | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm index 63d8c135..65c4a804 100644 --- a/src/PVE/QemuServer.pm +++ b/src/PVE/QemuServer.pm @@ -171,6 +171,20 @@ my $vga_fmt = { qw(cirrus qxl qxl2 qxl3 qxl4 none serial0 serial1 serial2 serial3 std virtio virtio-gl vmware) ], }, + 'virgl-features' => { + description => 'Enable additional features on VirGL GPU.', + type => 'string', + optional => 1, + enum => ['opengl4.6', 'opengl4.6+vulkan'], + }, + 'virgl-memory-window' => { + description => 'Set the VirGL host memory window. This option allocates' + . ' host memory to act as VRAM in the VM.', + type => 'string', + default => '2048', + optional => 1, + enum => ['512', '1024', '2048', '4096', '8192'], + }, memory => { description => "Sets the VGA memory (in MiB). Has no effect with serial display.", type => 'integer', @@ -1549,6 +1563,23 @@ sub print_vga_device { $pciaddr = print_pci_addr($vgaid, $bridges, $arch); } + my $virgl_param = ""; + my $virgl_mode = $vga->{'virgl-features'}; + if ($virgl_mode) { + my $virgl_memory_window = $vga->{'virgl-memory-window'} + // $vga_fmt->{'virgl-memory-window'}->{'default'}; + $virgl_param = ",hostmem=${virgl_memory_window}M,blob=on"; + + if ($virgl_mode eq 'opengl4.6+vulkan') { + $virgl_param .= ",venus=on"; + log_warn( + "missing virgl render server for Vulkan (Venus) support! Please install 'virgl-server'.\n" + ) if !-e "/usr/libexec/virgl_render_server"; + } + } elsif ($vga->{'virgl-memory-window'}) { + die "To use a VirGL host memory window, please select a compatible VirGL feature set.\n"; + } + if ($vga->{type} eq 'virtio-gl') { # VirGL renders on the host, so the guest arch is irrelevant for the library lookup my $host_arch = get_host_arch(); @@ -1560,9 +1591,12 @@ sub print_vga_device { die "no DRM render node detected (/dev/dri/renderD*), no GPU? - needed for '$vga->{type}' display\n" if !PVE::Tools::dir_glob_regex('/dev/dri/', "renderD.*"); + + } elsif ($virgl_mode) { + die "You need to use virtio-gl to enable OpenGL 4.6 or Vulkan support!\n"; } - return "$type,id=${vgaid}${memory}${max_outputs}${pciaddr}${edidoff}"; + return "$type,id=${vgaid}${memory}${max_outputs}${pciaddr}${edidoff}${virgl_param}"; } sub vm_is_volid_owner { -- 2.47.3 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support 2026-08-31 9:38 ` [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank @ 2026-08-31 15:29 ` DERUMIER, Alexandre 2026-08-31 15:43 ` DERUMIER, Alexandre 2026-09-01 11:28 ` Dominik Csapak 2 siblings, 0 replies; 10+ messages in thread From: DERUMIER, Alexandre @ 2026-08-31 15:29 UTC (permalink / raw) To: pve-devel@lists.proxmox.com, m.frank@proxmox.com Hi, thanks for the patch serie! I'll rebase my kyber console patches serie over it, as I was adding venus support https://lore.proxmox.com/pve-devel/20260826074347.1256659-6-alexandre.derumier@groupe-cyllene.com/T/#u One question, I didn't need virgl-server to enable venus and get it work with gpu offloading from my amd gpu. Maybe is it because I'm using dbus display for output ? (I really don't known how virgl-server to be honest, dont have read the doc yet) Best regards, Alexandre Le lundi 31 août 2026 à 11:38 +0200, Markus Frank a écrit : > Adding the 'blob=on,hostmem=<size>' parameters to the 'virtio-gpu-gl' > device allows the VM to use OpenGL 4.6. By default virtio-gpu-gl only > supports up to OpenGL 4.3. > > If Vulkan support is needed, the 'venus=on' parameter is added to the > 'virtio-gpu-gl' device, in addition to the two parameters required > for > OpenGL 4.6. > > The Venus protocol facilitates the translation of Vulkan API calls > via > the virglrenderer. To use it, the virgl-server package must be > installed > on the host. > > Set the default VirGL memory window to 2048 MiB, as having less could > lead to instability inside the VM. > > Signed-off-by: Markus Frank <m.frank@proxmox.com> > --- > v4: > * made the description of virgl-features more general > * added bugzilla number to commit message > > src/PVE/QemuServer.pm | 36 +++++++++++++++++++++++++++++++++++- > 1 file changed, 35 insertions(+), 1 deletion(-) > > diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm > index 63d8c135..65c4a804 100644 > --- a/src/PVE/QemuServer.pm > +++ b/src/PVE/QemuServer.pm > @@ -171,6 +171,20 @@ my $vga_fmt = { > qw(cirrus qxl qxl2 qxl3 qxl4 none serial0 serial1 > serial2 serial3 std virtio virtio-gl vmware) > ], > }, > + 'virgl-features' => { > + description => 'Enable additional features on VirGL GPU.', > + type => 'string', > + optional => 1, > + enum => ['opengl4.6', 'opengl4.6+vulkan'], > + }, > + 'virgl-memory-window' => { > + description => 'Set the VirGL host memory window. This > option allocates' > + . ' host memory to act as VRAM in the VM.', > + type => 'string', > + default => '2048', > + optional => 1, > + enum => ['512', '1024', '2048', '4096', '8192'], > + }, > memory => { > description => "Sets the VGA memory (in MiB). Has no effect > with serial display.", > type => 'integer', > @@ -1549,6 +1563,23 @@ sub print_vga_device { > $pciaddr = print_pci_addr($vgaid, $bridges, $arch); > } > > + my $virgl_param = ""; > + my $virgl_mode = $vga->{'virgl-features'}; > + if ($virgl_mode) { > + my $virgl_memory_window = $vga->{'virgl-memory-window'} > + // $vga_fmt->{'virgl-memory-window'}->{'default'}; > + $virgl_param = ",hostmem=${virgl_memory_window}M,blob=on"; > + > + if ($virgl_mode eq 'opengl4.6+vulkan') { > + $virgl_param .= ",venus=on"; > + log_warn( > + "missing virgl render server for Vulkan (Venus) > support! Please install 'virgl-server'.\n" > + ) if !-e "/usr/libexec/virgl_render_server"; > + } > + } elsif ($vga->{'virgl-memory-window'}) { > + die "To use a VirGL host memory window, please select a > compatible VirGL feature set.\n"; > + } > + > if ($vga->{type} eq 'virtio-gl') { > # VirGL renders on the host, so the guest arch is irrelevant > for the library lookup > my $host_arch = get_host_arch(); > @@ -1560,9 +1591,12 @@ sub print_vga_device { > die > "no DRM render node detected (/dev/dri/renderD*), no > GPU? - needed for '$vga->{type}' display\n" > if !PVE::Tools::dir_glob_regex('/dev/dri/', > "renderD.*"); > + > + } elsif ($virgl_mode) { > + die "You need to use virtio-gl to enable OpenGL 4.6 or > Vulkan support!\n"; > } > > - return > "$type,id=${vgaid}${memory}${max_outputs}${pciaddr}${edidoff}"; > + return > "$type,id=${vgaid}${memory}${max_outputs}${pciaddr}${edidoff}${virgl_ > param}"; > } > > sub vm_is_volid_owner { ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support 2026-08-31 9:38 ` [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank 2026-08-31 15:29 ` DERUMIER, Alexandre @ 2026-08-31 15:43 ` DERUMIER, Alexandre 2026-09-01 6:24 ` Dominik Csapak 2026-09-01 11:28 ` Dominik Csapak 2 siblings, 1 reply; 10+ messages in thread From: DERUMIER, Alexandre @ 2026-08-31 15:43 UTC (permalink / raw) To: pve-devel@lists.proxmox.com, m.frank@proxmox.com also, I think it's missing the memory backend -object memory-backend-memfd,id=mem1,size=2G -machine memory-backend=mem1 (or maybe virgl-server avoid it ?) Le lundi 31 août 2026 à 11:38 +0200, Markus Frank a écrit : > Adding the 'blob=on,hostmem=<size>' parameters to the 'virtio-gpu-gl' > device allows the VM to use OpenGL 4.6. By default virtio-gpu-gl only > supports up to OpenGL 4.3. > > If Vulkan support is needed, the 'venus=on' parameter is added to the > 'virtio-gpu-gl' device, in addition to the two parameters required > for > OpenGL 4.6. > > The Venus protocol facilitates the translation of Vulkan API calls > via > the virglrenderer. To use it, the virgl-server package must be > installed > on the host. > > Set the default VirGL memory window to 2048 MiB, as having less could > lead to instability inside the VM. > > Signed-off-by: Markus Frank <m.frank@proxmox.com> > --- > v4: > * made the description of virgl-features more general > * added bugzilla number to commit message > > src/PVE/QemuServer.pm | 36 +++++++++++++++++++++++++++++++++++- > 1 file changed, 35 insertions(+), 1 deletion(-) > > diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm > index 63d8c135..65c4a804 100644 > --- a/src/PVE/QemuServer.pm > +++ b/src/PVE/QemuServer.pm > @@ -171,6 +171,20 @@ my $vga_fmt = { > qw(cirrus qxl qxl2 qxl3 qxl4 none serial0 serial1 > serial2 serial3 std virtio virtio-gl vmware) > ], > }, > + 'virgl-features' => { > + description => 'Enable additional features on VirGL GPU.', > + type => 'string', > + optional => 1, > + enum => ['opengl4.6', 'opengl4.6+vulkan'], > + }, > + 'virgl-memory-window' => { > + description => 'Set the VirGL host memory window. This > option allocates' > + . ' host memory to act as VRAM in the VM.', > + type => 'string', > + default => '2048', > + optional => 1, > + enum => ['512', '1024', '2048', '4096', '8192'], > + }, > memory => { > description => "Sets the VGA memory (in MiB). Has no effect > with serial display.", > type => 'integer', > @@ -1549,6 +1563,23 @@ sub print_vga_device { > $pciaddr = print_pci_addr($vgaid, $bridges, $arch); > } > > + my $virgl_param = ""; > + my $virgl_mode = $vga->{'virgl-features'}; > + if ($virgl_mode) { > + my $virgl_memory_window = $vga->{'virgl-memory-window'} > + // $vga_fmt->{'virgl-memory-window'}->{'default'}; > + $virgl_param = ",hostmem=${virgl_memory_window}M,blob=on"; > + > + if ($virgl_mode eq 'opengl4.6+vulkan') { > + $virgl_param .= ",venus=on"; > + log_warn( > + "missing virgl render server for Vulkan (Venus) > support! Please install 'virgl-server'.\n" > + ) if !-e "/usr/libexec/virgl_render_server"; > + } > + } elsif ($vga->{'virgl-memory-window'}) { > + die "To use a VirGL host memory window, please select a > compatible VirGL feature set.\n"; > + } > + > if ($vga->{type} eq 'virtio-gl') { > # VirGL renders on the host, so the guest arch is irrelevant > for the library lookup > my $host_arch = get_host_arch(); > @@ -1560,9 +1591,12 @@ sub print_vga_device { > die > "no DRM render node detected (/dev/dri/renderD*), no > GPU? - needed for '$vga->{type}' display\n" > if !PVE::Tools::dir_glob_regex('/dev/dri/', > "renderD.*"); > + > + } elsif ($virgl_mode) { > + die "You need to use virtio-gl to enable OpenGL 4.6 or > Vulkan support!\n"; > } > > - return > "$type,id=${vgaid}${memory}${max_outputs}${pciaddr}${edidoff}"; > + return > "$type,id=${vgaid}${memory}${max_outputs}${pciaddr}${edidoff}${virgl_ > param}"; > } > > sub vm_is_volid_owner { ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support 2026-08-31 15:43 ` DERUMIER, Alexandre @ 2026-09-01 6:24 ` Dominik Csapak 0 siblings, 0 replies; 10+ messages in thread From: Dominik Csapak @ 2026-09-01 6:24 UTC (permalink / raw) To: DERUMIER, Alexandre, pve-devel@lists.proxmox.com, m.frank@proxmox.com answering for markus now because i looked this up On 8/31/26 5:44 PM, DERUMIER, Alexandre wrote: > also, > > I think it's missing the memory backend > > -object memory-backend-memfd,id=mem1,size=2G > -machine memory-backend=mem1 > > (or maybe virgl-server avoid it ?) for virtio-vga-gl,blob=on,venus=on no memory backend is needed. this is only needed when turning on blob=on on a 'regular' virtio-gpu device (non-gl) for virtio-vga-gl, the virgl-server allocates the memory... > > > > Le lundi 31 août 2026 à 11:38 +0200, Markus Frank a écrit : >> Adding the 'blob=on,hostmem=<size>' parameters to the 'virtio-gpu-gl' >> device allows the VM to use OpenGL 4.6. By default virtio-gpu-gl only >> supports up to OpenGL 4.3. >> >> If Vulkan support is needed, the 'venus=on' parameter is added to the >> 'virtio-gpu-gl' device, in addition to the two parameters required >> for >> OpenGL 4.6. >> >> The Venus protocol facilitates the translation of Vulkan API calls >> via >> the virglrenderer. To use it, the virgl-server package must be >> installed >> on the host. >> >> Set the default VirGL memory window to 2048 MiB, as having less could >> lead to instability inside the VM. >> >> Signed-off-by: Markus Frank <m.frank@proxmox.com> >> --- >> v4: >> * made the description of virgl-features more general >> * added bugzilla number to commit message >> >> src/PVE/QemuServer.pm | 36 +++++++++++++++++++++++++++++++++++- >> 1 file changed, 35 insertions(+), 1 deletion(-) >> >> diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm >> index 63d8c135..65c4a804 100644 >> --- a/src/PVE/QemuServer.pm >> +++ b/src/PVE/QemuServer.pm >> @@ -171,6 +171,20 @@ my $vga_fmt = { >> qw(cirrus qxl qxl2 qxl3 qxl4 none serial0 serial1 >> serial2 serial3 std virtio virtio-gl vmware) >> ], >> }, >> + 'virgl-features' => { >> + description => 'Enable additional features on VirGL GPU.', >> + type => 'string', >> + optional => 1, >> + enum => ['opengl4.6', 'opengl4.6+vulkan'], >> + }, >> + 'virgl-memory-window' => { >> + description => 'Set the VirGL host memory window. This >> option allocates' >> + . ' host memory to act as VRAM in the VM.', >> + type => 'string', >> + default => '2048', >> + optional => 1, >> + enum => ['512', '1024', '2048', '4096', '8192'], >> + }, >> memory => { >> description => "Sets the VGA memory (in MiB). Has no effect >> with serial display.", >> type => 'integer', >> @@ -1549,6 +1563,23 @@ sub print_vga_device { >> $pciaddr = print_pci_addr($vgaid, $bridges, $arch); >> } >> >> + my $virgl_param = ""; >> + my $virgl_mode = $vga->{'virgl-features'}; >> + if ($virgl_mode) { >> + my $virgl_memory_window = $vga->{'virgl-memory-window'} >> + // $vga_fmt->{'virgl-memory-window'}->{'default'}; >> + $virgl_param = ",hostmem=${virgl_memory_window}M,blob=on"; >> + >> + if ($virgl_mode eq 'opengl4.6+vulkan') { >> + $virgl_param .= ",venus=on"; >> + log_warn( >> + "missing virgl render server for Vulkan (Venus) >> support! Please install 'virgl-server'.\n" >> + ) if !-e "/usr/libexec/virgl_render_server"; >> + } >> + } elsif ($vga->{'virgl-memory-window'}) { >> + die "To use a VirGL host memory window, please select a >> compatible VirGL feature set.\n"; >> + } >> + >> if ($vga->{type} eq 'virtio-gl') { >> # VirGL renders on the host, so the guest arch is irrelevant >> for the library lookup >> my $host_arch = get_host_arch(); >> @@ -1560,9 +1591,12 @@ sub print_vga_device { >> die >> "no DRM render node detected (/dev/dri/renderD*), no >> GPU? - needed for '$vga->{type}' display\n" >> if !PVE::Tools::dir_glob_regex('/dev/dri/', >> "renderD.*"); >> + >> + } elsif ($virgl_mode) { >> + die "You need to use virtio-gl to enable OpenGL 4.6 or >> Vulkan support!\n"; >> } >> >> - return >> "$type,id=${vgaid}${memory}${max_outputs}${pciaddr}${edidoff}"; >> + return >> "$type,id=${vgaid}${memory}${max_outputs}${pciaddr}${edidoff}${virgl_ >> param}"; >> } >> >> sub vm_is_volid_owner { ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support 2026-08-31 9:38 ` [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank 2026-08-31 15:29 ` DERUMIER, Alexandre 2026-08-31 15:43 ` DERUMIER, Alexandre @ 2026-09-01 11:28 ` Dominik Csapak 2 siblings, 0 replies; 10+ messages in thread From: Dominik Csapak @ 2026-09-01 11:28 UTC (permalink / raw) To: Markus Frank, pve-devel some comments inline On 8/31/26 11:46 AM, Markus Frank wrote: > Adding the 'blob=on,hostmem=<size>' parameters to the 'virtio-gpu-gl' > device allows the VM to use OpenGL 4.6. By default virtio-gpu-gl only > supports up to OpenGL 4.3. > > If Vulkan support is needed, the 'venus=on' parameter is added to the > 'virtio-gpu-gl' device, in addition to the two parameters required for > OpenGL 4.6. > > The Venus protocol facilitates the translation of Vulkan API calls via > the virglrenderer. To use it, the virgl-server package must be installed > on the host. > > Set the default VirGL memory window to 2048 MiB, as having less could > lead to instability inside the VM. > > Signed-off-by: Markus Frank <m.frank@proxmox.com> > --- > v4: > * made the description of virgl-features more general > * added bugzilla number to commit message > > src/PVE/QemuServer.pm | 36 +++++++++++++++++++++++++++++++++++- > 1 file changed, 35 insertions(+), 1 deletion(-) > > diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm > index 63d8c135..65c4a804 100644 > --- a/src/PVE/QemuServer.pm > +++ b/src/PVE/QemuServer.pm > @@ -171,6 +171,20 @@ my $vga_fmt = { > qw(cirrus qxl qxl2 qxl3 qxl4 none serial0 serial1 serial2 serial3 std virtio virtio-gl vmware) > ], > }, > + 'virgl-features' => { > + description => 'Enable additional features on VirGL GPU.', > + type => 'string', > + optional => 1, > + enum => ['opengl4.6', 'opengl4.6+vulkan'], for now that seems fine, but I hope that does not explode when there are more (possibly independent) features arrive, e.g. consider that 2 new features (a, b) arrive and they don't depend on each other and also not on vulkan, we'd now have to add: 'opengl4.6+a', 'opengl4.6+b', 'opengl4.6+a+b' and the same for 'opengl4.6.+vulkan' so in total 6 new enum values for 2 new features That assumes of course that these new features are independent and directly related to virgl, which seems unlikely A feature list: 'opengl4.6;vulkan' could maybe help with that, but then it's not really possible to properly encode dependencies Not a blocker for me, but wanted to spell it out for others to read > + }, > + 'virgl-memory-window' => { > + description => 'Set the VirGL host memory window. This option allocates' > + . ' host memory to act as VRAM in the VM.', Here the unit is missing, please add something like below (e.g. 'in MiB') also, writing that these have to be powers of two can make sense here and explains why it's an enum of strings, instead of a number > + type => 'string', > + default => '2048', > + optional => 1, > + enum => ['512', '1024', '2048', '4096', '8192'], > + }, > memory => { > description => "Sets the VGA memory (in MiB). Has no effect with serial display.", > type => 'integer', > @@ -1549,6 +1563,23 @@ sub print_vga_device { > $pciaddr = print_pci_addr($vgaid, $bridges, $arch); > } > > + my $virgl_param = ""; > + my $virgl_mode = $vga->{'virgl-features'}; > + if ($virgl_mode) { > + my $virgl_memory_window = $vga->{'virgl-memory-window'} > + // $vga_fmt->{'virgl-memory-window'}->{'default'}; > + $virgl_param = ",hostmem=${virgl_memory_window}M,blob=on"; > + > + if ($virgl_mode eq 'opengl4.6+vulkan') { > + $virgl_param .= ",venus=on"; > + log_warn( > + "missing virgl render server for Vulkan (Venus) support! Please install 'virgl-server'.\n" > + ) if !-e "/usr/libexec/virgl_render_server"; > + } > + } elsif ($vga->{'virgl-memory-window'}) { > + die "To use a VirGL host memory window, please select a compatible VirGL feature set.\n"; > + } > + > if ($vga->{type} eq 'virtio-gl') { > # VirGL renders on the host, so the guest arch is irrelevant for the library lookup > my $host_arch = get_host_arch(); > @@ -1560,9 +1591,12 @@ sub print_vga_device { > die > "no DRM render node detected (/dev/dri/renderD*), no GPU? - needed for '$vga->{type}' display\n" > if !PVE::Tools::dir_glob_regex('/dev/dri/', "renderD.*"); > + > + } elsif ($virgl_mode) { > + die "You need to use virtio-gl to enable OpenGL 4.6 or Vulkan support!\n"; > } in addition to checking here on vm start, it might make sense to check these also in the api while setting, but not a must from me > > - return "$type,id=${vgaid}${memory}${max_outputs}${pciaddr}${edidoff}"; > + return "$type,id=${vgaid}${memory}${max_outputs}${pciaddr}${edidoff}${virgl_param}"; > } > > sub vm_is_volid_owner { ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH pve-manager v4 2/3] ui: qemu: add VirGl feature selection in DisplayEdit 2026-08-31 9:38 [PATCH qemu-server/pve-manager/docs v4 0/1] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support Markus Frank 2026-08-31 9:38 ` [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank @ 2026-08-31 9:38 ` Markus Frank 2026-09-01 11:35 ` Dominik Csapak 2026-08-31 9:38 ` [PATCH docs v4 3/3] VirGL: add info about feature sets with OpenGL4.6 and vulkan Markus Frank 2 siblings, 1 reply; 10+ messages in thread From: Markus Frank @ 2026-08-31 9:38 UTC (permalink / raw) To: pve-devel The user can choose which feature set to use: - the default option with OpenGL 4.3 support - a option with OpenGL 4.6 support - a option with both OpenGL 4.6 and Vulkan support As the feature sets other than the default require a VirGL memory window, the user can change the size of the default window in a different combo box. Add a controller to reset the combo boxes when they cannot be used and add formulars to disable them. Signed-off-by: Markus Frank <m.frank@proxmox.com> --- v4: change the memory label to '2D Memory Limit' when using VirtIO to make the difference to the 'Host Memory Window' clearer. www/manager6/qemu/DisplayEdit.js | 79 +++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/www/manager6/qemu/DisplayEdit.js b/www/manager6/qemu/DisplayEdit.js index 3f583adb..62624589 100644 --- a/www/manager6/qemu/DisplayEdit.js +++ b/www/manager6/qemu/DisplayEdit.js @@ -11,10 +11,37 @@ Ext.define('PVE.qemu.DisplayInputPanel', { return { vga: ret }; }, + controller: { + xclass: 'Ext.app.ViewController', + + onTypeChange: function (type) { + let me = this; + let vm = me.getViewModel(); + + if (type.getValue() !== 'virtio-gl') { + vm.set('virglMemoryWindow', '__default__'); + vm.set('virglFeatures', '__default__'); + vm.notify(); + } + }, + + onFeaturesChange: function (features) { + let me = this; + let vm = me.getViewModel(); + + if (features.getValue() === '__default__') { + vm.set('virglMemoryWindow', '__default__'); + vm.notify(); + } + }, + }, + viewModel: { data: { type: '__default__', clipboard: '__default__', + virglFeatures: '__default__', + virglMemoryWindow: '__default__', }, formulas: { matchNonGUIOption: function (get) { @@ -35,6 +62,15 @@ Ext.define('PVE.qemu.DisplayInputPanel', { return Proxmox.Utils.defaultText; } }, + memoryLabel: function (get) { + if (get('type').match(/^virtio/)) { + return gettext('2D Memory Limit') + ' (MiB)'; + } else { + return gettext('Memory') + ' (MiB)'; + } + }, + isVirgl: (get) => get('type') === 'virtio-gl', + virglIsDefault: (get) => get('virglFeatures') === '__default__', isVNC: (get) => get('clipboard') === 'vnc', hideDefaultHint: (get) => get('isVNC') || get('matchNonGUIOption'), hideVNCHint: (get) => !get('isVNC') || get('matchNonGUIOption'), @@ -58,6 +94,7 @@ Ext.define('PVE.qemu.DisplayInputPanel', { } return true; }, + listeners: { change: 'onTypeChange' }, bind: { value: '{type}', }, @@ -65,16 +102,50 @@ Ext.define('PVE.qemu.DisplayInputPanel', { { xtype: 'proxmoxintegerfield', emptyText: Proxmox.Utils.defaultText, - fieldLabel: gettext('Memory') + ' (MiB)', minValue: 4, maxValue: 512, step: 4, name: 'memory', bind: { + fieldLabel: '{memoryLabel}', emptyText: '{memoryEmptyText}', disabled: '{matchNonGUIOption}', }, }, + { + xtype: 'proxmoxKVComboBox', + name: 'virgl-features', + deleteEmpty: false, + fieldLabel: gettext('VirGL Features'), + listeners: { change: 'onFeaturesChange' }, + comboItems: [ + ['__default__', Proxmox.Utils.defaultText + ' (OpenGL 4.3)'], + ['opengl4.6', 'OpenGL 4.6 support'], + ['opengl4.6+vulkan', 'OpenGL 4.6 and Vulkan support'], + ], + bind: { + value: '{virglFeatures}', + disabled: '{!isVirgl}', + }, + }, + { + xtype: 'proxmoxKVComboBox', + name: 'virgl-memory-window', + deleteEmpty: false, + fieldLabel: gettext('VirGL Host Memory Window'), + comboItems: [ + ['__default__', Proxmox.Utils.defaultText + ' (2048 MiB)'], + ['512', '512 MiB'], + ['1024', '1024 MiB'], + ['2048', '2048 MiB'], + ['4096', '4096 MiB'], + ['8192', '8192 MiB'], + ], + bind: { + value: '{virglMemoryWindow}', + disabled: '{virglIsDefault}', + }, + }, ], advancedItems: [ @@ -141,7 +212,11 @@ Ext.define('PVE.qemu.DisplayEdit', { vmconfig: undefined, subject: gettext('Display'), - width: 350, + width: 450, + + fieldDefaults: { + labelWidth: 180, + }, items: [ { -- 2.47.3 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH pve-manager v4 2/3] ui: qemu: add VirGl feature selection in DisplayEdit 2026-08-31 9:38 ` [PATCH pve-manager v4 2/3] ui: qemu: add VirGl feature selection in DisplayEdit Markus Frank @ 2026-09-01 11:35 ` Dominik Csapak 0 siblings, 0 replies; 10+ messages in thread From: Dominik Csapak @ 2026-09-01 11:35 UTC (permalink / raw) To: Markus Frank, pve-devel code looks good to me, but a small feedback on ux: IMO i would prefer it to now show the virgl fields at all when non virgl display types are selected, this is distracting and the user does not gain anything by always seeing options that don't make sense for the majority of users. So either only show them when virgl is selected (should be easy, just bind on hidden too, not only disabled) or move them to the advanced section. Also i find it a bit weird that the memory label chagnes too when virtio-gpu is selected. It's not wrong per se, but the '2d memory limit' label really only makes sense with the other virgl options together. So i'd limit that change to viritio-gl gpus. On 8/31/26 11:46 AM, Markus Frank wrote: > The user can choose which feature set to use: > - the default option with OpenGL 4.3 support > - a option with OpenGL 4.6 support > - a option with both OpenGL 4.6 and Vulkan support > > As the feature sets other than the default require a VirGL memory > window, the user can change the size of the default window in a > different combo box. > > Add a controller to reset the combo boxes when they cannot be used and > add formulars to disable them. > > Signed-off-by: Markus Frank <m.frank@proxmox.com> > --- > v4: change the memory label to '2D Memory Limit' when using VirtIO to > make the difference to the 'Host Memory Window' clearer. > > www/manager6/qemu/DisplayEdit.js | 79 +++++++++++++++++++++++++++++++- > 1 file changed, 77 insertions(+), 2 deletions(-) > > diff --git a/www/manager6/qemu/DisplayEdit.js b/www/manager6/qemu/DisplayEdit.js > index 3f583adb..62624589 100644 > --- a/www/manager6/qemu/DisplayEdit.js > +++ b/www/manager6/qemu/DisplayEdit.js > @@ -11,10 +11,37 @@ Ext.define('PVE.qemu.DisplayInputPanel', { > return { vga: ret }; > }, > > + controller: { > + xclass: 'Ext.app.ViewController', > + > + onTypeChange: function (type) { > + let me = this; > + let vm = me.getViewModel(); > + > + if (type.getValue() !== 'virtio-gl') { > + vm.set('virglMemoryWindow', '__default__'); > + vm.set('virglFeatures', '__default__'); > + vm.notify(); > + } > + }, > + > + onFeaturesChange: function (features) { > + let me = this; > + let vm = me.getViewModel(); > + > + if (features.getValue() === '__default__') { > + vm.set('virglMemoryWindow', '__default__'); > + vm.notify(); > + } > + }, > + }, > + > viewModel: { > data: { > type: '__default__', > clipboard: '__default__', > + virglFeatures: '__default__', > + virglMemoryWindow: '__default__', > }, > formulas: { > matchNonGUIOption: function (get) { > @@ -35,6 +62,15 @@ Ext.define('PVE.qemu.DisplayInputPanel', { > return Proxmox.Utils.defaultText; > } > }, > + memoryLabel: function (get) { > + if (get('type').match(/^virtio/)) { > + return gettext('2D Memory Limit') + ' (MiB)'; > + } else { > + return gettext('Memory') + ' (MiB)'; > + } > + }, > + isVirgl: (get) => get('type') === 'virtio-gl', > + virglIsDefault: (get) => get('virglFeatures') === '__default__', > isVNC: (get) => get('clipboard') === 'vnc', > hideDefaultHint: (get) => get('isVNC') || get('matchNonGUIOption'), > hideVNCHint: (get) => !get('isVNC') || get('matchNonGUIOption'), > @@ -58,6 +94,7 @@ Ext.define('PVE.qemu.DisplayInputPanel', { > } > return true; > }, > + listeners: { change: 'onTypeChange' }, > bind: { > value: '{type}', > }, > @@ -65,16 +102,50 @@ Ext.define('PVE.qemu.DisplayInputPanel', { > { > xtype: 'proxmoxintegerfield', > emptyText: Proxmox.Utils.defaultText, > - fieldLabel: gettext('Memory') + ' (MiB)', > minValue: 4, > maxValue: 512, > step: 4, > name: 'memory', > bind: { > + fieldLabel: '{memoryLabel}', > emptyText: '{memoryEmptyText}', > disabled: '{matchNonGUIOption}', > }, > }, > + { > + xtype: 'proxmoxKVComboBox', > + name: 'virgl-features', > + deleteEmpty: false, > + fieldLabel: gettext('VirGL Features'), > + listeners: { change: 'onFeaturesChange' }, > + comboItems: [ > + ['__default__', Proxmox.Utils.defaultText + ' (OpenGL 4.3)'], > + ['opengl4.6', 'OpenGL 4.6 support'], > + ['opengl4.6+vulkan', 'OpenGL 4.6 and Vulkan support'], > + ], > + bind: { > + value: '{virglFeatures}', > + disabled: '{!isVirgl}', > + }, > + }, > + { > + xtype: 'proxmoxKVComboBox', > + name: 'virgl-memory-window', > + deleteEmpty: false, > + fieldLabel: gettext('VirGL Host Memory Window'), > + comboItems: [ > + ['__default__', Proxmox.Utils.defaultText + ' (2048 MiB)'], > + ['512', '512 MiB'], > + ['1024', '1024 MiB'], > + ['2048', '2048 MiB'], > + ['4096', '4096 MiB'], > + ['8192', '8192 MiB'], > + ], > + bind: { > + value: '{virglMemoryWindow}', > + disabled: '{virglIsDefault}', > + }, > + }, > ], > > advancedItems: [ > @@ -141,7 +212,11 @@ Ext.define('PVE.qemu.DisplayEdit', { > vmconfig: undefined, > > subject: gettext('Display'), > - width: 350, > + width: 450, > + > + fieldDefaults: { > + labelWidth: 180, > + }, > > items: [ > { ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH docs v4 3/3] VirGL: add info about feature sets with OpenGL4.6 and vulkan 2026-08-31 9:38 [PATCH qemu-server/pve-manager/docs v4 0/1] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support Markus Frank 2026-08-31 9:38 ` [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank 2026-08-31 9:38 ` [PATCH pve-manager v4 2/3] ui: qemu: add VirGl feature selection in DisplayEdit Markus Frank @ 2026-08-31 9:38 ` Markus Frank 2026-09-01 11:39 ` Dominik Csapak 2 siblings, 1 reply; 10+ messages in thread From: Markus Frank @ 2026-08-31 9:38 UTC (permalink / raw) To: pve-devel Signed-off-by: Markus Frank <m.frank@proxmox.com> --- new to v4 qm.adoc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/qm.adoc b/qm.adoc index 18a4fbe..12c1752 100644 --- a/qm.adoc +++ b/qm.adoc @@ -1047,6 +1047,9 @@ default due to being relatively big and also not available as open source for all GPU models/vendors. For most setups you'll just need to do: `apt install libgl1 libegl1` +To use Vulkan (Venus) you also need to install the virgl-server: +`apt install virgl-server` + You can edit the amount of memory given to the virtual GPU, by setting the 'memory' option. This can enable higher resolutions inside the VM, especially with SPICE/QXL. @@ -1066,6 +1069,20 @@ Selecting `serialX` as display 'type' disables the VGA output, and redirects the Web Console to the selected serial port. A configured display 'memory' setting will be ignored in that case. +.VirGL Feature Sets + +|=== +|Feature Set |Description +|`opengl4.3 (Default)` |The default VirGL implementation; does not require a host memory window for blob resources +|`opengl4.6` |Adds support for OpenGL 4.6 by adding a host memory window (Default = 2048MiB) for blob resources +|`opengl4.6+vulkan` |Adds for OpenGL 4.6 and Vulkan by adding a host memory window for blob resources and enabling venus +|=== + +The VirGL host memory window and blob resources allow a guest VM to +directly map and write to host GPU VRAM or system memory without copying +overhead, enabling the zero-copy buffer sharing and persistent memory +mapping required for Vulkan and OpenGL 4.6. + .VNC clipboard You can enable the VNC clipboard by setting `clipboard` to `vnc`. -- 2.47.3 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH docs v4 3/3] VirGL: add info about feature sets with OpenGL4.6 and vulkan 2026-08-31 9:38 ` [PATCH docs v4 3/3] VirGL: add info about feature sets with OpenGL4.6 and vulkan Markus Frank @ 2026-09-01 11:39 ` Dominik Csapak 0 siblings, 0 replies; 10+ messages in thread From: Dominik Csapak @ 2026-09-01 11:39 UTC (permalink / raw) To: Markus Frank, pve-devel one comment inline Otherwise consider this Reviewed-by: Dominik Csapak <d.csapak@proxmox.com> On 8/31/26 11:46 AM, Markus Frank wrote: > Signed-off-by: Markus Frank <m.frank@proxmox.com> > --- > new to v4 > > qm.adoc | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/qm.adoc b/qm.adoc > index 18a4fbe..12c1752 100644 > --- a/qm.adoc > +++ b/qm.adoc > @@ -1047,6 +1047,9 @@ default due to being relatively big and also not available as open source for > all GPU models/vendors. For most setups you'll just need to do: > `apt install libgl1 libegl1` > > +To use Vulkan (Venus) you also need to install the virgl-server: > +`apt install virgl-server` > + > You can edit the amount of memory given to the virtual GPU, by setting > the 'memory' option. This can enable higher resolutions inside the VM, > especially with SPICE/QXL. > @@ -1066,6 +1069,20 @@ Selecting `serialX` as display 'type' disables the VGA output, and redirects > the Web Console to the selected serial port. A configured display 'memory' > setting will be ignored in that case. > > +.VirGL Feature Sets > + > +|=== > +|Feature Set |Description > +|`opengl4.3 (Default)` |The default VirGL implementation; does not require a host memory window for blob resources > +|`opengl4.6` |Adds support for OpenGL 4.6 by adding a host memory window (Default = 2048MiB) for blob resources > +|`opengl4.6+vulkan` |Adds for OpenGL 4.6 and Vulkan by adding a host memory window for blob resources and enabling venus here the word 'support' is missing between 'adds' and 'for' > +|=== > + > +The VirGL host memory window and blob resources allow a guest VM to > +directly map and write to host GPU VRAM or system memory without copying > +overhead, enabling the zero-copy buffer sharing and persistent memory > +mapping required for Vulkan and OpenGL 4.6. > + > .VNC clipboard > You can enable the VNC clipboard by setting `clipboard` to `vnc`. > ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2026-09-01 11:39 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-08-31 9:38 [PATCH qemu-server/pve-manager/docs v4 0/1] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support Markus Frank 2026-08-31 9:38 ` [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank 2026-08-31 15:29 ` DERUMIER, Alexandre 2026-08-31 15:43 ` DERUMIER, Alexandre 2026-09-01 6:24 ` Dominik Csapak 2026-09-01 11:28 ` Dominik Csapak 2026-08-31 9:38 ` [PATCH pve-manager v4 2/3] ui: qemu: add VirGl feature selection in DisplayEdit Markus Frank 2026-09-01 11:35 ` Dominik Csapak 2026-08-31 9:38 ` [PATCH docs v4 3/3] VirGL: add info about feature sets with OpenGL4.6 and vulkan Markus Frank 2026-09-01 11:39 ` Dominik Csapak
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox