All of lore.kernel.org
 help / color / mirror / Atom feed
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 v3 6/6] virtio-gpu: Support DRM native context
Date: Thu, 31 Oct 2024 10:26:41 +0000	[thread overview]
Message-ID: <87sescin4u.fsf@draig.linaro.org> (raw)
In-Reply-To: <20241024233355.136867-7-dmitry.osipenko@collabora.com> (Dmitry Osipenko's message of "Fri, 25 Oct 2024 02:33:54 +0300")

Dmitry Osipenko <dmitry.osipenko@collabora.com> writes:

> Add support for DRM native contexts to VirtIO-GPU. DRM context is enabled
> using a new virtio-gpu-gl device option "drm=on".

I feel like using "drm" is confusing in this context because drm exists
for the host and guest. What about "native-context" or even
"context=[opengl|vulkan|wayland|native]"?

The GPU command line is already getting complex so now might be the time
to rationalise it.

As an aside can mesa build the intel drivers on non-x86 systems as now I
could potentially pass my native intel context to my emulated aarch64
guests?

>
> Unlike Virgl and Venus contexts that operate on application API level,
> DRM native contexts work on a kernel UAPI level. This lower level results
> in a lightweight context implementations that yield better performance.
>
> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
> ---
>  docs/system/devices/virtio-gpu.rst | 11 +++++++++++
>  hw/display/virtio-gpu-gl.c         |  2 ++
>  hw/display/virtio-gpu-virgl.c      | 22 ++++++++++++++++++++++
>  hw/display/virtio-gpu.c            | 15 +++++++++++++++
>  include/hw/virtio/virtio-gpu.h     |  3 +++
>  5 files changed, 53 insertions(+)
>
> diff --git a/docs/system/devices/virtio-gpu.rst b/docs/system/devices/virtio-gpu.rst
> index b7eb0fc0e727..49a75138f7ef 100644
> --- a/docs/system/devices/virtio-gpu.rst
> +++ b/docs/system/devices/virtio-gpu.rst
> @@ -82,6 +82,17 @@ of virtio-gpu host memory window. This is typically between 256M and 8G.
>  
>  .. _venus: https://gitlab.freedesktop.org/virgl/venus-protocol/
>  
> +DRM native context is supported since release of `virglrenderer`_ v1.0.0
> +using `drm`_ protocol. ``DRM`` virtio-gpu capability set ("capset") requires
> +host blob support (``hostmem`` and ``blob`` fields) and should be enabled
> +using ``drm`` field. The ``hostmem`` field specifies the size of virtio-gpu
> +host memory window. This is typically between 256M and 8G.
> +
> +.. parsed-literal::
> +    -device virtio-gpu-gl,hostmem=8G,blob=on,drm=on
> +
> +.. _drm: https://gitlab.freedesktop.org/virgl/virglrenderer/-/tree/main/src/drm
> +
>  virtio-gpu rutabaga
>  -------------------
>  
> diff --git a/hw/display/virtio-gpu-gl.c b/hw/display/virtio-gpu-gl.c
> index 53d938f23f20..bd0c0692a5c4 100644
> --- a/hw/display/virtio-gpu-gl.c
> +++ b/hw/display/virtio-gpu-gl.c
> @@ -159,6 +159,8 @@ static Property virtio_gpu_gl_properties[] = {
>                      VIRTIO_GPU_FLAG_STATS_ENABLED, false),
>      DEFINE_PROP_BIT("venus", VirtIOGPU, parent_obj.conf.flags,
>                      VIRTIO_GPU_FLAG_VENUS_ENABLED, false),
> +    DEFINE_PROP_BIT("drm", VirtIOGPU, parent_obj.conf.flags,
> +                    VIRTIO_GPU_FLAG_DRM_ENABLED, false),
>      DEFINE_PROP_END_OF_LIST(),
>  };
>  
> diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c
> index 37b40e258398..89ca1878fb7c 100644
> --- a/hw/display/virtio-gpu-virgl.c
> +++ b/hw/display/virtio-gpu-virgl.c
> @@ -1232,6 +1232,19 @@ int virtio_gpu_virgl_init(VirtIOGPU *g)
>      if (virtio_gpu_venus_enabled(g->parent_obj.conf)) {
>          flags |= VIRGL_RENDERER_VENUS | VIRGL_RENDERER_RENDER_SERVER;
>      }
> +    if (virtio_gpu_drm_enabled(g->parent_obj.conf)) {
> +        flags |= VIRGL_RENDERER_DRM;
> +
> +        if (!gl->context_fence_enabled) {
> +            /*
> +             * Virglrenderer skips enabling DRM context support without
> +             * enabled async-fence feature. VirtIO-GPU will initialize
> +             * successfully, but DRM context won't be available in guest.
> +             */
> +            error_report("DRM native context requires EGL display");
> +            return -EINVAL;
> +        }
> +    }
>  #endif
>  
>      ret = virgl_renderer_init(g, flags, &virtio_gpu_3d_cbs);
> @@ -1294,5 +1307,14 @@ GArray *virtio_gpu_virgl_get_capsets(VirtIOGPU *g)
>          }
>      }
>  
> +    if (virtio_gpu_drm_enabled(g->parent_obj.conf)) {
> +        virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_DRM,
> +                                   &capset_max_ver,
> +                                   &capset_max_size);
> +        if (capset_max_size) {
> +            virtio_gpu_virgl_add_capset(capset_ids, VIRTIO_GPU_CAPSET_DRM);
> +        }
> +    }
> +
>      return capset_ids;
>  }
> diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
> index c0570ef8565a..c1acafe6246b 100644
> --- a/hw/display/virtio-gpu.c
> +++ b/hw/display/virtio-gpu.c
> @@ -1492,6 +1492,21 @@ void virtio_gpu_device_realize(DeviceState *qdev, Error **errp)
>  #endif
>      }
>  
> +    if (virtio_gpu_drm_enabled(g->parent_obj.conf)) {
> +#ifdef VIRGL_VERSION_MAJOR
> +    #if VIRGL_VERSION_MAJOR >= 1
> +        if (!virtio_gpu_blob_enabled(g->parent_obj.conf) ||
> +            !virtio_gpu_hostmem_enabled(g->parent_obj.conf)) {
> +            error_setg(errp, "drm requires enabled blob and hostmem options");
> +            return;
> +        }
> +    #else
> +        error_setg(errp, "old virglrenderer, drm unsupported");
> +        return;
> +    #endif
> +#endif
> +    }
> +
>      if (!virtio_gpu_base_device_realize(qdev,
>                                          virtio_gpu_handle_ctrl_cb,
>                                          virtio_gpu_handle_cursor_cb,
> diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h
> index 99cc6286f473..f1799fcb6eee 100644
> --- a/include/hw/virtio/virtio-gpu.h
> +++ b/include/hw/virtio/virtio-gpu.h
> @@ -98,6 +98,7 @@ enum virtio_gpu_base_conf_flags {
>      VIRTIO_GPU_FLAG_CONTEXT_INIT_ENABLED,
>      VIRTIO_GPU_FLAG_RUTABAGA_ENABLED,
>      VIRTIO_GPU_FLAG_VENUS_ENABLED,
> +    VIRTIO_GPU_FLAG_DRM_ENABLED,
>  };
>  
>  #define virtio_gpu_virgl_enabled(_cfg) \
> @@ -118,6 +119,8 @@ enum virtio_gpu_base_conf_flags {
>      (_cfg.hostmem > 0)
>  #define virtio_gpu_venus_enabled(_cfg) \
>      (_cfg.flags & (1 << VIRTIO_GPU_FLAG_VENUS_ENABLED))
> +#define virtio_gpu_drm_enabled(_cfg) \
> +    (_cfg.flags & (1 << VIRTIO_GPU_FLAG_DRM_ENABLED))
>  
>  struct virtio_gpu_base_conf {
>      uint32_t max_outputs;

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro


  reply	other threads:[~2024-10-31 10:27 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-24 23:33 [PATCH v3 0/6] Support virtio-gpu DRM native context Dmitry Osipenko
2024-10-24 23:33 ` [PATCH v3 1/6] ui/sdl2: Restore original context after new context creation Dmitry Osipenko
2024-10-24 23:33 ` [PATCH v3 2/6] ui/sdl2: Implement dpy dmabuf functions Dmitry Osipenko
2024-10-31  7:32   ` Akihiko Odaki
2024-11-09  6:52     ` Dmitry Osipenko
2024-11-09 10:07       ` Akihiko Odaki
2024-11-09 14:39         ` Dmitry Osipenko
2024-10-24 23:33 ` [PATCH v3 3/6] linux-headers: Update to Linux v6.12-rc1 Dmitry Osipenko
2024-10-24 23:33 ` [PATCH v3 4/6] virtio-gpu: Handle virgl fence creation errors Dmitry Osipenko
2024-10-31 10:21   ` Alex Bennée
2024-11-01 17:16     ` Dmitry Osipenko
2024-10-24 23:33 ` [PATCH v3 5/6] virtio-gpu: Support asynchronous fencing Dmitry Osipenko
2024-10-31  7:44   ` Akihiko Odaki
2024-11-01 17:28     ` Dmitry Osipenko
2024-10-24 23:33 ` [PATCH v3 6/6] virtio-gpu: Support DRM native context Dmitry Osipenko
2024-10-31 10:26   ` Alex Bennée [this message]
2024-11-01 17:13     ` Dmitry Osipenko
2024-11-01 19:00       ` Dmitry Osipenko
2024-11-11  5:25     ` Akihiko Odaki
2024-11-13 14:29       ` 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=87sescin4u.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.