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>,
"Pierre-Eric Pelloux-Prayer" <pierre-eric.pelloux-prayer@amd.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>,
"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@gmail.com>,
"Sergio Lopez Pascual" <slp@redhat.com>
Subject: Re: [PATCH v14 00/10] Support virtio-gpu DRM native context
Date: Mon, 27 Oct 2025 10:56:28 +0000 [thread overview]
Message-ID: <871pmozk83.fsf@draig.linaro.org> (raw)
In-Reply-To: <20251020233949.506088-1-dmitry.osipenko@collabora.com> (Dmitry Osipenko's message of "Tue, 21 Oct 2025 02:39:39 +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 that mediates 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.
Gentle ping for any review. I'm running a bit tight for softfreeze and I
don't think I have time to do this justice.
>
> [1] https://www.youtube.com/watch?v=9sFP_yddLLQ
>
> Today there are four DRM native context drivers existing in a wild:
>
> - Freedreno (Qualcomm SoC GPUs), completely upstreamed
> - AMDGPU, completely upstreamed
> - Intel (i915), merge requests are opened
> - Asahi (Apple SoC GPUs), partially merged upstream
>
> # How to try out DRM context:
>
> 1. DRM context uses host blobs and on host requires v6.13 or newer version
> of Linux kernel that contains necessary KVM fixes.
>
> 2. Use latest available Mesa (both guest and host) and libvirglrenderer
> versions. On guest, build Mesa with enabled virtio native context support.
>
> 3. On guest, use latest Linux kernel v6.14 or newer.
>
> 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 -m 8G
>
> # Notes about known problems:
>
> 1. DRM contexts are mapping host blobs extensively and these mapping
> operations work slowly in QEMU. We will need to optimize hostmem
> unmapping that currently happens in a deffered RCU work, blocking
> GPU for a substantial time. WIP fixes available at [2][3].
>
> [2] https://lore.kernel.org/qemu-devel/20251016-force-v1-1-919a82112498@rsg.ci.i.u-tokyo.ac.jp/
> [3] https://lore.kernel.org/qemu-devel/20251014111234.3190346-6-alex.bennee@linaro.org/
>
> 2. Linux kernel virtio-gpu driver doesn't limit display refresh rate,
> causing poor performance. Fix availalble in drm-misc-next tree [4]
> and should land upstream with v6.19+ kernel.
>
> [4] https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/a036f5fceedb9fbd715565fef7b824a121503de7
>
> 3. Xorg on guest creates initial dumb buffer that is a vrend buffer, which
> can't be re-used by native contexts. This may cause drawing artifacts.
> Boot kernel with disabled fbdev using drm_client_lib.active="" kernel
> cmdline parameter to work around the issue.
>
> Wayland on guest isn't affected by this issue.
>
> Changelog:
>
> v14:- Rebased on top of recent QEMU staging tree.
>
> - DRM native context in QEMU now requires virglrenderer v1.2.0+
> containing fix for async-fencing not working after guest reboot.
>
> - Updated doc patch with new Asahi nctx rquirements info. Asahi
> support landed to virglrenderer v1.2.0.
>
> v13:- Updated Asahi nctx MR link in the doc patch. Old MR was closed
> and new opened.
>
> - Fixed compiler warning about unused variable when using older
> virglrenderer version.
>
> v12:- Rebased on top of recent QEMU/staging and a fix from Yiwei Zhang:
>
> https://lore.kernel.org/qemu-devel/20250518152651.334115-1-zzyiwei@gmail.com/
>
> - Async-fence and native context features now require virglrenderer > 1.1.1
> that contains fix needed for resetting virtio-gpu-gl properly on QEMU
> reboot:
>
> https://gitlab.freedesktop.org/virgl/virglrenderer/-/commit/6f4681ff09cb17aa2d6715dbc6034eb3abe5711d
>
> - Added r-b from Akihiko Odaki to the doc patch.
>
> - Corrected resetting of async fences list that was done on scanout
> reset in v11 instead of virtio-gpu reset.
>
> v11:- Added column for libvirglrenderer host requrements versions and
> corrected Asahi kernel link. Suggested by Akihiko Odaki.
>
> v10:- Added links to Asahi and i915 virglrenderer MRs, link to Asahi host
> kernel. Suggested by Akihiko Odaki.
>
> - Renamed gfxstream guest requrements table's colum to match the host
> requirements table. Suggested by Akihiko Odaki.
>
> v9: - Updated doc patch by addresing review comments from Akihiko Odaki.
> Made kernel requirements section specific to guest kernel and
> removed reference to host requirements. Removed examples of
> external projects' build flags.
>
> - Added guest kernel minimum versions to the guest requirements table.
>
> v8: - Addressed review comments from Akihiko Odaki on the doc patch.
>
> - Added r-bs from Akihiko Odaki on the doc patches.
>
> - Extended vrend doc with info about hostmem requirement for GL 4.6
>
> v7: - Added r-b from Alex Bennée to the async fencing patch.
>
> - Updated virtio-gpu doc patch with addressed review comments
> from Akihiko Odaki.
>
> v6: - Fixed compilation warning using older version of virglrenderer,
> which wasn't fixed properly in v5.
>
> - Added t-bs from Alex Bennée.
>
> - Added patches to improve virgl/venus doc by adding links
> to the Mesa doc as was suggested by Akihiko Odaki.
>
> - Updated patch that documents guest/host requirements. Added
> links to Asahi nctx and reworked the doc structure by adding
> requirements to each context-type section instead of having
> one big blob or requirements, which was objected by Akihiko Odaki.
>
> v5: - Added r-bs from Akihiko Odaki.
>
> - Added acks from Michael Tsirkin.
>
> - Fixed compilation warning using older version of virglrenderer that
> was reported by Alex Bennée. Noticed that I need to keep old
> virgl_write_fence() code around for the older virglrenderer in
> "Support asynchronous fencing" patch, so added it back and verified
> that old virglrenderer works properly.
>
> - Added new patch from Alex Bennée that adds more virtio-gpu
> documentation with a couple corrections and additions to it from me.
>
> - Rebased patches on top of latest staging tree.
>
> 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.
>
> Alex Bennée (1):
> docs/system: virtio-gpu: Document host/guest requirements
>
> Dmitry Osipenko (8):
> 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
> ui/sdl2: Don't disable scanout when display is refreshed
> ui/gtk: Don't disable scanout when display is refreshed
> docs/system: virtio-gpu: Add link to Mesa VirGL doc
> docs/system: virtio-gpu: Update Venus link
>
> Pierre-Eric Pelloux-Prayer (1):
> ui/sdl2: Implement dpy dmabuf functions
>
> docs/system/devices/virtio-gpu.rst | 116 +++++++++++++++++-
> hw/display/virtio-gpu-gl.c | 7 ++
> hw/display/virtio-gpu-virgl.c | 185 ++++++++++++++++++++++++++++-
> hw/display/virtio-gpu.c | 15 +++
> include/hw/virtio/virtio-gpu.h | 14 +++
> include/ui/sdl2.h | 7 ++
> meson.build | 8 +-
> ui/gtk-egl.c | 1 -
> ui/gtk-gl-area.c | 1 -
> ui/sdl2-gl.c | 70 ++++++++++-
> ui/sdl2.c | 42 +++++++
> 11 files changed, 449 insertions(+), 17 deletions(-)
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
next prev parent reply other threads:[~2025-10-27 10:57 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-20 23:39 [PATCH v14 00/10] Support virtio-gpu DRM native context Dmitry Osipenko
2025-10-20 23:39 ` [PATCH v14 01/10] ui/sdl2: Restore original context after new context creation Dmitry Osipenko
2025-10-20 23:39 ` [PATCH v14 02/10] ui/sdl2: Implement dpy dmabuf functions Dmitry Osipenko
2025-10-20 23:39 ` [PATCH v14 03/10] virtio-gpu: Handle virgl fence creation errors Dmitry Osipenko
2025-10-20 23:39 ` [PATCH v14 04/10] virtio-gpu: Support asynchronous fencing Dmitry Osipenko
2025-10-20 23:39 ` [PATCH v14 05/10] virtio-gpu: Support DRM native context Dmitry Osipenko
2025-10-20 23:39 ` [PATCH v14 06/10] ui/sdl2: Don't disable scanout when display is refreshed Dmitry Osipenko
2025-10-20 23:39 ` [PATCH v14 07/10] ui/gtk: " Dmitry Osipenko
2025-10-20 23:39 ` [PATCH v14 08/10] docs/system: virtio-gpu: Add link to Mesa VirGL doc Dmitry Osipenko
2025-10-20 23:39 ` [PATCH v14 09/10] docs/system: virtio-gpu: Update Venus link Dmitry Osipenko
2025-10-20 23:39 ` [PATCH v14 10/10] docs/system: virtio-gpu: Document host/guest requirements Dmitry Osipenko
2025-10-20 23:46 ` [PATCH v14 00/10] Support virtio-gpu DRM native context Dmitry Osipenko
2025-10-27 10:56 ` Alex Bennée [this message]
2025-10-28 16:49 ` Dmitry Osipenko
2025-11-04 10:02 ` Pelloux-Prayer, Pierre-Eric
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=871pmozk83.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@gmail.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 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).