all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Dominik Csapak <d.csapak@proxmox.com>
To: Markus Frank <m.frank@proxmox.com>, pve-devel@lists.proxmox.com
Subject: Re: [PATCH qemu-server v4 1/3] fix #6277: virtio-vga-gl: add OpenGL 4.6 and Vulkan (Venus) support
Date: Tue, 1 Sep 2026 13:28:34 +0200	[thread overview]
Message-ID: <58c382e5-ed6e-4217-9e47-5107b7a0bcea@proxmox.com> (raw)
In-Reply-To: <20260831094605.114396-2-m.frank@proxmox.com>

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 {





  parent reply	other threads:[~2026-09-01 11:28 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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

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=58c382e5-ed6e-4217-9e47-5107b7a0bcea@proxmox.com \
    --to=d.csapak@proxmox.com \
    --cc=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