From: Pekka Paalanen <ppaalanen@gmail.com>
To: Zack Rusin <zack@kde.org>
Cc: Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@linux.ie>,
banackm@vmware.com, javierm@redhat.com, krastevm@vmware.com,
dri-devel@lists.freedesktop.org, iforbes@vmware.com,
mombasawalam@vmware.com
Subject: Re: [PATCH v3 8/8] drm: Introduce DRM_CLIENT_CAP_VIRTUALIZED_CURSOR_PLANE
Date: Tue, 27 Jun 2023 11:38:12 +0300 [thread overview]
Message-ID: <20230627113812.15d620c4@eldfell> (raw)
In-Reply-To: <20230627035839.496399-9-zack@kde.org>
[-- Attachment #1: Type: text/plain, Size: 4262 bytes --]
On Mon, 26 Jun 2023 23:58:39 -0400
Zack Rusin <zack@kde.org> wrote:
> From: Zack Rusin <zackr@vmware.com>
>
> Virtualized drivers place additional restrictions on the cursor plane
> which breaks the contract of universal planes. To allow atomic
> modesettings with virtualized drivers the clients need to advertise
> that they're capable of dealing with those extra restrictions.
>
> To do that introduce DRM_CLIENT_CAP_VIRTUALIZED_CURSOR_PLANE which
> lets DRM know that the client is aware of and capable of dealing with
> the extra restrictions on the virtual cursor plane.
>
> Setting this option to true makes DRM expose the cursor plane on
> virtualized drivers. The userspace is expected to set the hotspots
> and handle mouse events on that plane.
>
> Signed-off-by: Zack Rusin <zackr@vmware.com>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: dri-devel@lists.freedesktop.org
> ---
> drivers/gpu/drm/drm_ioctl.c | 9 +++++++++
> include/uapi/drm/drm.h | 26 ++++++++++++++++++++++++++
> 2 files changed, 35 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
> index 8e9afe7af19c..6fd17ff14656 100644
> --- a/drivers/gpu/drm/drm_ioctl.c
> +++ b/drivers/gpu/drm/drm_ioctl.c
> @@ -361,6 +361,15 @@ drm_setclientcap(struct drm_device *dev, void *data, struct drm_file *file_priv)
> return -EINVAL;
> file_priv->writeback_connectors = req->value;
> break;
> + case DRM_CLIENT_CAP_VIRTUALIZED_CURSOR_PLANE:
> + if (!drm_core_check_feature(dev, DRIVER_CURSOR_HOTSPOT))
> + return -EOPNOTSUPP;
> + if (!file_priv->atomic)
> + return -EINVAL;
> + if (req->value > 1)
> + return -EINVAL;
> + file_priv->supports_virtualized_cursor_plane = req->value;
> + break;
> default:
> return -EINVAL;
> }
> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
> index a87bbbbca2d4..057ef2a16d31 100644
> --- a/include/uapi/drm/drm.h
> +++ b/include/uapi/drm/drm.h
> @@ -836,6 +836,32 @@ struct drm_get_cap {
> */
> #define DRM_CLIENT_CAP_WRITEBACK_CONNECTORS 5
>
> +/**
> + * DRM_CLIENT_CAP_VIRTUALIZED_CURSOR_PLANE
> + *
> + * Drivers for para-virtualized hardware (e.g. vmwgfx, qxl, virtio and
> + * virtualbox) have additional restrictions for cursor planes (thus
> + * making cursor planes on those drivers not truly universal,) e.g.
> + * they need cursor planes to act like one would expect from a mouse
> + * cursor and have correctly set hotspot properties.
> + * If this client cap is not set the DRM core will hide cursor plane on
> + * those virtualized drivers because not setting it implies that the
> + * client is not capable of dealing with those extra restictions.
> + * Clients which do set cursor hotspot and treat the cursor plane
> + * like a mouse cursor should set this property.
> + * The client must enable &DRM_CLIENT_CAP_ATOMIC first.
> + *
> + * Setting this property on drivers which do not special case
> + * cursor planes (i.e. non-virtualized drivers) will return
> + * EOPNOTSUPP, which can be used by userspace to gauge
> + * requirements of the hardware/drivers they're running on.
> + *
> + * This capability is always supported for atomic-capable virtualized
> + * drivers starting from kernel version 6.5.
> + */
> +#define DRM_CLIENT_CAP_VIRTUALIZED_CURSOR_PLANE 6
All this sounds really good!
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
The only nitpick I can come up with is maybe naming it to
DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT to distil the essence of the
semantics in the name. I find the word "virtualized" having too many
possible meanings in this context. In any case, the doc makes it very
clear what this is.
I think this feature does not need to be limited to virtualized
drivers. If your display hardware system implements gaze tracking, it
could show a hardware assisted gaze cursor with this.
Thanks,
pq
> +
> +
> /* DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
> struct drm_set_client_cap {
> __u64 capability;
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2023-06-27 8:38 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-27 3:58 [PATCH v3 0/8] Fix cursor planes with virtualized drivers Zack Rusin
2023-06-27 3:58 ` [PATCH v3 1/8] drm: Disable the cursor plane on atomic contexts " Zack Rusin
2023-06-27 3:58 ` Zack Rusin
2023-06-27 8:18 ` Pekka Paalanen
2023-06-27 8:18 ` Pekka Paalanen
2023-06-27 8:18 ` Pekka Paalanen
2023-06-27 8:26 ` Javier Martinez Canillas
2023-06-27 8:26 ` Javier Martinez Canillas
2023-06-27 3:58 ` [PATCH v3 2/8] drm/atomic: Add support for mouse hotspots Zack Rusin
2023-06-27 8:26 ` Pekka Paalanen
2023-06-27 8:56 ` Javier Martinez Canillas
2023-06-27 10:30 ` Pekka Paalanen
2023-06-27 10:54 ` Javier Martinez Canillas
2023-06-27 8:49 ` Javier Martinez Canillas
2023-06-27 3:58 ` [PATCH v3 3/8] drm/vmwgfx: Use the hotspot properties from cursor planes Zack Rusin
2023-06-27 9:49 ` Javier Martinez Canillas
2023-06-27 13:08 ` Martin Krastev (VMware)
2023-06-27 3:58 ` [PATCH v3 4/8] drm/qxl: " Zack Rusin
2023-06-27 9:50 ` Javier Martinez Canillas
2023-06-27 3:58 ` [PATCH v3 5/8] drm/vboxvideo: " Zack Rusin
2023-06-27 10:02 ` Javier Martinez Canillas
2023-06-27 3:58 ` [PATCH v3 6/8] drm/virtio: " Zack Rusin
2023-06-27 10:03 ` Javier Martinez Canillas
2023-06-27 3:58 ` [PATCH v3 7/8] drm: Remove legacy cursor hotspot code Zack Rusin
2023-06-27 10:16 ` Javier Martinez Canillas
2023-06-27 3:58 ` [PATCH v3 8/8] drm: Introduce DRM_CLIENT_CAP_VIRTUALIZED_CURSOR_PLANE Zack Rusin
2023-06-27 8:38 ` Pekka Paalanen [this message]
2023-06-27 10:19 ` Javier Martinez Canillas
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=20230627113812.15d620c4@eldfell \
--to=ppaalanen@gmail.com \
--cc=airlied@linux.ie \
--cc=banackm@vmware.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=iforbes@vmware.com \
--cc=javierm@redhat.com \
--cc=krastevm@vmware.com \
--cc=mombasawalam@vmware.com \
--cc=mripard@kernel.org \
--cc=tzimmermann@suse.de \
--cc=zack@kde.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.