From: "Alex Bennée" <alex.bennee@linaro.org>
To: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Cc: "Akihiko Odaki" <akihiko.odaki@daynix.com>,
"Huang Rui" <ray.huang@amd.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Gert Wollny" <gert.wollny@collabora.com>,
qemu-devel@nongnu.org,
"Gurchetan Singh" <gurchetansingh@chromium.org>,
"Alyssa Ross" <hi@alyssa.is>,
"Roger Pau Monné" <roger.pau@citrix.com>,
"Alex Deucher" <alexander.deucher@amd.com>,
"Stefano Stabellini" <stefano.stabellini@amd.com>,
"Christian König" <christian.koenig@amd.com>,
"Xenia Ragiadakou" <xenia.ragiadakou@amd.com>,
"Pierre-Eric Pelloux-Prayer" <pierre-eric.pelloux-prayer@amd.com>,
"Honglei Huang" <honglei1.huang@amd.com>,
"Julia Zhang" <julia.zhang@amd.com>,
"Chen Jiqian" <Jiqian.Chen@amd.com>,
"Rob Clark" <robdclark@gmail.com>,
"Yiwei Zhang" <zzyiwei@chromium.org>,
"Sergio Lopez Pascual" <slp@redhat.com>
Subject: Re: [PATCH v4 0/5] Support virtio-gpu DRM native context
Date: Fri, 10 Jan 2025 12:16:20 +0000 [thread overview]
Message-ID: <87o70e50ff.fsf@draig.linaro.org> (raw)
In-Reply-To: <20241110221838.2241356-1-dmitry.osipenko@collabora.com> (Dmitry Osipenko's message of "Mon, 11 Nov 2024 01:18:32 +0300")
Dmitry Osipenko <dmitry.osipenko@collabora.com> writes:
> 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
>
>
> # 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
>
Can we detect if virglrenderer has support at build time?
[drm] pci: virtio-gpu-pci detected at 0000:00:02.0
[drm] Host memory window: 0x8000000000 +0x100000000
[drm] features: +virgl +edid +resource_blob +host_visible
[drm] features: +context_init
[drm] number of scanouts: 1
[drm] number of cap sets: 2
DRM native context support was not enabled in virglrenderer
qemu: virgl could not be initialized: -1
[drm:virtio_gpu_init] *ERROR* timed out waiting for cap set 0
is a poor failure mode at runtime.
> 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(-)
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
next prev parent reply other threads:[~2025-01-10 12:23 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-10 22:18 [PATCH v4 0/5] Support virtio-gpu DRM native context Dmitry Osipenko
2024-11-10 22:18 ` [PATCH v4 1/5] ui/sdl2: Restore original context after new context creation Dmitry Osipenko
2024-11-10 22:18 ` [PATCH v4 2/5] ui/sdl2: Implement dpy dmabuf functions Dmitry Osipenko
2024-11-10 22:18 ` [PATCH v4 3/5] virtio-gpu: Handle virgl fence creation errors Dmitry Osipenko
2024-11-10 22:18 ` [PATCH v4 4/5] virtio-gpu: Support asynchronous fencing Dmitry Osipenko
2025-01-13 22:00 ` Alex Bennée
2025-01-14 12:19 ` Dmitry Osipenko
2024-11-10 22:18 ` [PATCH v4 5/5] virtio-gpu: Support DRM native context Dmitry Osipenko
2024-11-11 5:18 ` [PATCH v4 0/5] Support virtio-gpu " Akihiko Odaki
2025-01-08 13:14 ` Michael S. Tsirkin
2025-01-12 15:48 ` Dmitry Osipenko
2025-01-10 12:16 ` Alex Bennée [this message]
2025-01-12 15:49 ` Dmitry Osipenko
2025-01-10 13:38 ` Alex Bennée
2025-01-12 15:56 ` Dmitry Osipenko
2025-01-12 16:14 ` Alex Bennée
2025-01-12 16:46 ` Dmitry Osipenko
2025-01-12 17:05 ` Alex Bennée
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=87o70e50ff.fsf@draig.linaro.org \
--to=alex.bennee@linaro.org \
--cc=Jiqian.Chen@amd.com \
--cc=akihiko.odaki@daynix.com \
--cc=alexander.deucher@amd.com \
--cc=christian.koenig@amd.com \
--cc=dmitry.osipenko@collabora.com \
--cc=gert.wollny@collabora.com \
--cc=gurchetansingh@chromium.org \
--cc=hi@alyssa.is \
--cc=honglei1.huang@amd.com \
--cc=julia.zhang@amd.com \
--cc=kraxel@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=pierre-eric.pelloux-prayer@amd.com \
--cc=qemu-devel@nongnu.org \
--cc=ray.huang@amd.com \
--cc=robdclark@gmail.com \
--cc=roger.pau@citrix.com \
--cc=slp@redhat.com \
--cc=stefano.stabellini@amd.com \
--cc=xenia.ragiadakou@amd.com \
--cc=zzyiwei@chromium.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).