Hi Vivek
On Thu, May 29, 2025 at 9:16 AM Vivek Kasireddy
<vivek.kasireddy@intel.com> wrote:
>
> To address the limitation that this option is incompatible with
> remote clients, this patch series adds an option to select a
> preferred codec and also enable gl=on option for clients that
> are connected via the network. In other words, with this option
> enabled (and the below linked Spice series merged), it would be
> possible to have Qemu share a dmabuf fd with Spice, which would
> then forward it to a hardware or software based encoder and
> eventually send the data associated with the fd to a client that
> could be located on a different machine.
>
> Essentially, this patch series provides a hardware accelerated,
> opensource VDI option for users using Qemu and Spice by leveraging
> the iGPU/dGPU on the host machine to encode the Guest FB via the
> Gstreamer framework.
>
I tested the series on fedora with intel-media-driver installed from rpmfusion.
Without explicit video-codecs argument I get:
qemu-system-x86_64: warning: Spice:
../server/dcc-send.cpp:1780:red_marshall_gl_draw_stream: No video
encoder available for this stream
qemu-system-x86_64: warning: spice: no gl-draw-done within one second
If I specify video-codecs=gstreamer:h264, then it seems to work fine.
I wish all of this would be better documented or more explicit, as
each step took me a while to figure out (why it didn't pick a
compatible encoder, what was the argument for video-codecs, why gst
didn't support h264enc, where to find the encoder, ...). I am not even
sure I am doing all this correctly. Maybe there should be some
docs/interop/spice.rst to document qemu -spice and video-codecs
usages? (and move docs/spice-port-fqdn.txt content there too)
I suppose the issue with better default for video-codecs is on
spice-server side, so for this series:
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> v4 -> v5 (suggestions from Marc-André):
> - Fix the errors (mostly 80 chars limit violations) identified by
> scripts/checkpatch.pl
> - Rename the globals to have a spice_ prefix for consistency
> - Rename MAX_REFRESH_RATE to DEFAULT_MAX_REFRESH_RATE
> - Added comments to explain how/when the gl_draw request is submitted
> to spice server in the remote clients case
> - Fix the mem_obj leak that would occur when the associated texture
> is destroyed or when an error is encountered while creating a
> texture from an fd (Dmitry and Michael)
> - Merged Michael's patch to fix the mem_obj leak into this series and
> added his Co-developed-by tag to the relevant patches
>
> v3 -> v4 (suggestions from Marc-André):
> - Add a new parameter to make max_refresh_rate configurable
> - Have surface_gl_create_texture_from_fd() return bool after checking
> for errors
> - Remove the check for PIXMAN_r5g6b5() in spice_gl_replace_fd_texture()
> - Report errors in spice_gl_replace_fd_texture() when someting fails
> - Use glGetError() correctly by adding an additional (dummy) call
> before checking for actual errors (Dmitry)
> - Add a new patch to check fd values in egl_dmabuf_export_texture()
> - Rebase on Qemu master
>
> v2 -> v3:
> - Check for errors after invoking glImportMemoryFdEXT() using
> glGetError() and report the error to user (Dmitry)
>
> v1 -> v2:
> - Replace the option name preferred-codec with video-codecs (Marc-André)
> - Add a warning when an fd cannot be created from texture (Marc-André)
> - Add a new patch to blit the scanout texture into a linear one to
> make it work with virgl
> - Rebased and tested against the latest Spice master
>
> Tested with the following Qemu parameters:
> -device virtio-vga,max_outputs=1,xres=1920,yres=1080,blob=true
> -spice port=3001,gl=on,disable-ticketing=on,video-codecs=gstreamer:h264
>
> and remote-viewer --spice-debug spice://x.x.x.x:3001 on the client side.
>
> Associated Spice server MR (merged):
> https://gitlab.freedesktop.org/spice/spice/-/merge_requests/229
>
> ---
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
> Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com>
> Cc: Frediano Ziglio <freddy77@gmail.com>
> Cc: Michael Scherle <michael.scherle@rz.uni-freiburg.de>
> Cc: Dongwon Kim <dongwon.kim@intel.com>
> Cc: Alex Bennée <alex.bennee@linaro.org>
>
> Vivek Kasireddy (7):
> ui/egl-helpers: Error check the fds in egl_dmabuf_export_texture()
> ui/spice: Add an option for users to provide a preferred codec
> ui/spice: Enable gl=on option for non-local or remote clients
> ui/spice: Add an option to submit gl_draw requests at fixed rate
> ui/console-gl: Add a helper to create a texture with linear memory
> layout
> ui/spice: Create a new texture with linear layout when gl=on is
> enabled
> ui/spice: Blit the scanout texture if its memory layout is not linear
>
> include/ui/console.h | 3 +
> include/ui/spice-display.h | 5 +
> include/ui/surface.h | 1 +
> qemu-options.hx | 10 ++
> ui/console-gl.c | 54 +++++++++
> ui/egl-helpers.c | 6 +
> ui/spice-core.c | 28 +++++
> ui/spice-display.c | 226 ++++++++++++++++++++++++++++++++++---
> 8 files changed, 317 insertions(+), 16 deletions(-)
>
> --
> 2.49.0
>
>
--
Marc-André Lureau