From: Dmitry Osipenko <dmitry.osipenko@collabora.com>
To: "Akihiko Odaki" <odaki@rsg.ci.i.u-tokyo.ac.jp>,
	"Huang Rui" <ray.huang@amd.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Pierre-Eric Pelloux-Prayer" <pierre-eric.pelloux-prayer@amd.com>,
	"Michael S . Tsirkin" <mst@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>
Cc: "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: Tue, 21 Oct 2025 02:46:24 +0300	[thread overview]
Message-ID: <9c7842b2-e76b-4bfd-b5c3-945087e9e272@collabora.com> (raw)
In-Reply-To: <20251020233949.506088-1-dmitry.osipenko@collabora.com>
On 10/21/25 02:39, Dmitry Osipenko wrote:
> 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.
> 
> [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(-)
> 
+ Akihiko Odaki using the new email address
-- 
Best regards,
Dmitry
next prev parent reply	other threads:[~2025-10-20 23:47 UTC|newest]
Thread overview: 14+ 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 ` Dmitry Osipenko [this message]
2025-10-27 10:56 ` [PATCH v14 00/10] Support virtio-gpu DRM native context Alex Bennée
2025-10-28 16:49   ` Dmitry Osipenko
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=9c7842b2-e76b-4bfd-b5c3-945087e9e272@collabora.com \
    --to=dmitry.osipenko@collabora.com \
    --cc=Jiqian.Chen@amd.com \
    --cc=alex.bennee@linaro.org \
    --cc=alexander.deucher@amd.com \
    --cc=christian.koenig@amd.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=odaki@rsg.ci.i.u-tokyo.ac.jp \
    --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).