* [PATCH qemu-server/pve-manager v3 0/2] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support
@ 2026-06-26 14:07 Markus Frank
2026-06-26 14:07 ` [PATCH qemu-server v3 1/2] virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank
2026-06-26 14:07 ` [PATCH pve-manager v3 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 14:07 UTC (permalink / raw)
To: pve-devel
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
qemu-server:
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 v3 1/2] virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support
2026-06-26 14:07 [PATCH qemu-server/pve-manager v3 0/2] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support Markus Frank
@ 2026-06-26 14:07 ` Markus Frank
2026-06-26 14:07 ` [PATCH pve-manager v3 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 14:07 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..30d08f32 100644
--- a/src/PVE/QemuServer.pm
+++ b/src/PVE/QemuServer.pm
@@ -170,6 +170,20 @@ 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 +1538,21 @@ 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 v3 2/2] ui: qemu: add VirGl feature selection in DisplayEdit
2026-06-26 14:07 [PATCH qemu-server/pve-manager v3 0/2] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support Markus Frank
2026-06-26 14:07 ` [PATCH qemu-server v3 1/2] virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank
@ 2026-06-26 14:07 ` Markus Frank
1 sibling, 0 replies; 3+ messages in thread
From: Markus Frank @ 2026-06-26 14:07 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..e05f8f22 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 14:12 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-26 14:07 [PATCH qemu-server/pve-manager v3 0/2] add virtio-vga-gl OpenGL 4.6 & Vulkan (venus) support Markus Frank
2026-06-26 14:07 ` [PATCH qemu-server v3 1/2] virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support Markus Frank
2026-06-26 14:07 ` [PATCH pve-manager v3 2/2] ui: qemu: add VirGl feature selection in DisplayEdit Markus Frank
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.