[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 0/5] Support virtio-gpu DRM native context
From: |
Michael S. Tsirkin |
Subject: |
Re: [PATCH v4 0/5] Support virtio-gpu DRM native context |
Date: |
Wed, 8 Jan 2025 08:14:34 -0500 |
On Mon, Nov 11, 2024 at 01:18:32AM +0300, Dmitry Osipenko wrote:
> This patchset adds DRM native context support to VirtIO-GPU on Qemu.
>
> Contarary to Virgl and Venus contexts which mediate high level GFX APIs,
> DRM native context [1] mediates lower level kernel driver UAPI, which
> reflects in a less CPU overhead and less/simpler code needed to support it.
> DRM context consists of a host and guest parts that have to be implemented
> for each GPU driver. On a guest side, DRM context presents a virtual GPU as
> a real/native host GPU device for GL/VK applications.
>
> [1] https://www.youtube.com/watch?v=9sFP_yddLLQ
>
> Today there are four known DRM native context drivers existing in a wild:
>
> - Freedreno (Qualcomm SoC GPUs), completely upstreamed
> - AMDGPU, mostly merged into upstreams
> - Intel (i915), merge requests are opened
> - Asahi (Apple SoC GPUs), WIP status
Took a quick look, looks ok
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Gerd, you gonnu pick this up?
Dmitry, if you will post a rebase, I can apply too.
>
> # How to try out DRM context:
>
> 1. DRM context uses host blobs and requires latest developer version
> of Linux kernel [2] that has necessary KVM fixes.
>
> [2] https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/
>
> 2. Use latest libvirglrenderer from upstream git/main for Freedreno
> and AMDGPU native contexts. For Intel use patches [3].
>
> [3] https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1384
>
> 3. On guest, use latest Mesa version for Freedreno. For AMDGPU use
> Mesa patches [4], for Intel [5].
>
> [4] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21658
> [5] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29870
>
> 4. On guest, use latest Linux kernel v6.6+. Apply patch [6] if you're
> running Xorg in guest.
>
> [6]
> https://lore.kernel.org/dri-devel/20241020224725.179937-1-dmitry.osipenko@collabora.com/
>
> Example Qemu cmdline that enables DRM context:
>
> qemu-system-x86_64 -device
> virtio-vga-gl,hostmem=4G,blob=on,drm_native_context=on \
> -machine q35,accel=kvm,memory-backend=mem1 \
> -object memory-backend-memfd,id=mem1,size=8G -m 8G
>
>
> # Note about known performance problem in Qemu:
>
> DRM contexts are mapping host blobs extensively and these mapping
> operations work slowly in Qemu. Exact reason is unknown. Mappings work
> fast on Crosvm For DRM contexts this problem is more visible than for
> Venus/Virgl.
>
> Changelog:
>
> v4: - Improved SDL2/dmabuf patch by reusing existing Meson X11 config
> option, better handling EGL error and extending comment telling
> that it's safe to enable SDL2 EGL preference hint. As was suggested
> by Akihiko Odaki.
>
> - Replaced another QSLIST_FOREACH_SAFE with QSLIST_EMPTY+FIRST in
> the async-fencing patch for more consistency of the code. As was
> suggested by Akihiko Odaki.
>
> - Added missing braces around if-statement that was spotted by
> Alex Bennée.
>
> - Renamed 'drm=on' option of virtio-gpu-gl device to
> 'drm_native_context=on' for more clarity as was suggested by
> Alex Bennée. Haven't added added new context-type option that
> was also proposed by Alex, might do it with a separate patch.
> This context-type option will duplicate and depecate existing
> options, but in a longer run likely will be worthwhile adding
> it.
>
> - Dropped Linux headers-update patch as headers has been updated
> in the staging tree.
>
> v3: - Improved EGL presence-check code on X11 systems for the SDL2
> hint that prefers EGL over GLX by using better ifdefs and checking
> Xlib presence at a build time to avoid build failure if lib SDL2
> and system are configured with a disabled X11 support. Also added
> clarifying comment telling that X11 hint doesn't affect Wayland
> systems. Suggested by Akihiko Odaki.
>
> - Corrected strerror(err) that used negative error where it should
> be positive and vice versa that was caught by Akihiko Odaki. Added
> clarifying comment for the case where we get positive error code
> from virglrenderer that differs from other virglrenderer API functions.
>
> - Improved QSLIST usage by dropping mutex protecting the async fence
> list and using atomic variant of QSLIST helpers instead. Switched away
> from using FOREACH helper to improve readability of the code, showing
> that we don't precess list in unoptimal way. Like was suggested by
> Akihiko Odaki.
>
> - Updated patchset base to Venus v18.
>
> v2: - Updated SDL2-dmabuf patch by making use of error_report() and
> checking presense of X11+EGL in the system before making SDL2
> to prefer EGL backend over GLX, suggested by Akihiko Odaki.
>
> - Improved SDL2's dmabuf-presence check that wasn't done properly
> in v1, where EGL was set up only after first console was fully
> inited, and thus, SDL's display .has_dmabuf callback didn't work
> for the first console. Now dmabuf support status is pre-checked
> before console is registered.
>
> - Updated commit description of the patch that fixes SDL2's context
> switching logic with a more detailed explanation of the problem.
> Suggested by Akihiko Odaki.
>
> - Corrected rebase typo in the async-fencing patch and switched
> async-fencing to use a sigle-linked list instead of the double,
> as was suggested by Akihiko Odaki.
>
> - Replaced "=true" with "=on" in the DRM native context documentation
> example and made virtio_gpu_virgl_init() to fail with a error message
> if DRM context can't be initialized instead of giving a warning
> message, as was suggested by Akihiko Odaki.
>
> - Added patchew's dependecy tag to the cover letter as was suggested by
> Akihiko Odaki.
>
> Dmitry Osipenko (4):
> ui/sdl2: Restore original context after new context creation
> virtio-gpu: Handle virgl fence creation errors
> virtio-gpu: Support asynchronous fencing
> virtio-gpu: Support DRM native context
>
> Pierre-Eric Pelloux-Prayer (1):
> ui/sdl2: Implement dpy dmabuf functions
>
> docs/system/devices/virtio-gpu.rst | 11 ++
> hw/display/virtio-gpu-gl.c | 5 +
> hw/display/virtio-gpu-virgl.c | 158 ++++++++++++++++++++++++++---
> hw/display/virtio-gpu.c | 15 +++
> include/hw/virtio/virtio-gpu.h | 16 +++
> include/ui/sdl2.h | 7 ++
> meson.build | 6 +-
> ui/sdl2-gl.c | 67 ++++++++++++
> ui/sdl2.c | 42 ++++++++
> 9 files changed, 309 insertions(+), 18 deletions(-)
>
> --
> 2.47.0
- Re: [PATCH v4 0/5] Support virtio-gpu DRM native context,
Michael S. Tsirkin <=