all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Markus Frank <m.frank@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH qemu-server v3 1/2] virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support
Date: Fri, 26 Jun 2026 16:07:55 +0200	[thread overview]
Message-ID: <20260626141044.311778-2-m.frank@proxmox.com> (raw)
In-Reply-To: <20260626141044.311778-1-m.frank@proxmox.com>

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





  reply	other threads:[~2026-06-26 14:12 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
2026-06-26 14:07 ` [PATCH pve-manager v3 2/2] ui: qemu: add VirGl feature selection in DisplayEdit Markus Frank

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260626141044.311778-2-m.frank@proxmox.com \
    --to=m.frank@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal