* [PATCH qemu-server/pve-manager v2 0/2] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support
@ 2026-06-26 13:54 Markus Frank
2026-06-26 13:54 ` [PATCH qemu-server v2 1/2] virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank
2026-06-26 13:54 ` [PATCH pve-manager v2 2/2] ui: qemu: add VirGl feature selection in DisplayEdit Markus Frank
0 siblings, 2 replies; 3+ messages in thread
From: Markus Frank @ 2026-06-26 13:54 UTC (permalink / raw)
To: pve-devel
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
Markus Frank (1):
virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support
src/PVE/QemuServer.pm | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
pve-manager:
Markus Frank (1):
ui: qemu: add VirGl feature selection in DisplayEdit
www/manager6/qemu/DisplayEdit.js | 72 +++++++++++++++++++++++++++++++-
1 file changed, 71 insertions(+), 1 deletion(-)
--
2.47.3
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH qemu-server v2 1/2] virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support
2026-06-26 13:54 [PATCH qemu-server/pve-manager v2 0/2] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support Markus Frank
@ 2026-06-26 13:54 ` Markus Frank
2026-06-26 13:54 ` [PATCH pve-manager v2 2/2] ui: qemu: add VirGl feature selection in DisplayEdit Markus Frank
1 sibling, 0 replies; 3+ messages in thread
From: Markus Frank @ 2026-06-26 13:54 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>
---
src/PVE/QemuServer.pm | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm
index 55e9f520..0b9f8dcd 100644
--- a/src/PVE/QemuServer.pm
+++ b/src/PVE/QemuServer.pm
@@ -170,6 +170,21 @@ my $vga_fmt = {
qw(cirrus qxl qxl2 qxl3 qxl4 none serial0 serial1 serial2 serial3 std virtio virtio-gl vmware)
],
},
+ 'virgl-features' => {
+ description => 'Enable support for OpenGL 4.6 and Vulkan with the 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',
@@ -1524,6 +1539,20 @@ 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";
+ }
+ }
+
if ($vga->{type} eq 'virtio-gl') {
my $base = '/usr/lib/x86_64-linux-gnu/lib';
die "missing libraries for '$vga->{type}' detected! Please install 'libgl1' and 'libegl1'\n"
@@ -1532,9 +1561,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] 3+ messages in thread
* [PATCH pve-manager v2 2/2] ui: qemu: add VirGl feature selection in DisplayEdit
2026-06-26 13:54 [PATCH qemu-server/pve-manager v2 0/2] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support Markus Frank
2026-06-26 13:54 ` [PATCH qemu-server v2 1/2] virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank
@ 2026-06-26 13:54 ` Markus Frank
1 sibling, 0 replies; 3+ messages in thread
From: Markus Frank @ 2026-06-26 13:54 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>
---
www/manager6/qemu/DisplayEdit.js | 72 +++++++++++++++++++++++++++++++-
1 file changed, 71 insertions(+), 1 deletion(-)
diff --git a/www/manager6/qemu/DisplayEdit.js b/www/manager6/qemu/DisplayEdit.js
index 3f583adb..98c62efb 100644
--- a/www/manager6/qemu/DisplayEdit.js
+++ b/www/manager6/qemu/DisplayEdit.js
@@ -11,12 +11,42 @@ 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: {
+ isVirgl: function (get) {
+ return get('type') === 'virtio-gl';
+ },
matchNonGUIOption: function (get) {
return get('type').match(/^(serial\d|none)$/);
},
@@ -35,6 +65,7 @@ Ext.define('PVE.qemu.DisplayInputPanel', {
return Proxmox.Utils.defaultText;
}
},
+ virglIsDefault: (get) => get('virglFeatures') === '__default__',
isVNC: (get) => get('clipboard') === 'vnc',
hideDefaultHint: (get) => get('isVNC') || get('matchNonGUIOption'),
hideVNCHint: (get) => !get('isVNC') || get('matchNonGUIOption'),
@@ -58,6 +89,7 @@ Ext.define('PVE.qemu.DisplayInputPanel', {
}
return true;
},
+ listeners: { change: 'onTypeChange' },
bind: {
value: '{type}',
},
@@ -78,6 +110,40 @@ Ext.define('PVE.qemu.DisplayInputPanel', {
],
advancedItems: [
+ {
+ 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}',
+ },
+ },
{
xtype: 'proxmoxKVComboBox',
name: 'clipboard',
@@ -141,7 +207,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] 3+ messages in thread
end of thread, other threads:[~2026-06-26 13:56 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-26 13:54 [PATCH qemu-server/pve-manager v2 0/2] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support Markus Frank
2026-06-26 13:54 ` [PATCH qemu-server v2 1/2] virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank
2026-06-26 13:54 ` [PATCH pve-manager v2 2/2] ui: qemu: add VirGl feature selection in DisplayEdit Markus Frank
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox