* [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-08 4:09 [Intel-gfx] [PATCH 1/2] drm: Introduce plane SIZE_HINTS property Ville Syrjala
@ 2023-02-08 21:10 ` Ville Syrjala
2023-02-09 11:58 ` Pekka Paalanen
2023-02-09 14:16 ` Jonas Ådahl
0 siblings, 2 replies; 23+ messages in thread
From: Ville Syrjala @ 2023-02-08 21:10 UTC (permalink / raw)
To: dri-devel; +Cc: Pekka Paalanen, intel-gfx, Jonas Ådahl
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Add a new immutable plane property by which a plane can advertise
a handful of recommended plane sizes. This would be mostly exposed
by cursor planes as a slightly more capable replacement for
the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
a one size fits all limit for the whole device.
Currently eg. amdgpu/i915/nouveau just advertize the max cursor
size via the cursor size caps. But always using the max sized
cursor can waste a surprising amount of power, so a better
stragey is desirable.
Most other drivers don't specify any cursor size at all, in
which case the ioctl code just claims that 64x64 is a great
choice. Whether that is actually true is debatable.
A poll of various compositor developers informs us that
blindly probing with setcursor/atomic ioctl to determine
suitable cursor sizes is not acceptable, thus the
introduction of the new property to supplant the cursor
size caps. The compositor will now be free to select a
more optimal cursor size from the short list of options.
Note that the reported sizes (either via the property or the
caps) make no claims about things such as plane scaling. So
these things should only really be consulted for simple
"cursor like" use cases.
v2: Try to add some docs
Cc: Simon Ser <contact@emersion.fr>
Cc: Jonas Ådahl <jadahl@redhat.com>
Cc: Daniel Stone <daniel@fooishbar.org>
Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/drm_mode_config.c | 7 +++++
drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
include/drm/drm_mode_config.h | 5 ++++
include/drm/drm_plane.h | 4 +++
include/uapi/drm/drm_mode.h | 11 +++++++
5 files changed, 75 insertions(+)
diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
index 87eb591fe9b5..21860f94a18c 100644
--- a/drivers/gpu/drm/drm_mode_config.c
+++ b/drivers/gpu/drm/drm_mode_config.c
@@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
return -ENOMEM;
dev->mode_config.modifiers_property = prop;
+ prop = drm_property_create(dev,
+ DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
+ "SIZE_HINTS", 0);
+ if (!prop)
+ return -ENOMEM;
+ dev->mode_config.size_hints_property = prop;
+
return 0;
}
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index 24e7998d1731..ae51b1f83755 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -140,6 +140,21 @@
* DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
* various bugs in this area with inconsistencies between the capability
* flag and per-plane properties.
+ *
+ * SIZE_HINTS:
+ * Blob property which contains the set of recommended plane size
+ * which can used for simple "cursor like" use cases (eg. no scaling).
+ * Using these hints frees userspace from extensive probing of
+ * supported plane sizes through atomic/setcursor ioctls.
+ *
+ * For optimal usage userspace should pick the smallest size
+ * that satisfies its own requirements.
+ *
+ * The blob contains an array of struct drm_plane_size_hint.
+ *
+ * Drivers should only attach this property to planes that
+ * support a very limited set of sizes (eg. cursor planes
+ * on typical hardware).
*/
static unsigned int drm_num_planes(struct drm_device *dev)
@@ -1582,3 +1597,36 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
return 0;
}
EXPORT_SYMBOL(drm_plane_create_scaling_filter_property);
+
+/**
+ * drm_plane_add_size_hint_property - create a size hint property
+ *
+ * @plane: drm plane
+ * @hints: size hints
+ * @num_hints: number of size hints
+ *
+ * Create a size hints property for the plane.
+ *
+ * RETURNS:
+ * Zero for success or -errno
+ */
+int drm_plane_add_size_hints_property(struct drm_plane *plane,
+ const struct drm_plane_size_hint *hints,
+ int num_hints)
+{
+ struct drm_device *dev = plane->dev;
+ struct drm_mode_config *config = &dev->mode_config;
+ struct drm_property_blob *blob;
+
+ blob = drm_property_create_blob(dev,
+ array_size(sizeof(hints[0]), num_hints),
+ hints);
+ if (IS_ERR(blob))
+ return PTR_ERR(blob);
+
+ drm_object_attach_property(&plane->base, config->size_hints_property,
+ blob->base.id);
+
+ return 0;
+}
+EXPORT_SYMBOL(drm_plane_add_size_hints_property);
diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
index e5b053001d22..5bc8aed9b445 100644
--- a/include/drm/drm_mode_config.h
+++ b/include/drm/drm_mode_config.h
@@ -949,6 +949,11 @@ struct drm_mode_config {
*/
struct drm_property *modifiers_property;
+ /**
+ * @size_hints_propertty: Plane SIZE_HINTS property.
+ */
+ struct drm_property *size_hints_property;
+
/* cursor size */
uint32_t cursor_width, cursor_height;
diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
index 51291983ea44..1997d7d64b69 100644
--- a/include/drm/drm_plane.h
+++ b/include/drm/drm_plane.h
@@ -32,6 +32,7 @@
#include <drm/drm_util.h>
struct drm_crtc;
+struct drm_plane_size_hint;
struct drm_printer;
struct drm_modeset_acquire_ctx;
@@ -945,5 +946,8 @@ drm_plane_get_damage_clips(const struct drm_plane_state *state);
int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
unsigned int supported_filters);
+int drm_plane_add_size_hints_property(struct drm_plane *plane,
+ const struct drm_plane_size_hint *hints,
+ int num_hints);
#endif
diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
index 46becedf5b2f..9d7c5967264f 100644
--- a/include/uapi/drm/drm_mode.h
+++ b/include/uapi/drm/drm_mode.h
@@ -849,6 +849,17 @@ struct drm_color_lut {
__u16 reserved;
};
+/**
+ * struct drm_plane_size_hint - Plane size hints
+ *
+ * The plane SIZE_HINTS property blob contains an
+ * array of struct drm_plane_size_hint.
+ */
+struct drm_plane_size_hint {
+ __u16 width;
+ __u16 height;
+};
+
/**
* struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
*
--
2.39.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-08 21:10 ` [PATCH v2 " Ville Syrjala
@ 2023-02-09 11:58 ` Pekka Paalanen
2023-02-09 13:10 ` Ville Syrjälä
2023-02-09 14:16 ` Jonas Ådahl
1 sibling, 1 reply; 23+ messages in thread
From: Pekka Paalanen @ 2023-02-09 11:58 UTC (permalink / raw)
To: Ville Syrjala; +Cc: intel-gfx, Jonas Ådahl, dri-devel
On Wed, 8 Feb 2023 23:10:16 +0200
Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Add a new immutable plane property by which a plane can advertise
> a handful of recommended plane sizes. This would be mostly exposed
> by cursor planes as a slightly more capable replacement for
> the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> a one size fits all limit for the whole device.
>
> Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> size via the cursor size caps. But always using the max sized
> cursor can waste a surprising amount of power, so a better
> stragey is desirable.
>
> Most other drivers don't specify any cursor size at all, in
> which case the ioctl code just claims that 64x64 is a great
> choice. Whether that is actually true is debatable.
>
> A poll of various compositor developers informs us that
> blindly probing with setcursor/atomic ioctl to determine
> suitable cursor sizes is not acceptable, thus the
> introduction of the new property to supplant the cursor
> size caps. The compositor will now be free to select a
> more optimal cursor size from the short list of options.
>
> Note that the reported sizes (either via the property or the
> caps) make no claims about things such as plane scaling. So
> these things should only really be consulted for simple
> "cursor like" use cases.
>
> v2: Try to add some docs
>
> Cc: Simon Ser <contact@emersion.fr>
> Cc: Jonas Ådahl <jadahl@redhat.com>
> Cc: Daniel Stone <daniel@fooishbar.org>
> Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
> Acked-by: Harry Wentland <harry.wentland@amd.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/drm_mode_config.c | 7 +++++
> drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
> include/drm/drm_mode_config.h | 5 ++++
> include/drm/drm_plane.h | 4 +++
> include/uapi/drm/drm_mode.h | 11 +++++++
> 5 files changed, 75 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> index 87eb591fe9b5..21860f94a18c 100644
> --- a/drivers/gpu/drm/drm_mode_config.c
> +++ b/drivers/gpu/drm/drm_mode_config.c
> @@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> return -ENOMEM;
> dev->mode_config.modifiers_property = prop;
>
> + prop = drm_property_create(dev,
> + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> + "SIZE_HINTS", 0);
> + if (!prop)
> + return -ENOMEM;
> + dev->mode_config.size_hints_property = prop;
> +
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> index 24e7998d1731..ae51b1f83755 100644
> --- a/drivers/gpu/drm/drm_plane.c
> +++ b/drivers/gpu/drm/drm_plane.c
> @@ -140,6 +140,21 @@
> * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> * various bugs in this area with inconsistencies between the capability
> * flag and per-plane properties.
> + *
> + * SIZE_HINTS:
> + * Blob property which contains the set of recommended plane size
> + * which can used for simple "cursor like" use cases (eg. no scaling).
> + * Using these hints frees userspace from extensive probing of
> + * supported plane sizes through atomic/setcursor ioctls.
> + *
> + * For optimal usage userspace should pick the smallest size
> + * that satisfies its own requirements.
> + *
> + * The blob contains an array of struct drm_plane_size_hint.
> + *
> + * Drivers should only attach this property to planes that
> + * support a very limited set of sizes (eg. cursor planes
> + * on typical hardware).
Hi Ville,
sounds good. Maybe a minor nit about "typical hardware". Would e.g.
"legacy PC hardware" be more accurate?
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
but let's see if that other option (allocate cap size, make FB with
image size, guarantee zero padding) from my other email would be viable
too.
Thanks,
pq
> */
>
> static unsigned int drm_num_planes(struct drm_device *dev)
> @@ -1582,3 +1597,36 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> return 0;
> }
> EXPORT_SYMBOL(drm_plane_create_scaling_filter_property);
> +
> +/**
> + * drm_plane_add_size_hint_property - create a size hint property
> + *
> + * @plane: drm plane
> + * @hints: size hints
> + * @num_hints: number of size hints
> + *
> + * Create a size hints property for the plane.
> + *
> + * RETURNS:
> + * Zero for success or -errno
> + */
> +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> + const struct drm_plane_size_hint *hints,
> + int num_hints)
> +{
> + struct drm_device *dev = plane->dev;
> + struct drm_mode_config *config = &dev->mode_config;
> + struct drm_property_blob *blob;
> +
> + blob = drm_property_create_blob(dev,
> + array_size(sizeof(hints[0]), num_hints),
> + hints);
> + if (IS_ERR(blob))
> + return PTR_ERR(blob);
> +
> + drm_object_attach_property(&plane->base, config->size_hints_property,
> + blob->base.id);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(drm_plane_add_size_hints_property);
> diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
> index e5b053001d22..5bc8aed9b445 100644
> --- a/include/drm/drm_mode_config.h
> +++ b/include/drm/drm_mode_config.h
> @@ -949,6 +949,11 @@ struct drm_mode_config {
> */
> struct drm_property *modifiers_property;
>
> + /**
> + * @size_hints_propertty: Plane SIZE_HINTS property.
> + */
> + struct drm_property *size_hints_property;
> +
> /* cursor size */
> uint32_t cursor_width, cursor_height;
>
> diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> index 51291983ea44..1997d7d64b69 100644
> --- a/include/drm/drm_plane.h
> +++ b/include/drm/drm_plane.h
> @@ -32,6 +32,7 @@
> #include <drm/drm_util.h>
>
> struct drm_crtc;
> +struct drm_plane_size_hint;
> struct drm_printer;
> struct drm_modeset_acquire_ctx;
>
> @@ -945,5 +946,8 @@ drm_plane_get_damage_clips(const struct drm_plane_state *state);
>
> int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> unsigned int supported_filters);
> +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> + const struct drm_plane_size_hint *hints,
> + int num_hints);
>
> #endif
> diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> index 46becedf5b2f..9d7c5967264f 100644
> --- a/include/uapi/drm/drm_mode.h
> +++ b/include/uapi/drm/drm_mode.h
> @@ -849,6 +849,17 @@ struct drm_color_lut {
> __u16 reserved;
> };
>
> +/**
> + * struct drm_plane_size_hint - Plane size hints
> + *
> + * The plane SIZE_HINTS property blob contains an
> + * array of struct drm_plane_size_hint.
> + */
> +struct drm_plane_size_hint {
> + __u16 width;
> + __u16 height;
> +};
> +
> /**
> * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
> *
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-09 11:58 ` Pekka Paalanen
@ 2023-02-09 13:10 ` Ville Syrjälä
2023-02-10 9:44 ` Pekka Paalanen
0 siblings, 1 reply; 23+ messages in thread
From: Ville Syrjälä @ 2023-02-09 13:10 UTC (permalink / raw)
To: Pekka Paalanen; +Cc: intel-gfx, Jonas Ådahl, dri-devel
On Thu, Feb 09, 2023 at 01:58:55PM +0200, Pekka Paalanen wrote:
> On Wed, 8 Feb 2023 23:10:16 +0200
> Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
>
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Add a new immutable plane property by which a plane can advertise
> > a handful of recommended plane sizes. This would be mostly exposed
> > by cursor planes as a slightly more capable replacement for
> > the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> > a one size fits all limit for the whole device.
> >
> > Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> > size via the cursor size caps. But always using the max sized
> > cursor can waste a surprising amount of power, so a better
> > stragey is desirable.
> >
> > Most other drivers don't specify any cursor size at all, in
> > which case the ioctl code just claims that 64x64 is a great
> > choice. Whether that is actually true is debatable.
> >
> > A poll of various compositor developers informs us that
> > blindly probing with setcursor/atomic ioctl to determine
> > suitable cursor sizes is not acceptable, thus the
> > introduction of the new property to supplant the cursor
> > size caps. The compositor will now be free to select a
> > more optimal cursor size from the short list of options.
> >
> > Note that the reported sizes (either via the property or the
> > caps) make no claims about things such as plane scaling. So
> > these things should only really be consulted for simple
> > "cursor like" use cases.
> >
> > v2: Try to add some docs
> >
> > Cc: Simon Ser <contact@emersion.fr>
> > Cc: Jonas Ådahl <jadahl@redhat.com>
> > Cc: Daniel Stone <daniel@fooishbar.org>
> > Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
> > Acked-by: Harry Wentland <harry.wentland@amd.com>
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> > drivers/gpu/drm/drm_mode_config.c | 7 +++++
> > drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
> > include/drm/drm_mode_config.h | 5 ++++
> > include/drm/drm_plane.h | 4 +++
> > include/uapi/drm/drm_mode.h | 11 +++++++
> > 5 files changed, 75 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> > index 87eb591fe9b5..21860f94a18c 100644
> > --- a/drivers/gpu/drm/drm_mode_config.c
> > +++ b/drivers/gpu/drm/drm_mode_config.c
> > @@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> > return -ENOMEM;
> > dev->mode_config.modifiers_property = prop;
> >
> > + prop = drm_property_create(dev,
> > + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> > + "SIZE_HINTS", 0);
> > + if (!prop)
> > + return -ENOMEM;
> > + dev->mode_config.size_hints_property = prop;
> > +
> > return 0;
> > }
> >
> > diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> > index 24e7998d1731..ae51b1f83755 100644
> > --- a/drivers/gpu/drm/drm_plane.c
> > +++ b/drivers/gpu/drm/drm_plane.c
> > @@ -140,6 +140,21 @@
> > * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> > * various bugs in this area with inconsistencies between the capability
> > * flag and per-plane properties.
> > + *
> > + * SIZE_HINTS:
> > + * Blob property which contains the set of recommended plane size
> > + * which can used for simple "cursor like" use cases (eg. no scaling).
> > + * Using these hints frees userspace from extensive probing of
> > + * supported plane sizes through atomic/setcursor ioctls.
> > + *
> > + * For optimal usage userspace should pick the smallest size
> > + * that satisfies its own requirements.
> > + *
> > + * The blob contains an array of struct drm_plane_size_hint.
> > + *
> > + * Drivers should only attach this property to planes that
> > + * support a very limited set of sizes (eg. cursor planes
> > + * on typical hardware).
>
> Hi Ville,
>
> sounds good. Maybe a minor nit about "typical hardware". Would e.g.
> "legacy PC hardware" be more accurate?
"legacy" doesn't feel quite right for current and upcoming hardware.
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-08 21:10 ` [PATCH v2 " Ville Syrjala
2023-02-09 11:58 ` Pekka Paalanen
@ 2023-02-09 14:16 ` Jonas Ådahl
2023-02-14 9:25 ` Ville Syrjälä
1 sibling, 1 reply; 23+ messages in thread
From: Jonas Ådahl @ 2023-02-09 14:16 UTC (permalink / raw)
To: Ville Syrjala; +Cc: Pekka Paalanen, intel-gfx, dri-devel
On Wed, Feb 08, 2023 at 11:10:16PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Add a new immutable plane property by which a plane can advertise
> a handful of recommended plane sizes. This would be mostly exposed
> by cursor planes as a slightly more capable replacement for
> the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> a one size fits all limit for the whole device.
>
> Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> size via the cursor size caps. But always using the max sized
> cursor can waste a surprising amount of power, so a better
> stragey is desirable.
>
> Most other drivers don't specify any cursor size at all, in
> which case the ioctl code just claims that 64x64 is a great
> choice. Whether that is actually true is debatable.
>
> A poll of various compositor developers informs us that
> blindly probing with setcursor/atomic ioctl to determine
> suitable cursor sizes is not acceptable, thus the
> introduction of the new property to supplant the cursor
> size caps. The compositor will now be free to select a
> more optimal cursor size from the short list of options.
>
> Note that the reported sizes (either via the property or the
> caps) make no claims about things such as plane scaling. So
> these things should only really be consulted for simple
> "cursor like" use cases.
>
> v2: Try to add some docs
>
> Cc: Simon Ser <contact@emersion.fr>
> Cc: Jonas Ådahl <jadahl@redhat.com>
> Cc: Daniel Stone <daniel@fooishbar.org>
> Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
> Acked-by: Harry Wentland <harry.wentland@amd.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/drm_mode_config.c | 7 +++++
> drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
> include/drm/drm_mode_config.h | 5 ++++
> include/drm/drm_plane.h | 4 +++
> include/uapi/drm/drm_mode.h | 11 +++++++
> 5 files changed, 75 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> index 87eb591fe9b5..21860f94a18c 100644
> --- a/drivers/gpu/drm/drm_mode_config.c
> +++ b/drivers/gpu/drm/drm_mode_config.c
> @@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> return -ENOMEM;
> dev->mode_config.modifiers_property = prop;
>
> + prop = drm_property_create(dev,
> + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> + "SIZE_HINTS", 0);
> + if (!prop)
> + return -ENOMEM;
> + dev->mode_config.size_hints_property = prop;
> +
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> index 24e7998d1731..ae51b1f83755 100644
> --- a/drivers/gpu/drm/drm_plane.c
> +++ b/drivers/gpu/drm/drm_plane.c
> @@ -140,6 +140,21 @@
> * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> * various bugs in this area with inconsistencies between the capability
> * flag and per-plane properties.
> + *
> + * SIZE_HINTS:
> + * Blob property which contains the set of recommended plane size
> + * which can used for simple "cursor like" use cases (eg. no scaling).
> + * Using these hints frees userspace from extensive probing of
> + * supported plane sizes through atomic/setcursor ioctls.
> + *
> + * For optimal usage userspace should pick the smallest size
> + * that satisfies its own requirements.
> + *
> + * The blob contains an array of struct drm_plane_size_hint.
> + *
> + * Drivers should only attach this property to planes that
> + * support a very limited set of sizes (eg. cursor planes
> + * on typical hardware).
This is a bit awkward since problematic drivers would only expose
this property if they are new enough.
A way to avoid this is for all new drivers expose this property, but
special case the size 0x0 as "everything below the max limit goes". Then
userspace can do (ignoring the missing cap fallback).
if (has(SIZE_HINTS))
size = figure_out_size(SIZE_HINTS,
DRM_CAP_CURSOR_WIDTH,
DRM_CAP_CURSOR_HEIGHT,
preferred_size);
else
size = DRM_CAP_CURSOR_WIDTH x DRM_CAP_CURSOR_WIDTH;
With `figure_out_size()` knowing how to deal with 0x0 in the size hints
to use `preferred_size` directly.
Jonas
> */
>
> static unsigned int drm_num_planes(struct drm_device *dev)
> @@ -1582,3 +1597,36 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> return 0;
> }
> EXPORT_SYMBOL(drm_plane_create_scaling_filter_property);
> +
> +/**
> + * drm_plane_add_size_hint_property - create a size hint property
> + *
> + * @plane: drm plane
> + * @hints: size hints
> + * @num_hints: number of size hints
> + *
> + * Create a size hints property for the plane.
> + *
> + * RETURNS:
> + * Zero for success or -errno
> + */
> +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> + const struct drm_plane_size_hint *hints,
> + int num_hints)
> +{
> + struct drm_device *dev = plane->dev;
> + struct drm_mode_config *config = &dev->mode_config;
> + struct drm_property_blob *blob;
> +
> + blob = drm_property_create_blob(dev,
> + array_size(sizeof(hints[0]), num_hints),
> + hints);
> + if (IS_ERR(blob))
> + return PTR_ERR(blob);
> +
> + drm_object_attach_property(&plane->base, config->size_hints_property,
> + blob->base.id);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(drm_plane_add_size_hints_property);
> diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
> index e5b053001d22..5bc8aed9b445 100644
> --- a/include/drm/drm_mode_config.h
> +++ b/include/drm/drm_mode_config.h
> @@ -949,6 +949,11 @@ struct drm_mode_config {
> */
> struct drm_property *modifiers_property;
>
> + /**
> + * @size_hints_propertty: Plane SIZE_HINTS property.
> + */
> + struct drm_property *size_hints_property;
> +
> /* cursor size */
> uint32_t cursor_width, cursor_height;
>
> diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> index 51291983ea44..1997d7d64b69 100644
> --- a/include/drm/drm_plane.h
> +++ b/include/drm/drm_plane.h
> @@ -32,6 +32,7 @@
> #include <drm/drm_util.h>
>
> struct drm_crtc;
> +struct drm_plane_size_hint;
> struct drm_printer;
> struct drm_modeset_acquire_ctx;
>
> @@ -945,5 +946,8 @@ drm_plane_get_damage_clips(const struct drm_plane_state *state);
>
> int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> unsigned int supported_filters);
> +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> + const struct drm_plane_size_hint *hints,
> + int num_hints);
>
> #endif
> diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> index 46becedf5b2f..9d7c5967264f 100644
> --- a/include/uapi/drm/drm_mode.h
> +++ b/include/uapi/drm/drm_mode.h
> @@ -849,6 +849,17 @@ struct drm_color_lut {
> __u16 reserved;
> };
>
> +/**
> + * struct drm_plane_size_hint - Plane size hints
> + *
> + * The plane SIZE_HINTS property blob contains an
> + * array of struct drm_plane_size_hint.
> + */
> +struct drm_plane_size_hint {
> + __u16 width;
> + __u16 height;
> +};
> +
> /**
> * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
> *
> --
> 2.39.1
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-09 13:10 ` Ville Syrjälä
@ 2023-02-10 9:44 ` Pekka Paalanen
0 siblings, 0 replies; 23+ messages in thread
From: Pekka Paalanen @ 2023-02-10 9:44 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx, Jonas Ådahl, dri-devel
[-- Attachment #1: Type: text/plain, Size: 4825 bytes --]
On Thu, 9 Feb 2023 15:10:38 +0200
Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Thu, Feb 09, 2023 at 01:58:55PM +0200, Pekka Paalanen wrote:
> > On Wed, 8 Feb 2023 23:10:16 +0200
> > Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> >
> > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > >
> > > Add a new immutable plane property by which a plane can advertise
> > > a handful of recommended plane sizes. This would be mostly exposed
> > > by cursor planes as a slightly more capable replacement for
> > > the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> > > a one size fits all limit for the whole device.
> > >
> > > Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> > > size via the cursor size caps. But always using the max sized
> > > cursor can waste a surprising amount of power, so a better
> > > stragey is desirable.
> > >
> > > Most other drivers don't specify any cursor size at all, in
> > > which case the ioctl code just claims that 64x64 is a great
> > > choice. Whether that is actually true is debatable.
> > >
> > > A poll of various compositor developers informs us that
> > > blindly probing with setcursor/atomic ioctl to determine
> > > suitable cursor sizes is not acceptable, thus the
> > > introduction of the new property to supplant the cursor
> > > size caps. The compositor will now be free to select a
> > > more optimal cursor size from the short list of options.
> > >
> > > Note that the reported sizes (either via the property or the
> > > caps) make no claims about things such as plane scaling. So
> > > these things should only really be consulted for simple
> > > "cursor like" use cases.
> > >
> > > v2: Try to add some docs
> > >
> > > Cc: Simon Ser <contact@emersion.fr>
> > > Cc: Jonas Ådahl <jadahl@redhat.com>
> > > Cc: Daniel Stone <daniel@fooishbar.org>
> > > Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
> > > Acked-by: Harry Wentland <harry.wentland@amd.com>
> > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > ---
> > > drivers/gpu/drm/drm_mode_config.c | 7 +++++
> > > drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
> > > include/drm/drm_mode_config.h | 5 ++++
> > > include/drm/drm_plane.h | 4 +++
> > > include/uapi/drm/drm_mode.h | 11 +++++++
> > > 5 files changed, 75 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> > > index 87eb591fe9b5..21860f94a18c 100644
> > > --- a/drivers/gpu/drm/drm_mode_config.c
> > > +++ b/drivers/gpu/drm/drm_mode_config.c
> > > @@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> > > return -ENOMEM;
> > > dev->mode_config.modifiers_property = prop;
> > >
> > > + prop = drm_property_create(dev,
> > > + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> > > + "SIZE_HINTS", 0);
> > > + if (!prop)
> > > + return -ENOMEM;
> > > + dev->mode_config.size_hints_property = prop;
> > > +
> > > return 0;
> > > }
> > >
> > > diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> > > index 24e7998d1731..ae51b1f83755 100644
> > > --- a/drivers/gpu/drm/drm_plane.c
> > > +++ b/drivers/gpu/drm/drm_plane.c
> > > @@ -140,6 +140,21 @@
> > > * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> > > * various bugs in this area with inconsistencies between the capability
> > > * flag and per-plane properties.
> > > + *
> > > + * SIZE_HINTS:
> > > + * Blob property which contains the set of recommended plane size
> > > + * which can used for simple "cursor like" use cases (eg. no scaling).
> > > + * Using these hints frees userspace from extensive probing of
> > > + * supported plane sizes through atomic/setcursor ioctls.
> > > + *
> > > + * For optimal usage userspace should pick the smallest size
> > > + * that satisfies its own requirements.
> > > + *
> > > + * The blob contains an array of struct drm_plane_size_hint.
> > > + *
> > > + * Drivers should only attach this property to planes that
> > > + * support a very limited set of sizes (eg. cursor planes
> > > + * on typical hardware).
> >
> > Hi Ville,
> >
> > sounds good. Maybe a minor nit about "typical hardware". Would e.g.
> > "legacy PC hardware" be more accurate?
>
> "legacy" doesn't feel quite right for current and upcoming hardware.
It's an example, not everything. Although, I didn't expect current and
upcoming hardware to keep such limitations either but to move towards
universal rather than specialized planes.
Maybe just drop the whole "(eg. ...)"?
Thanks,
pq
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-09 14:16 ` Jonas Ådahl
@ 2023-02-14 9:25 ` Ville Syrjälä
2023-02-14 9:54 ` Jonas Ådahl
0 siblings, 1 reply; 23+ messages in thread
From: Ville Syrjälä @ 2023-02-14 9:25 UTC (permalink / raw)
To: Jonas Ådahl; +Cc: Pekka Paalanen, intel-gfx, dri-devel
On Thu, Feb 09, 2023 at 03:16:23PM +0100, Jonas Ådahl wrote:
> On Wed, Feb 08, 2023 at 11:10:16PM +0200, Ville Syrjala wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Add a new immutable plane property by which a plane can advertise
> > a handful of recommended plane sizes. This would be mostly exposed
> > by cursor planes as a slightly more capable replacement for
> > the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> > a one size fits all limit for the whole device.
> >
> > Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> > size via the cursor size caps. But always using the max sized
> > cursor can waste a surprising amount of power, so a better
> > stragey is desirable.
> >
> > Most other drivers don't specify any cursor size at all, in
> > which case the ioctl code just claims that 64x64 is a great
> > choice. Whether that is actually true is debatable.
> >
> > A poll of various compositor developers informs us that
> > blindly probing with setcursor/atomic ioctl to determine
> > suitable cursor sizes is not acceptable, thus the
> > introduction of the new property to supplant the cursor
> > size caps. The compositor will now be free to select a
> > more optimal cursor size from the short list of options.
> >
> > Note that the reported sizes (either via the property or the
> > caps) make no claims about things such as plane scaling. So
> > these things should only really be consulted for simple
> > "cursor like" use cases.
> >
> > v2: Try to add some docs
> >
> > Cc: Simon Ser <contact@emersion.fr>
> > Cc: Jonas Ådahl <jadahl@redhat.com>
> > Cc: Daniel Stone <daniel@fooishbar.org>
> > Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
> > Acked-by: Harry Wentland <harry.wentland@amd.com>
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> > drivers/gpu/drm/drm_mode_config.c | 7 +++++
> > drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
> > include/drm/drm_mode_config.h | 5 ++++
> > include/drm/drm_plane.h | 4 +++
> > include/uapi/drm/drm_mode.h | 11 +++++++
> > 5 files changed, 75 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> > index 87eb591fe9b5..21860f94a18c 100644
> > --- a/drivers/gpu/drm/drm_mode_config.c
> > +++ b/drivers/gpu/drm/drm_mode_config.c
> > @@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> > return -ENOMEM;
> > dev->mode_config.modifiers_property = prop;
> >
> > + prop = drm_property_create(dev,
> > + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> > + "SIZE_HINTS", 0);
> > + if (!prop)
> > + return -ENOMEM;
> > + dev->mode_config.size_hints_property = prop;
> > +
> > return 0;
> > }
> >
> > diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> > index 24e7998d1731..ae51b1f83755 100644
> > --- a/drivers/gpu/drm/drm_plane.c
> > +++ b/drivers/gpu/drm/drm_plane.c
> > @@ -140,6 +140,21 @@
> > * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> > * various bugs in this area with inconsistencies between the capability
> > * flag and per-plane properties.
> > + *
> > + * SIZE_HINTS:
> > + * Blob property which contains the set of recommended plane size
> > + * which can used for simple "cursor like" use cases (eg. no scaling).
> > + * Using these hints frees userspace from extensive probing of
> > + * supported plane sizes through atomic/setcursor ioctls.
> > + *
> > + * For optimal usage userspace should pick the smallest size
> > + * that satisfies its own requirements.
> > + *
> > + * The blob contains an array of struct drm_plane_size_hint.
> > + *
> > + * Drivers should only attach this property to planes that
> > + * support a very limited set of sizes (eg. cursor planes
> > + * on typical hardware).
>
> This is a bit awkward since problematic drivers would only expose
> this property if they are new enough.
>
> A way to avoid this is for all new drivers expose this property, but
> special case the size 0x0 as "everything below the max limit goes". Then
> userspace can do (ignoring the missing cap fallback).
I don't think there are any drivers that need that.
So I'm thinking we can just ignore that for now.
>
> if (has(SIZE_HINTS))
> size = figure_out_size(SIZE_HINTS,
> DRM_CAP_CURSOR_WIDTH,
> DRM_CAP_CURSOR_HEIGHT,
> preferred_size);
> else
> size = DRM_CAP_CURSOR_WIDTH x DRM_CAP_CURSOR_WIDTH;
>
> With `figure_out_size()` knowing how to deal with 0x0 in the size hints
> to use `preferred_size` directly.
>
>
> Jonas
>
> > */
> >
> > static unsigned int drm_num_planes(struct drm_device *dev)
> > @@ -1582,3 +1597,36 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> > return 0;
> > }
> > EXPORT_SYMBOL(drm_plane_create_scaling_filter_property);
> > +
> > +/**
> > + * drm_plane_add_size_hint_property - create a size hint property
> > + *
> > + * @plane: drm plane
> > + * @hints: size hints
> > + * @num_hints: number of size hints
> > + *
> > + * Create a size hints property for the plane.
> > + *
> > + * RETURNS:
> > + * Zero for success or -errno
> > + */
> > +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> > + const struct drm_plane_size_hint *hints,
> > + int num_hints)
> > +{
> > + struct drm_device *dev = plane->dev;
> > + struct drm_mode_config *config = &dev->mode_config;
> > + struct drm_property_blob *blob;
> > +
> > + blob = drm_property_create_blob(dev,
> > + array_size(sizeof(hints[0]), num_hints),
> > + hints);
> > + if (IS_ERR(blob))
> > + return PTR_ERR(blob);
> > +
> > + drm_object_attach_property(&plane->base, config->size_hints_property,
> > + blob->base.id);
> > +
> > + return 0;
> > +}
> > +EXPORT_SYMBOL(drm_plane_add_size_hints_property);
> > diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
> > index e5b053001d22..5bc8aed9b445 100644
> > --- a/include/drm/drm_mode_config.h
> > +++ b/include/drm/drm_mode_config.h
> > @@ -949,6 +949,11 @@ struct drm_mode_config {
> > */
> > struct drm_property *modifiers_property;
> >
> > + /**
> > + * @size_hints_propertty: Plane SIZE_HINTS property.
> > + */
> > + struct drm_property *size_hints_property;
> > +
> > /* cursor size */
> > uint32_t cursor_width, cursor_height;
> >
> > diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> > index 51291983ea44..1997d7d64b69 100644
> > --- a/include/drm/drm_plane.h
> > +++ b/include/drm/drm_plane.h
> > @@ -32,6 +32,7 @@
> > #include <drm/drm_util.h>
> >
> > struct drm_crtc;
> > +struct drm_plane_size_hint;
> > struct drm_printer;
> > struct drm_modeset_acquire_ctx;
> >
> > @@ -945,5 +946,8 @@ drm_plane_get_damage_clips(const struct drm_plane_state *state);
> >
> > int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> > unsigned int supported_filters);
> > +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> > + const struct drm_plane_size_hint *hints,
> > + int num_hints);
> >
> > #endif
> > diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> > index 46becedf5b2f..9d7c5967264f 100644
> > --- a/include/uapi/drm/drm_mode.h
> > +++ b/include/uapi/drm/drm_mode.h
> > @@ -849,6 +849,17 @@ struct drm_color_lut {
> > __u16 reserved;
> > };
> >
> > +/**
> > + * struct drm_plane_size_hint - Plane size hints
> > + *
> > + * The plane SIZE_HINTS property blob contains an
> > + * array of struct drm_plane_size_hint.
> > + */
> > +struct drm_plane_size_hint {
> > + __u16 width;
> > + __u16 height;
> > +};
> > +
> > /**
> > * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
> > *
> > --
> > 2.39.1
> >
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-14 9:25 ` Ville Syrjälä
@ 2023-02-14 9:54 ` Jonas Ådahl
2023-02-14 10:28 ` Ville Syrjälä
0 siblings, 1 reply; 23+ messages in thread
From: Jonas Ådahl @ 2023-02-14 9:54 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: Pekka Paalanen, intel-gfx, dri-devel
On Tue, Feb 14, 2023 at 11:25:56AM +0200, Ville Syrjälä wrote:
> On Thu, Feb 09, 2023 at 03:16:23PM +0100, Jonas Ådahl wrote:
> > On Wed, Feb 08, 2023 at 11:10:16PM +0200, Ville Syrjala wrote:
> > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > >
> > > Add a new immutable plane property by which a plane can advertise
> > > a handful of recommended plane sizes. This would be mostly exposed
> > > by cursor planes as a slightly more capable replacement for
> > > the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> > > a one size fits all limit for the whole device.
> > >
> > > Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> > > size via the cursor size caps. But always using the max sized
> > > cursor can waste a surprising amount of power, so a better
> > > stragey is desirable.
> > >
> > > Most other drivers don't specify any cursor size at all, in
> > > which case the ioctl code just claims that 64x64 is a great
> > > choice. Whether that is actually true is debatable.
> > >
> > > A poll of various compositor developers informs us that
> > > blindly probing with setcursor/atomic ioctl to determine
> > > suitable cursor sizes is not acceptable, thus the
> > > introduction of the new property to supplant the cursor
> > > size caps. The compositor will now be free to select a
> > > more optimal cursor size from the short list of options.
> > >
> > > Note that the reported sizes (either via the property or the
> > > caps) make no claims about things such as plane scaling. So
> > > these things should only really be consulted for simple
> > > "cursor like" use cases.
> > >
> > > v2: Try to add some docs
> > >
> > > Cc: Simon Ser <contact@emersion.fr>
> > > Cc: Jonas Ådahl <jadahl@redhat.com>
> > > Cc: Daniel Stone <daniel@fooishbar.org>
> > > Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
> > > Acked-by: Harry Wentland <harry.wentland@amd.com>
> > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > ---
> > > drivers/gpu/drm/drm_mode_config.c | 7 +++++
> > > drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
> > > include/drm/drm_mode_config.h | 5 ++++
> > > include/drm/drm_plane.h | 4 +++
> > > include/uapi/drm/drm_mode.h | 11 +++++++
> > > 5 files changed, 75 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> > > index 87eb591fe9b5..21860f94a18c 100644
> > > --- a/drivers/gpu/drm/drm_mode_config.c
> > > +++ b/drivers/gpu/drm/drm_mode_config.c
> > > @@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> > > return -ENOMEM;
> > > dev->mode_config.modifiers_property = prop;
> > >
> > > + prop = drm_property_create(dev,
> > > + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> > > + "SIZE_HINTS", 0);
> > > + if (!prop)
> > > + return -ENOMEM;
> > > + dev->mode_config.size_hints_property = prop;
> > > +
> > > return 0;
> > > }
> > >
> > > diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> > > index 24e7998d1731..ae51b1f83755 100644
> > > --- a/drivers/gpu/drm/drm_plane.c
> > > +++ b/drivers/gpu/drm/drm_plane.c
> > > @@ -140,6 +140,21 @@
> > > * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> > > * various bugs in this area with inconsistencies between the capability
> > > * flag and per-plane properties.
> > > + *
> > > + * SIZE_HINTS:
> > > + * Blob property which contains the set of recommended plane size
> > > + * which can used for simple "cursor like" use cases (eg. no scaling).
> > > + * Using these hints frees userspace from extensive probing of
> > > + * supported plane sizes through atomic/setcursor ioctls.
> > > + *
> > > + * For optimal usage userspace should pick the smallest size
> > > + * that satisfies its own requirements.
> > > + *
> > > + * The blob contains an array of struct drm_plane_size_hint.
> > > + *
> > > + * Drivers should only attach this property to planes that
> > > + * support a very limited set of sizes (eg. cursor planes
> > > + * on typical hardware).
> >
> > This is a bit awkward since problematic drivers would only expose
> > this property if they are new enough.
> >
> > A way to avoid this is for all new drivers expose this property, but
> > special case the size 0x0 as "everything below the max limit goes". Then
> > userspace can do (ignoring the missing cap fallback).
>
> I don't think there are any drivers that need that.
> So I'm thinking we can just ignore that for now.
None the less, userspace not seeing SIZE_HINTS will be required to
indefinitely use the existing "old" behavior using the size cap as the
buffer size with a fallback, and drivers without any size limitations
that, i.e. details that are hard to express with a set of accepted
sizes, will still use the inoptimal buffer sizes.
If I read [1] correctly, AMD has no particular size limitations other
than a size limit, but without a SIZE_HINTS, userspace still needs to
use the maximum size.
[1] https://gitlab.freedesktop.org/drm/intel/-/issues/7687#note_1760865
Jonas
>
> >
> > if (has(SIZE_HINTS))
> > size = figure_out_size(SIZE_HINTS,
> > DRM_CAP_CURSOR_WIDTH,
> > DRM_CAP_CURSOR_HEIGHT,
> > preferred_size);
> > else
> > size = DRM_CAP_CURSOR_WIDTH x DRM_CAP_CURSOR_WIDTH;
> >
> > With `figure_out_size()` knowing how to deal with 0x0 in the size hints
> > to use `preferred_size` directly.
> >
> >
> > Jonas
> >
> > > */
> > >
> > > static unsigned int drm_num_planes(struct drm_device *dev)
> > > @@ -1582,3 +1597,36 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> > > return 0;
> > > }
> > > EXPORT_SYMBOL(drm_plane_create_scaling_filter_property);
> > > +
> > > +/**
> > > + * drm_plane_add_size_hint_property - create a size hint property
> > > + *
> > > + * @plane: drm plane
> > > + * @hints: size hints
> > > + * @num_hints: number of size hints
> > > + *
> > > + * Create a size hints property for the plane.
> > > + *
> > > + * RETURNS:
> > > + * Zero for success or -errno
> > > + */
> > > +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> > > + const struct drm_plane_size_hint *hints,
> > > + int num_hints)
> > > +{
> > > + struct drm_device *dev = plane->dev;
> > > + struct drm_mode_config *config = &dev->mode_config;
> > > + struct drm_property_blob *blob;
> > > +
> > > + blob = drm_property_create_blob(dev,
> > > + array_size(sizeof(hints[0]), num_hints),
> > > + hints);
> > > + if (IS_ERR(blob))
> > > + return PTR_ERR(blob);
> > > +
> > > + drm_object_attach_property(&plane->base, config->size_hints_property,
> > > + blob->base.id);
> > > +
> > > + return 0;
> > > +}
> > > +EXPORT_SYMBOL(drm_plane_add_size_hints_property);
> > > diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
> > > index e5b053001d22..5bc8aed9b445 100644
> > > --- a/include/drm/drm_mode_config.h
> > > +++ b/include/drm/drm_mode_config.h
> > > @@ -949,6 +949,11 @@ struct drm_mode_config {
> > > */
> > > struct drm_property *modifiers_property;
> > >
> > > + /**
> > > + * @size_hints_propertty: Plane SIZE_HINTS property.
> > > + */
> > > + struct drm_property *size_hints_property;
> > > +
> > > /* cursor size */
> > > uint32_t cursor_width, cursor_height;
> > >
> > > diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> > > index 51291983ea44..1997d7d64b69 100644
> > > --- a/include/drm/drm_plane.h
> > > +++ b/include/drm/drm_plane.h
> > > @@ -32,6 +32,7 @@
> > > #include <drm/drm_util.h>
> > >
> > > struct drm_crtc;
> > > +struct drm_plane_size_hint;
> > > struct drm_printer;
> > > struct drm_modeset_acquire_ctx;
> > >
> > > @@ -945,5 +946,8 @@ drm_plane_get_damage_clips(const struct drm_plane_state *state);
> > >
> > > int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> > > unsigned int supported_filters);
> > > +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> > > + const struct drm_plane_size_hint *hints,
> > > + int num_hints);
> > >
> > > #endif
> > > diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> > > index 46becedf5b2f..9d7c5967264f 100644
> > > --- a/include/uapi/drm/drm_mode.h
> > > +++ b/include/uapi/drm/drm_mode.h
> > > @@ -849,6 +849,17 @@ struct drm_color_lut {
> > > __u16 reserved;
> > > };
> > >
> > > +/**
> > > + * struct drm_plane_size_hint - Plane size hints
> > > + *
> > > + * The plane SIZE_HINTS property blob contains an
> > > + * array of struct drm_plane_size_hint.
> > > + */
> > > +struct drm_plane_size_hint {
> > > + __u16 width;
> > > + __u16 height;
> > > +};
> > > +
> > > /**
> > > * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
> > > *
> > > --
> > > 2.39.1
> > >
>
> --
> Ville Syrjälä
> Intel
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-14 9:54 ` Jonas Ådahl
@ 2023-02-14 10:28 ` Ville Syrjälä
2023-02-14 11:01 ` Jonas Ådahl
2023-02-14 19:27 ` Harry Wentland
0 siblings, 2 replies; 23+ messages in thread
From: Ville Syrjälä @ 2023-02-14 10:28 UTC (permalink / raw)
To: Jonas Ådahl; +Cc: Pekka Paalanen, intel-gfx, dri-devel
On Tue, Feb 14, 2023 at 10:54:27AM +0100, Jonas Ådahl wrote:
> On Tue, Feb 14, 2023 at 11:25:56AM +0200, Ville Syrjälä wrote:
> > On Thu, Feb 09, 2023 at 03:16:23PM +0100, Jonas Ådahl wrote:
> > > On Wed, Feb 08, 2023 at 11:10:16PM +0200, Ville Syrjala wrote:
> > > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > >
> > > > Add a new immutable plane property by which a plane can advertise
> > > > a handful of recommended plane sizes. This would be mostly exposed
> > > > by cursor planes as a slightly more capable replacement for
> > > > the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> > > > a one size fits all limit for the whole device.
> > > >
> > > > Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> > > > size via the cursor size caps. But always using the max sized
> > > > cursor can waste a surprising amount of power, so a better
> > > > stragey is desirable.
> > > >
> > > > Most other drivers don't specify any cursor size at all, in
> > > > which case the ioctl code just claims that 64x64 is a great
> > > > choice. Whether that is actually true is debatable.
> > > >
> > > > A poll of various compositor developers informs us that
> > > > blindly probing with setcursor/atomic ioctl to determine
> > > > suitable cursor sizes is not acceptable, thus the
> > > > introduction of the new property to supplant the cursor
> > > > size caps. The compositor will now be free to select a
> > > > more optimal cursor size from the short list of options.
> > > >
> > > > Note that the reported sizes (either via the property or the
> > > > caps) make no claims about things such as plane scaling. So
> > > > these things should only really be consulted for simple
> > > > "cursor like" use cases.
> > > >
> > > > v2: Try to add some docs
> > > >
> > > > Cc: Simon Ser <contact@emersion.fr>
> > > > Cc: Jonas Ådahl <jadahl@redhat.com>
> > > > Cc: Daniel Stone <daniel@fooishbar.org>
> > > > Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
> > > > Acked-by: Harry Wentland <harry.wentland@amd.com>
> > > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > ---
> > > > drivers/gpu/drm/drm_mode_config.c | 7 +++++
> > > > drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
> > > > include/drm/drm_mode_config.h | 5 ++++
> > > > include/drm/drm_plane.h | 4 +++
> > > > include/uapi/drm/drm_mode.h | 11 +++++++
> > > > 5 files changed, 75 insertions(+)
> > > >
> > > > diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> > > > index 87eb591fe9b5..21860f94a18c 100644
> > > > --- a/drivers/gpu/drm/drm_mode_config.c
> > > > +++ b/drivers/gpu/drm/drm_mode_config.c
> > > > @@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> > > > return -ENOMEM;
> > > > dev->mode_config.modifiers_property = prop;
> > > >
> > > > + prop = drm_property_create(dev,
> > > > + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> > > > + "SIZE_HINTS", 0);
> > > > + if (!prop)
> > > > + return -ENOMEM;
> > > > + dev->mode_config.size_hints_property = prop;
> > > > +
> > > > return 0;
> > > > }
> > > >
> > > > diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> > > > index 24e7998d1731..ae51b1f83755 100644
> > > > --- a/drivers/gpu/drm/drm_plane.c
> > > > +++ b/drivers/gpu/drm/drm_plane.c
> > > > @@ -140,6 +140,21 @@
> > > > * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> > > > * various bugs in this area with inconsistencies between the capability
> > > > * flag and per-plane properties.
> > > > + *
> > > > + * SIZE_HINTS:
> > > > + * Blob property which contains the set of recommended plane size
> > > > + * which can used for simple "cursor like" use cases (eg. no scaling).
> > > > + * Using these hints frees userspace from extensive probing of
> > > > + * supported plane sizes through atomic/setcursor ioctls.
> > > > + *
> > > > + * For optimal usage userspace should pick the smallest size
> > > > + * that satisfies its own requirements.
> > > > + *
> > > > + * The blob contains an array of struct drm_plane_size_hint.
> > > > + *
> > > > + * Drivers should only attach this property to planes that
> > > > + * support a very limited set of sizes (eg. cursor planes
> > > > + * on typical hardware).
> > >
> > > This is a bit awkward since problematic drivers would only expose
> > > this property if they are new enough.
> > >
> > > A way to avoid this is for all new drivers expose this property, but
> > > special case the size 0x0 as "everything below the max limit goes". Then
> > > userspace can do (ignoring the missing cap fallback).
> >
> > I don't think there are any drivers that need that.
> > So I'm thinking we can just ignore that for now.
>
> None the less, userspace not seeing SIZE_HINTS will be required to
> indefinitely use the existing "old" behavior using the size cap as the
> buffer size with a fallback, and drivers without any size limitations
> that, i.e. details that are hard to express with a set of accepted
> sizes, will still use the inoptimal buffer sizes.
>
> If I read [1] correctly, AMD has no particular size limitations other
> than a size limit, but without a SIZE_HINTS, userspace still needs to
> use the maximum size.
Simon pointed out they have pretty much the same exact limits as i915.
Ie. only a few power of two sizes, and stride must match width.
>
> [1] https://gitlab.freedesktop.org/drm/intel/-/issues/7687#note_1760865
>
>
> Jonas
>
> >
> > >
> > > if (has(SIZE_HINTS))
> > > size = figure_out_size(SIZE_HINTS,
> > > DRM_CAP_CURSOR_WIDTH,
> > > DRM_CAP_CURSOR_HEIGHT,
> > > preferred_size);
> > > else
> > > size = DRM_CAP_CURSOR_WIDTH x DRM_CAP_CURSOR_WIDTH;
> > >
> > > With `figure_out_size()` knowing how to deal with 0x0 in the size hints
> > > to use `preferred_size` directly.
> > >
> > >
> > > Jonas
> > >
> > > > */
> > > >
> > > > static unsigned int drm_num_planes(struct drm_device *dev)
> > > > @@ -1582,3 +1597,36 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> > > > return 0;
> > > > }
> > > > EXPORT_SYMBOL(drm_plane_create_scaling_filter_property);
> > > > +
> > > > +/**
> > > > + * drm_plane_add_size_hint_property - create a size hint property
> > > > + *
> > > > + * @plane: drm plane
> > > > + * @hints: size hints
> > > > + * @num_hints: number of size hints
> > > > + *
> > > > + * Create a size hints property for the plane.
> > > > + *
> > > > + * RETURNS:
> > > > + * Zero for success or -errno
> > > > + */
> > > > +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> > > > + const struct drm_plane_size_hint *hints,
> > > > + int num_hints)
> > > > +{
> > > > + struct drm_device *dev = plane->dev;
> > > > + struct drm_mode_config *config = &dev->mode_config;
> > > > + struct drm_property_blob *blob;
> > > > +
> > > > + blob = drm_property_create_blob(dev,
> > > > + array_size(sizeof(hints[0]), num_hints),
> > > > + hints);
> > > > + if (IS_ERR(blob))
> > > > + return PTR_ERR(blob);
> > > > +
> > > > + drm_object_attach_property(&plane->base, config->size_hints_property,
> > > > + blob->base.id);
> > > > +
> > > > + return 0;
> > > > +}
> > > > +EXPORT_SYMBOL(drm_plane_add_size_hints_property);
> > > > diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
> > > > index e5b053001d22..5bc8aed9b445 100644
> > > > --- a/include/drm/drm_mode_config.h
> > > > +++ b/include/drm/drm_mode_config.h
> > > > @@ -949,6 +949,11 @@ struct drm_mode_config {
> > > > */
> > > > struct drm_property *modifiers_property;
> > > >
> > > > + /**
> > > > + * @size_hints_propertty: Plane SIZE_HINTS property.
> > > > + */
> > > > + struct drm_property *size_hints_property;
> > > > +
> > > > /* cursor size */
> > > > uint32_t cursor_width, cursor_height;
> > > >
> > > > diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> > > > index 51291983ea44..1997d7d64b69 100644
> > > > --- a/include/drm/drm_plane.h
> > > > +++ b/include/drm/drm_plane.h
> > > > @@ -32,6 +32,7 @@
> > > > #include <drm/drm_util.h>
> > > >
> > > > struct drm_crtc;
> > > > +struct drm_plane_size_hint;
> > > > struct drm_printer;
> > > > struct drm_modeset_acquire_ctx;
> > > >
> > > > @@ -945,5 +946,8 @@ drm_plane_get_damage_clips(const struct drm_plane_state *state);
> > > >
> > > > int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> > > > unsigned int supported_filters);
> > > > +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> > > > + const struct drm_plane_size_hint *hints,
> > > > + int num_hints);
> > > >
> > > > #endif
> > > > diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> > > > index 46becedf5b2f..9d7c5967264f 100644
> > > > --- a/include/uapi/drm/drm_mode.h
> > > > +++ b/include/uapi/drm/drm_mode.h
> > > > @@ -849,6 +849,17 @@ struct drm_color_lut {
> > > > __u16 reserved;
> > > > };
> > > >
> > > > +/**
> > > > + * struct drm_plane_size_hint - Plane size hints
> > > > + *
> > > > + * The plane SIZE_HINTS property blob contains an
> > > > + * array of struct drm_plane_size_hint.
> > > > + */
> > > > +struct drm_plane_size_hint {
> > > > + __u16 width;
> > > > + __u16 height;
> > > > +};
> > > > +
> > > > /**
> > > > * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
> > > > *
> > > > --
> > > > 2.39.1
> > > >
> >
> > --
> > Ville Syrjälä
> > Intel
> >
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-14 10:28 ` Ville Syrjälä
@ 2023-02-14 11:01 ` Jonas Ådahl
2023-02-14 11:19 ` Ville Syrjälä
2023-02-14 19:27 ` Harry Wentland
1 sibling, 1 reply; 23+ messages in thread
From: Jonas Ådahl @ 2023-02-14 11:01 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: Pekka Paalanen, intel-gfx, dri-devel
On Tue, Feb 14, 2023 at 12:28:44PM +0200, Ville Syrjälä wrote:
> On Tue, Feb 14, 2023 at 10:54:27AM +0100, Jonas Ådahl wrote:
> > On Tue, Feb 14, 2023 at 11:25:56AM +0200, Ville Syrjälä wrote:
> > > On Thu, Feb 09, 2023 at 03:16:23PM +0100, Jonas Ådahl wrote:
> > > > On Wed, Feb 08, 2023 at 11:10:16PM +0200, Ville Syrjala wrote:
> > > > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > >
> > > > > Add a new immutable plane property by which a plane can advertise
> > > > > a handful of recommended plane sizes. This would be mostly exposed
> > > > > by cursor planes as a slightly more capable replacement for
> > > > > the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> > > > > a one size fits all limit for the whole device.
> > > > >
> > > > > Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> > > > > size via the cursor size caps. But always using the max sized
> > > > > cursor can waste a surprising amount of power, so a better
> > > > > stragey is desirable.
> > > > >
> > > > > Most other drivers don't specify any cursor size at all, in
> > > > > which case the ioctl code just claims that 64x64 is a great
> > > > > choice. Whether that is actually true is debatable.
> > > > >
> > > > > A poll of various compositor developers informs us that
> > > > > blindly probing with setcursor/atomic ioctl to determine
> > > > > suitable cursor sizes is not acceptable, thus the
> > > > > introduction of the new property to supplant the cursor
> > > > > size caps. The compositor will now be free to select a
> > > > > more optimal cursor size from the short list of options.
> > > > >
> > > > > Note that the reported sizes (either via the property or the
> > > > > caps) make no claims about things such as plane scaling. So
> > > > > these things should only really be consulted for simple
> > > > > "cursor like" use cases.
> > > > >
> > > > > v2: Try to add some docs
> > > > >
> > > > > Cc: Simon Ser <contact@emersion.fr>
> > > > > Cc: Jonas Ådahl <jadahl@redhat.com>
> > > > > Cc: Daniel Stone <daniel@fooishbar.org>
> > > > > Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
> > > > > Acked-by: Harry Wentland <harry.wentland@amd.com>
> > > > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > ---
> > > > > drivers/gpu/drm/drm_mode_config.c | 7 +++++
> > > > > drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
> > > > > include/drm/drm_mode_config.h | 5 ++++
> > > > > include/drm/drm_plane.h | 4 +++
> > > > > include/uapi/drm/drm_mode.h | 11 +++++++
> > > > > 5 files changed, 75 insertions(+)
> > > > >
> > > > > diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> > > > > index 87eb591fe9b5..21860f94a18c 100644
> > > > > --- a/drivers/gpu/drm/drm_mode_config.c
> > > > > +++ b/drivers/gpu/drm/drm_mode_config.c
> > > > > @@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> > > > > return -ENOMEM;
> > > > > dev->mode_config.modifiers_property = prop;
> > > > >
> > > > > + prop = drm_property_create(dev,
> > > > > + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> > > > > + "SIZE_HINTS", 0);
> > > > > + if (!prop)
> > > > > + return -ENOMEM;
> > > > > + dev->mode_config.size_hints_property = prop;
> > > > > +
> > > > > return 0;
> > > > > }
> > > > >
> > > > > diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> > > > > index 24e7998d1731..ae51b1f83755 100644
> > > > > --- a/drivers/gpu/drm/drm_plane.c
> > > > > +++ b/drivers/gpu/drm/drm_plane.c
> > > > > @@ -140,6 +140,21 @@
> > > > > * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> > > > > * various bugs in this area with inconsistencies between the capability
> > > > > * flag and per-plane properties.
> > > > > + *
> > > > > + * SIZE_HINTS:
> > > > > + * Blob property which contains the set of recommended plane size
> > > > > + * which can used for simple "cursor like" use cases (eg. no scaling).
> > > > > + * Using these hints frees userspace from extensive probing of
> > > > > + * supported plane sizes through atomic/setcursor ioctls.
> > > > > + *
> > > > > + * For optimal usage userspace should pick the smallest size
> > > > > + * that satisfies its own requirements.
> > > > > + *
> > > > > + * The blob contains an array of struct drm_plane_size_hint.
> > > > > + *
> > > > > + * Drivers should only attach this property to planes that
> > > > > + * support a very limited set of sizes (eg. cursor planes
> > > > > + * on typical hardware).
> > > >
> > > > This is a bit awkward since problematic drivers would only expose
> > > > this property if they are new enough.
> > > >
> > > > A way to avoid this is for all new drivers expose this property, but
> > > > special case the size 0x0 as "everything below the max limit goes". Then
> > > > userspace can do (ignoring the missing cap fallback).
> > >
> > > I don't think there are any drivers that need that.
> > > So I'm thinking we can just ignore that for now.
> >
> > None the less, userspace not seeing SIZE_HINTS will be required to
> > indefinitely use the existing "old" behavior using the size cap as the
> > buffer size with a fallback, and drivers without any size limitations
> > that, i.e. details that are hard to express with a set of accepted
> > sizes, will still use the inoptimal buffer sizes.
> >
> > If I read [1] correctly, AMD has no particular size limitations other
> > than a size limit, but without a SIZE_HINTS, userspace still needs to
> > use the maximum size.
>
> Simon pointed out they have pretty much the same exact limits as i915.
> Ie. only a few power of two sizes, and stride must match width.
How about various ARM drivers, where the cursor plane is a regular
overlay plane with an artificial 'cursor' stamp on it?
Either way, the documentation creates an impossible expectation -
drivers, existing of future, that does not "support for a very limited
set of sizes" but actually any size below a limit, can't communicate to
userspace that it can handle cursor buffers with an arbitrary sizes,
without userspace breaking on todays kernels.
Jonas
>
> >
> > [1] https://gitlab.freedesktop.org/drm/intel/-/issues/7687#note_1760865
> >
> >
> > Jonas
> >
> > >
> > > >
> > > > if (has(SIZE_HINTS))
> > > > size = figure_out_size(SIZE_HINTS,
> > > > DRM_CAP_CURSOR_WIDTH,
> > > > DRM_CAP_CURSOR_HEIGHT,
> > > > preferred_size);
> > > > else
> > > > size = DRM_CAP_CURSOR_WIDTH x DRM_CAP_CURSOR_WIDTH;
> > > >
> > > > With `figure_out_size()` knowing how to deal with 0x0 in the size hints
> > > > to use `preferred_size` directly.
> > > >
> > > >
> > > > Jonas
> > > >
> > > > > */
> > > > >
> > > > > static unsigned int drm_num_planes(struct drm_device *dev)
> > > > > @@ -1582,3 +1597,36 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> > > > > return 0;
> > > > > }
> > > > > EXPORT_SYMBOL(drm_plane_create_scaling_filter_property);
> > > > > +
> > > > > +/**
> > > > > + * drm_plane_add_size_hint_property - create a size hint property
> > > > > + *
> > > > > + * @plane: drm plane
> > > > > + * @hints: size hints
> > > > > + * @num_hints: number of size hints
> > > > > + *
> > > > > + * Create a size hints property for the plane.
> > > > > + *
> > > > > + * RETURNS:
> > > > > + * Zero for success or -errno
> > > > > + */
> > > > > +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> > > > > + const struct drm_plane_size_hint *hints,
> > > > > + int num_hints)
> > > > > +{
> > > > > + struct drm_device *dev = plane->dev;
> > > > > + struct drm_mode_config *config = &dev->mode_config;
> > > > > + struct drm_property_blob *blob;
> > > > > +
> > > > > + blob = drm_property_create_blob(dev,
> > > > > + array_size(sizeof(hints[0]), num_hints),
> > > > > + hints);
> > > > > + if (IS_ERR(blob))
> > > > > + return PTR_ERR(blob);
> > > > > +
> > > > > + drm_object_attach_property(&plane->base, config->size_hints_property,
> > > > > + blob->base.id);
> > > > > +
> > > > > + return 0;
> > > > > +}
> > > > > +EXPORT_SYMBOL(drm_plane_add_size_hints_property);
> > > > > diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
> > > > > index e5b053001d22..5bc8aed9b445 100644
> > > > > --- a/include/drm/drm_mode_config.h
> > > > > +++ b/include/drm/drm_mode_config.h
> > > > > @@ -949,6 +949,11 @@ struct drm_mode_config {
> > > > > */
> > > > > struct drm_property *modifiers_property;
> > > > >
> > > > > + /**
> > > > > + * @size_hints_propertty: Plane SIZE_HINTS property.
> > > > > + */
> > > > > + struct drm_property *size_hints_property;
> > > > > +
> > > > > /* cursor size */
> > > > > uint32_t cursor_width, cursor_height;
> > > > >
> > > > > diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> > > > > index 51291983ea44..1997d7d64b69 100644
> > > > > --- a/include/drm/drm_plane.h
> > > > > +++ b/include/drm/drm_plane.h
> > > > > @@ -32,6 +32,7 @@
> > > > > #include <drm/drm_util.h>
> > > > >
> > > > > struct drm_crtc;
> > > > > +struct drm_plane_size_hint;
> > > > > struct drm_printer;
> > > > > struct drm_modeset_acquire_ctx;
> > > > >
> > > > > @@ -945,5 +946,8 @@ drm_plane_get_damage_clips(const struct drm_plane_state *state);
> > > > >
> > > > > int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> > > > > unsigned int supported_filters);
> > > > > +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> > > > > + const struct drm_plane_size_hint *hints,
> > > > > + int num_hints);
> > > > >
> > > > > #endif
> > > > > diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> > > > > index 46becedf5b2f..9d7c5967264f 100644
> > > > > --- a/include/uapi/drm/drm_mode.h
> > > > > +++ b/include/uapi/drm/drm_mode.h
> > > > > @@ -849,6 +849,17 @@ struct drm_color_lut {
> > > > > __u16 reserved;
> > > > > };
> > > > >
> > > > > +/**
> > > > > + * struct drm_plane_size_hint - Plane size hints
> > > > > + *
> > > > > + * The plane SIZE_HINTS property blob contains an
> > > > > + * array of struct drm_plane_size_hint.
> > > > > + */
> > > > > +struct drm_plane_size_hint {
> > > > > + __u16 width;
> > > > > + __u16 height;
> > > > > +};
> > > > > +
> > > > > /**
> > > > > * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
> > > > > *
> > > > > --
> > > > > 2.39.1
> > > > >
> > >
> > > --
> > > Ville Syrjälä
> > > Intel
> > >
>
> --
> Ville Syrjälä
> Intel
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-14 11:01 ` Jonas Ådahl
@ 2023-02-14 11:19 ` Ville Syrjälä
2023-02-22 18:34 ` Ville Syrjälä
0 siblings, 1 reply; 23+ messages in thread
From: Ville Syrjälä @ 2023-02-14 11:19 UTC (permalink / raw)
To: Jonas Ådahl; +Cc: Pekka Paalanen, intel-gfx, dri-devel
On Tue, Feb 14, 2023 at 12:01:49PM +0100, Jonas Ådahl wrote:
> On Tue, Feb 14, 2023 at 12:28:44PM +0200, Ville Syrjälä wrote:
> > On Tue, Feb 14, 2023 at 10:54:27AM +0100, Jonas Ådahl wrote:
> > > On Tue, Feb 14, 2023 at 11:25:56AM +0200, Ville Syrjälä wrote:
> > > > On Thu, Feb 09, 2023 at 03:16:23PM +0100, Jonas Ådahl wrote:
> > > > > On Wed, Feb 08, 2023 at 11:10:16PM +0200, Ville Syrjala wrote:
> > > > > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > >
> > > > > > Add a new immutable plane property by which a plane can advertise
> > > > > > a handful of recommended plane sizes. This would be mostly exposed
> > > > > > by cursor planes as a slightly more capable replacement for
> > > > > > the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> > > > > > a one size fits all limit for the whole device.
> > > > > >
> > > > > > Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> > > > > > size via the cursor size caps. But always using the max sized
> > > > > > cursor can waste a surprising amount of power, so a better
> > > > > > stragey is desirable.
> > > > > >
> > > > > > Most other drivers don't specify any cursor size at all, in
> > > > > > which case the ioctl code just claims that 64x64 is a great
> > > > > > choice. Whether that is actually true is debatable.
> > > > > >
> > > > > > A poll of various compositor developers informs us that
> > > > > > blindly probing with setcursor/atomic ioctl to determine
> > > > > > suitable cursor sizes is not acceptable, thus the
> > > > > > introduction of the new property to supplant the cursor
> > > > > > size caps. The compositor will now be free to select a
> > > > > > more optimal cursor size from the short list of options.
> > > > > >
> > > > > > Note that the reported sizes (either via the property or the
> > > > > > caps) make no claims about things such as plane scaling. So
> > > > > > these things should only really be consulted for simple
> > > > > > "cursor like" use cases.
> > > > > >
> > > > > > v2: Try to add some docs
> > > > > >
> > > > > > Cc: Simon Ser <contact@emersion.fr>
> > > > > > Cc: Jonas Ådahl <jadahl@redhat.com>
> > > > > > Cc: Daniel Stone <daniel@fooishbar.org>
> > > > > > Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
> > > > > > Acked-by: Harry Wentland <harry.wentland@amd.com>
> > > > > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > > ---
> > > > > > drivers/gpu/drm/drm_mode_config.c | 7 +++++
> > > > > > drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
> > > > > > include/drm/drm_mode_config.h | 5 ++++
> > > > > > include/drm/drm_plane.h | 4 +++
> > > > > > include/uapi/drm/drm_mode.h | 11 +++++++
> > > > > > 5 files changed, 75 insertions(+)
> > > > > >
> > > > > > diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> > > > > > index 87eb591fe9b5..21860f94a18c 100644
> > > > > > --- a/drivers/gpu/drm/drm_mode_config.c
> > > > > > +++ b/drivers/gpu/drm/drm_mode_config.c
> > > > > > @@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> > > > > > return -ENOMEM;
> > > > > > dev->mode_config.modifiers_property = prop;
> > > > > >
> > > > > > + prop = drm_property_create(dev,
> > > > > > + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> > > > > > + "SIZE_HINTS", 0);
> > > > > > + if (!prop)
> > > > > > + return -ENOMEM;
> > > > > > + dev->mode_config.size_hints_property = prop;
> > > > > > +
> > > > > > return 0;
> > > > > > }
> > > > > >
> > > > > > diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> > > > > > index 24e7998d1731..ae51b1f83755 100644
> > > > > > --- a/drivers/gpu/drm/drm_plane.c
> > > > > > +++ b/drivers/gpu/drm/drm_plane.c
> > > > > > @@ -140,6 +140,21 @@
> > > > > > * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> > > > > > * various bugs in this area with inconsistencies between the capability
> > > > > > * flag and per-plane properties.
> > > > > > + *
> > > > > > + * SIZE_HINTS:
> > > > > > + * Blob property which contains the set of recommended plane size
> > > > > > + * which can used for simple "cursor like" use cases (eg. no scaling).
> > > > > > + * Using these hints frees userspace from extensive probing of
> > > > > > + * supported plane sizes through atomic/setcursor ioctls.
> > > > > > + *
> > > > > > + * For optimal usage userspace should pick the smallest size
> > > > > > + * that satisfies its own requirements.
> > > > > > + *
> > > > > > + * The blob contains an array of struct drm_plane_size_hint.
> > > > > > + *
> > > > > > + * Drivers should only attach this property to planes that
> > > > > > + * support a very limited set of sizes (eg. cursor planes
> > > > > > + * on typical hardware).
> > > > >
> > > > > This is a bit awkward since problematic drivers would only expose
> > > > > this property if they are new enough.
> > > > >
> > > > > A way to avoid this is for all new drivers expose this property, but
> > > > > special case the size 0x0 as "everything below the max limit goes". Then
> > > > > userspace can do (ignoring the missing cap fallback).
> > > >
> > > > I don't think there are any drivers that need that.
> > > > So I'm thinking we can just ignore that for now.
> > >
> > > None the less, userspace not seeing SIZE_HINTS will be required to
> > > indefinitely use the existing "old" behavior using the size cap as the
> > > buffer size with a fallback, and drivers without any size limitations
> > > that, i.e. details that are hard to express with a set of accepted
> > > sizes, will still use the inoptimal buffer sizes.
> > >
> > > If I read [1] correctly, AMD has no particular size limitations other
> > > than a size limit, but without a SIZE_HINTS, userspace still needs to
> > > use the maximum size.
> >
> > Simon pointed out they have pretty much the same exact limits as i915.
> > Ie. only a few power of two sizes, and stride must match width.
>
> How about various ARM drivers, where the cursor plane is a regular
> overlay plane with an artificial 'cursor' stamp on it?
They don't even bother with the size cap currently. So the
generic ioctl code currently just decides that 64x64 is good
enough for them.
>
> Either way, the documentation creates an impossible expectation -
> drivers, existing of future, that does not "support for a very limited
> set of sizes" but actually any size below a limit, can't communicate to
> userspace that it can handle cursor buffers with an arbitrary sizes,
> without userspace breaking on todays kernels.
I don't see how anything would break. You just won't get a 100%
optimal result potentially if you don't declare any smaller
sizes. And I think we can always specify that magic 0x0 value
later (or a new cap/etc) should an actual user for it appear.
I guess to play it safe we could specify 0x0 as a value that
might become valid in the future, so userspace should check
for it and treat it the same as not having the prop at all.
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-14 10:28 ` Ville Syrjälä
2023-02-14 11:01 ` Jonas Ådahl
@ 2023-02-14 19:27 ` Harry Wentland
2023-02-14 19:59 ` Ville Syrjälä
1 sibling, 1 reply; 23+ messages in thread
From: Harry Wentland @ 2023-02-14 19:27 UTC (permalink / raw)
To: Ville Syrjälä, Jonas Ådahl
Cc: intel-gfx, Pekka Paalanen, dri-devel
On 2/14/23 05:28, Ville Syrjälä wrote:
> On Tue, Feb 14, 2023 at 10:54:27AM +0100, Jonas Ådahl wrote:
>> On Tue, Feb 14, 2023 at 11:25:56AM +0200, Ville Syrjälä wrote:
>>> On Thu, Feb 09, 2023 at 03:16:23PM +0100, Jonas Ådahl wrote:
>>>> On Wed, Feb 08, 2023 at 11:10:16PM +0200, Ville Syrjala wrote:
>>>>> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>>>>
>>>>> Add a new immutable plane property by which a plane can advertise
>>>>> a handful of recommended plane sizes. This would be mostly exposed
>>>>> by cursor planes as a slightly more capable replacement for
>>>>> the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
>>>>> a one size fits all limit for the whole device.
>>>>>
>>>>> Currently eg. amdgpu/i915/nouveau just advertize the max cursor
>>>>> size via the cursor size caps. But always using the max sized
>>>>> cursor can waste a surprising amount of power, so a better
>>>>> stragey is desirable.
>>>>>
>>>>> Most other drivers don't specify any cursor size at all, in
>>>>> which case the ioctl code just claims that 64x64 is a great
>>>>> choice. Whether that is actually true is debatable.
>>>>>
>>>>> A poll of various compositor developers informs us that
>>>>> blindly probing with setcursor/atomic ioctl to determine
>>>>> suitable cursor sizes is not acceptable, thus the
>>>>> introduction of the new property to supplant the cursor
>>>>> size caps. The compositor will now be free to select a
>>>>> more optimal cursor size from the short list of options.
>>>>>
>>>>> Note that the reported sizes (either via the property or the
>>>>> caps) make no claims about things such as plane scaling. So
>>>>> these things should only really be consulted for simple
>>>>> "cursor like" use cases.
>>>>>
>>>>> v2: Try to add some docs
>>>>>
>>>>> Cc: Simon Ser <contact@emersion.fr>
>>>>> Cc: Jonas Ådahl <jadahl@redhat.com>
>>>>> Cc: Daniel Stone <daniel@fooishbar.org>
>>>>> Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
>>>>> Acked-by: Harry Wentland <harry.wentland@amd.com>
>>>>> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>>>> ---
>>>>> drivers/gpu/drm/drm_mode_config.c | 7 +++++
>>>>> drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
>>>>> include/drm/drm_mode_config.h | 5 ++++
>>>>> include/drm/drm_plane.h | 4 +++
>>>>> include/uapi/drm/drm_mode.h | 11 +++++++
>>>>> 5 files changed, 75 insertions(+)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
>>>>> index 87eb591fe9b5..21860f94a18c 100644
>>>>> --- a/drivers/gpu/drm/drm_mode_config.c
>>>>> +++ b/drivers/gpu/drm/drm_mode_config.c
>>>>> @@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
>>>>> return -ENOMEM;
>>>>> dev->mode_config.modifiers_property = prop;
>>>>>
>>>>> + prop = drm_property_create(dev,
>>>>> + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
>>>>> + "SIZE_HINTS", 0);
>>>>> + if (!prop)
>>>>> + return -ENOMEM;
>>>>> + dev->mode_config.size_hints_property = prop;
>>>>> +
>>>>> return 0;
>>>>> }
>>>>>
>>>>> diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
>>>>> index 24e7998d1731..ae51b1f83755 100644
>>>>> --- a/drivers/gpu/drm/drm_plane.c
>>>>> +++ b/drivers/gpu/drm/drm_plane.c
>>>>> @@ -140,6 +140,21 @@
>>>>> * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
>>>>> * various bugs in this area with inconsistencies between the capability
>>>>> * flag and per-plane properties.
>>>>> + *
>>>>> + * SIZE_HINTS:
>>>>> + * Blob property which contains the set of recommended plane size
>>>>> + * which can used for simple "cursor like" use cases (eg. no scaling).
>>>>> + * Using these hints frees userspace from extensive probing of
>>>>> + * supported plane sizes through atomic/setcursor ioctls.
>>>>> + *
>>>>> + * For optimal usage userspace should pick the smallest size
>>>>> + * that satisfies its own requirements.
>>>>> + *
>>>>> + * The blob contains an array of struct drm_plane_size_hint.
>>>>> + *
>>>>> + * Drivers should only attach this property to planes that
>>>>> + * support a very limited set of sizes (eg. cursor planes
>>>>> + * on typical hardware).
>>>>
>>>> This is a bit awkward since problematic drivers would only expose
>>>> this property if they are new enough.
>>>>
>>>> A way to avoid this is for all new drivers expose this property, but
>>>> special case the size 0x0 as "everything below the max limit goes". Then
>>>> userspace can do (ignoring the missing cap fallback).
>>>
>>> I don't think there are any drivers that need that.
>>> So I'm thinking we can just ignore that for now.
>>
>> None the less, userspace not seeing SIZE_HINTS will be required to
>> indefinitely use the existing "old" behavior using the size cap as the
>> buffer size with a fallback, and drivers without any size limitations
>> that, i.e. details that are hard to express with a set of accepted
>> sizes, will still use the inoptimal buffer sizes.
>>
>> If I read [1] correctly, AMD has no particular size limitations other
>> than a size limit, but without a SIZE_HINTS, userspace still needs to
>> use the maximum size.
>
> Simon pointed out they have pretty much the same exact limits as i915.
> Ie. only a few power of two sizes, and stride must match width.
>
That's an artificial limitation in the driver. The HW has no such
limitation and it would be nice to drop that from our driver as
well.
Harry
>>
>> [1] https://gitlab.freedesktop.org/drm/intel/-/issues/7687#note_1760865
>>
>>
>> Jonas
>>
>>>
>>>>
>>>> if (has(SIZE_HINTS))
>>>> size = figure_out_size(SIZE_HINTS,
>>>> DRM_CAP_CURSOR_WIDTH,
>>>> DRM_CAP_CURSOR_HEIGHT,
>>>> preferred_size);
>>>> else
>>>> size = DRM_CAP_CURSOR_WIDTH x DRM_CAP_CURSOR_WIDTH;
>>>>
>>>> With `figure_out_size()` knowing how to deal with 0x0 in the size hints
>>>> to use `preferred_size` directly.
>>>>
>>>>
>>>> Jonas
>>>>
>>>>> */
>>>>>
>>>>> static unsigned int drm_num_planes(struct drm_device *dev)
>>>>> @@ -1582,3 +1597,36 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
>>>>> return 0;
>>>>> }
>>>>> EXPORT_SYMBOL(drm_plane_create_scaling_filter_property);
>>>>> +
>>>>> +/**
>>>>> + * drm_plane_add_size_hint_property - create a size hint property
>>>>> + *
>>>>> + * @plane: drm plane
>>>>> + * @hints: size hints
>>>>> + * @num_hints: number of size hints
>>>>> + *
>>>>> + * Create a size hints property for the plane.
>>>>> + *
>>>>> + * RETURNS:
>>>>> + * Zero for success or -errno
>>>>> + */
>>>>> +int drm_plane_add_size_hints_property(struct drm_plane *plane,
>>>>> + const struct drm_plane_size_hint *hints,
>>>>> + int num_hints)
>>>>> +{
>>>>> + struct drm_device *dev = plane->dev;
>>>>> + struct drm_mode_config *config = &dev->mode_config;
>>>>> + struct drm_property_blob *blob;
>>>>> +
>>>>> + blob = drm_property_create_blob(dev,
>>>>> + array_size(sizeof(hints[0]), num_hints),
>>>>> + hints);
>>>>> + if (IS_ERR(blob))
>>>>> + return PTR_ERR(blob);
>>>>> +
>>>>> + drm_object_attach_property(&plane->base, config->size_hints_property,
>>>>> + blob->base.id);
>>>>> +
>>>>> + return 0;
>>>>> +}
>>>>> +EXPORT_SYMBOL(drm_plane_add_size_hints_property);
>>>>> diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
>>>>> index e5b053001d22..5bc8aed9b445 100644
>>>>> --- a/include/drm/drm_mode_config.h
>>>>> +++ b/include/drm/drm_mode_config.h
>>>>> @@ -949,6 +949,11 @@ struct drm_mode_config {
>>>>> */
>>>>> struct drm_property *modifiers_property;
>>>>>
>>>>> + /**
>>>>> + * @size_hints_propertty: Plane SIZE_HINTS property.
>>>>> + */
>>>>> + struct drm_property *size_hints_property;
>>>>> +
>>>>> /* cursor size */
>>>>> uint32_t cursor_width, cursor_height;
>>>>>
>>>>> diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
>>>>> index 51291983ea44..1997d7d64b69 100644
>>>>> --- a/include/drm/drm_plane.h
>>>>> +++ b/include/drm/drm_plane.h
>>>>> @@ -32,6 +32,7 @@
>>>>> #include <drm/drm_util.h>
>>>>>
>>>>> struct drm_crtc;
>>>>> +struct drm_plane_size_hint;
>>>>> struct drm_printer;
>>>>> struct drm_modeset_acquire_ctx;
>>>>>
>>>>> @@ -945,5 +946,8 @@ drm_plane_get_damage_clips(const struct drm_plane_state *state);
>>>>>
>>>>> int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
>>>>> unsigned int supported_filters);
>>>>> +int drm_plane_add_size_hints_property(struct drm_plane *plane,
>>>>> + const struct drm_plane_size_hint *hints,
>>>>> + int num_hints);
>>>>>
>>>>> #endif
>>>>> diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
>>>>> index 46becedf5b2f..9d7c5967264f 100644
>>>>> --- a/include/uapi/drm/drm_mode.h
>>>>> +++ b/include/uapi/drm/drm_mode.h
>>>>> @@ -849,6 +849,17 @@ struct drm_color_lut {
>>>>> __u16 reserved;
>>>>> };
>>>>>
>>>>> +/**
>>>>> + * struct drm_plane_size_hint - Plane size hints
>>>>> + *
>>>>> + * The plane SIZE_HINTS property blob contains an
>>>>> + * array of struct drm_plane_size_hint.
>>>>> + */
>>>>> +struct drm_plane_size_hint {
>>>>> + __u16 width;
>>>>> + __u16 height;
>>>>> +};
>>>>> +
>>>>> /**
>>>>> * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
>>>>> *
>>>>> --
>>>>> 2.39.1
>>>>>
>>>
>>> --
>>> Ville Syrjälä
>>> Intel
>>>
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-14 19:27 ` Harry Wentland
@ 2023-02-14 19:59 ` Ville Syrjälä
0 siblings, 0 replies; 23+ messages in thread
From: Ville Syrjälä @ 2023-02-14 19:59 UTC (permalink / raw)
To: Harry Wentland; +Cc: Pekka Paalanen, intel-gfx, Jonas Ådahl, dri-devel
On Tue, Feb 14, 2023 at 02:27:19PM -0500, Harry Wentland wrote:
>
>
> On 2/14/23 05:28, Ville Syrjälä wrote:
> > On Tue, Feb 14, 2023 at 10:54:27AM +0100, Jonas Ådahl wrote:
> >> On Tue, Feb 14, 2023 at 11:25:56AM +0200, Ville Syrjälä wrote:
> >>> On Thu, Feb 09, 2023 at 03:16:23PM +0100, Jonas Ådahl wrote:
> >>>> On Wed, Feb 08, 2023 at 11:10:16PM +0200, Ville Syrjala wrote:
> >>>>> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >>>>>
> >>>>> Add a new immutable plane property by which a plane can advertise
> >>>>> a handful of recommended plane sizes. This would be mostly exposed
> >>>>> by cursor planes as a slightly more capable replacement for
> >>>>> the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> >>>>> a one size fits all limit for the whole device.
> >>>>>
> >>>>> Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> >>>>> size via the cursor size caps. But always using the max sized
> >>>>> cursor can waste a surprising amount of power, so a better
> >>>>> stragey is desirable.
> >>>>>
> >>>>> Most other drivers don't specify any cursor size at all, in
> >>>>> which case the ioctl code just claims that 64x64 is a great
> >>>>> choice. Whether that is actually true is debatable.
> >>>>>
> >>>>> A poll of various compositor developers informs us that
> >>>>> blindly probing with setcursor/atomic ioctl to determine
> >>>>> suitable cursor sizes is not acceptable, thus the
> >>>>> introduction of the new property to supplant the cursor
> >>>>> size caps. The compositor will now be free to select a
> >>>>> more optimal cursor size from the short list of options.
> >>>>>
> >>>>> Note that the reported sizes (either via the property or the
> >>>>> caps) make no claims about things such as plane scaling. So
> >>>>> these things should only really be consulted for simple
> >>>>> "cursor like" use cases.
> >>>>>
> >>>>> v2: Try to add some docs
> >>>>>
> >>>>> Cc: Simon Ser <contact@emersion.fr>
> >>>>> Cc: Jonas Ådahl <jadahl@redhat.com>
> >>>>> Cc: Daniel Stone <daniel@fooishbar.org>
> >>>>> Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
> >>>>> Acked-by: Harry Wentland <harry.wentland@amd.com>
> >>>>> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >>>>> ---
> >>>>> drivers/gpu/drm/drm_mode_config.c | 7 +++++
> >>>>> drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
> >>>>> include/drm/drm_mode_config.h | 5 ++++
> >>>>> include/drm/drm_plane.h | 4 +++
> >>>>> include/uapi/drm/drm_mode.h | 11 +++++++
> >>>>> 5 files changed, 75 insertions(+)
> >>>>>
> >>>>> diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> >>>>> index 87eb591fe9b5..21860f94a18c 100644
> >>>>> --- a/drivers/gpu/drm/drm_mode_config.c
> >>>>> +++ b/drivers/gpu/drm/drm_mode_config.c
> >>>>> @@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> >>>>> return -ENOMEM;
> >>>>> dev->mode_config.modifiers_property = prop;
> >>>>>
> >>>>> + prop = drm_property_create(dev,
> >>>>> + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> >>>>> + "SIZE_HINTS", 0);
> >>>>> + if (!prop)
> >>>>> + return -ENOMEM;
> >>>>> + dev->mode_config.size_hints_property = prop;
> >>>>> +
> >>>>> return 0;
> >>>>> }
> >>>>>
> >>>>> diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> >>>>> index 24e7998d1731..ae51b1f83755 100644
> >>>>> --- a/drivers/gpu/drm/drm_plane.c
> >>>>> +++ b/drivers/gpu/drm/drm_plane.c
> >>>>> @@ -140,6 +140,21 @@
> >>>>> * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> >>>>> * various bugs in this area with inconsistencies between the capability
> >>>>> * flag and per-plane properties.
> >>>>> + *
> >>>>> + * SIZE_HINTS:
> >>>>> + * Blob property which contains the set of recommended plane size
> >>>>> + * which can used for simple "cursor like" use cases (eg. no scaling).
> >>>>> + * Using these hints frees userspace from extensive probing of
> >>>>> + * supported plane sizes through atomic/setcursor ioctls.
> >>>>> + *
> >>>>> + * For optimal usage userspace should pick the smallest size
> >>>>> + * that satisfies its own requirements.
> >>>>> + *
> >>>>> + * The blob contains an array of struct drm_plane_size_hint.
> >>>>> + *
> >>>>> + * Drivers should only attach this property to planes that
> >>>>> + * support a very limited set of sizes (eg. cursor planes
> >>>>> + * on typical hardware).
> >>>>
> >>>> This is a bit awkward since problematic drivers would only expose
> >>>> this property if they are new enough.
> >>>>
> >>>> A way to avoid this is for all new drivers expose this property, but
> >>>> special case the size 0x0 as "everything below the max limit goes". Then
> >>>> userspace can do (ignoring the missing cap fallback).
> >>>
> >>> I don't think there are any drivers that need that.
> >>> So I'm thinking we can just ignore that for now.
> >>
> >> None the less, userspace not seeing SIZE_HINTS will be required to
> >> indefinitely use the existing "old" behavior using the size cap as the
> >> buffer size with a fallback, and drivers without any size limitations
> >> that, i.e. details that are hard to express with a set of accepted
> >> sizes, will still use the inoptimal buffer sizes.
> >>
> >> If I read [1] correctly, AMD has no particular size limitations other
> >> than a size limit, but without a SIZE_HINTS, userspace still needs to
> >> use the maximum size.
> >
> > Simon pointed out they have pretty much the same exact limits as i915.
> > Ie. only a few power of two sizes, and stride must match width.
> >
>
> That's an artificial limitation in the driver. The HW has no such
> limitation and it would be nice to drop that from our driver as
> well.
OK. Then I guess we might get a driver that wants such a magic
0x0 size hint (or something). Can we expect patches for that
soonish? Or should we, for the time being, just mark the 0x0
value as potentially reserved for that?
Someone should also look at the igt coverage for funny cursor
sizes. Currently I think we just check POT sizes + on i915 a
few non-square variants of those with reduced non-POT height
(which is what some Intel hw supports).
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2023-02-14 11:19 ` Ville Syrjälä
@ 2023-02-22 18:34 ` Ville Syrjälä
0 siblings, 0 replies; 23+ messages in thread
From: Ville Syrjälä @ 2023-02-22 18:34 UTC (permalink / raw)
To: Jonas Ådahl; +Cc: Pekka Paalanen, intel-gfx, dri-devel
On Tue, Feb 14, 2023 at 01:19:51PM +0200, Ville Syrjälä wrote:
> On Tue, Feb 14, 2023 at 12:01:49PM +0100, Jonas Ådahl wrote:
> > On Tue, Feb 14, 2023 at 12:28:44PM +0200, Ville Syrjälä wrote:
> > > On Tue, Feb 14, 2023 at 10:54:27AM +0100, Jonas Ådahl wrote:
> > > > On Tue, Feb 14, 2023 at 11:25:56AM +0200, Ville Syrjälä wrote:
> > > > > On Thu, Feb 09, 2023 at 03:16:23PM +0100, Jonas Ådahl wrote:
> > > > > > On Wed, Feb 08, 2023 at 11:10:16PM +0200, Ville Syrjala wrote:
> > > > > > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > > >
> > > > > > > Add a new immutable plane property by which a plane can advertise
> > > > > > > a handful of recommended plane sizes. This would be mostly exposed
> > > > > > > by cursor planes as a slightly more capable replacement for
> > > > > > > the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> > > > > > > a one size fits all limit for the whole device.
> > > > > > >
> > > > > > > Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> > > > > > > size via the cursor size caps. But always using the max sized
> > > > > > > cursor can waste a surprising amount of power, so a better
> > > > > > > stragey is desirable.
> > > > > > >
> > > > > > > Most other drivers don't specify any cursor size at all, in
> > > > > > > which case the ioctl code just claims that 64x64 is a great
> > > > > > > choice. Whether that is actually true is debatable.
> > > > > > >
> > > > > > > A poll of various compositor developers informs us that
> > > > > > > blindly probing with setcursor/atomic ioctl to determine
> > > > > > > suitable cursor sizes is not acceptable, thus the
> > > > > > > introduction of the new property to supplant the cursor
> > > > > > > size caps. The compositor will now be free to select a
> > > > > > > more optimal cursor size from the short list of options.
> > > > > > >
> > > > > > > Note that the reported sizes (either via the property or the
> > > > > > > caps) make no claims about things such as plane scaling. So
> > > > > > > these things should only really be consulted for simple
> > > > > > > "cursor like" use cases.
> > > > > > >
> > > > > > > v2: Try to add some docs
> > > > > > >
> > > > > > > Cc: Simon Ser <contact@emersion.fr>
> > > > > > > Cc: Jonas Ådahl <jadahl@redhat.com>
> > > > > > > Cc: Daniel Stone <daniel@fooishbar.org>
> > > > > > > Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
> > > > > > > Acked-by: Harry Wentland <harry.wentland@amd.com>
> > > > > > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > > > ---
> > > > > > > drivers/gpu/drm/drm_mode_config.c | 7 +++++
> > > > > > > drivers/gpu/drm/drm_plane.c | 48 +++++++++++++++++++++++++++++++
> > > > > > > include/drm/drm_mode_config.h | 5 ++++
> > > > > > > include/drm/drm_plane.h | 4 +++
> > > > > > > include/uapi/drm/drm_mode.h | 11 +++++++
> > > > > > > 5 files changed, 75 insertions(+)
> > > > > > >
> > > > > > > diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> > > > > > > index 87eb591fe9b5..21860f94a18c 100644
> > > > > > > --- a/drivers/gpu/drm/drm_mode_config.c
> > > > > > > +++ b/drivers/gpu/drm/drm_mode_config.c
> > > > > > > @@ -374,6 +374,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> > > > > > > return -ENOMEM;
> > > > > > > dev->mode_config.modifiers_property = prop;
> > > > > > >
> > > > > > > + prop = drm_property_create(dev,
> > > > > > > + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> > > > > > > + "SIZE_HINTS", 0);
> > > > > > > + if (!prop)
> > > > > > > + return -ENOMEM;
> > > > > > > + dev->mode_config.size_hints_property = prop;
> > > > > > > +
> > > > > > > return 0;
> > > > > > > }
> > > > > > >
> > > > > > > diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> > > > > > > index 24e7998d1731..ae51b1f83755 100644
> > > > > > > --- a/drivers/gpu/drm/drm_plane.c
> > > > > > > +++ b/drivers/gpu/drm/drm_plane.c
> > > > > > > @@ -140,6 +140,21 @@
> > > > > > > * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> > > > > > > * various bugs in this area with inconsistencies between the capability
> > > > > > > * flag and per-plane properties.
> > > > > > > + *
> > > > > > > + * SIZE_HINTS:
> > > > > > > + * Blob property which contains the set of recommended plane size
> > > > > > > + * which can used for simple "cursor like" use cases (eg. no scaling).
> > > > > > > + * Using these hints frees userspace from extensive probing of
> > > > > > > + * supported plane sizes through atomic/setcursor ioctls.
> > > > > > > + *
> > > > > > > + * For optimal usage userspace should pick the smallest size
> > > > > > > + * that satisfies its own requirements.
> > > > > > > + *
> > > > > > > + * The blob contains an array of struct drm_plane_size_hint.
> > > > > > > + *
> > > > > > > + * Drivers should only attach this property to planes that
> > > > > > > + * support a very limited set of sizes (eg. cursor planes
> > > > > > > + * on typical hardware).
> > > > > >
> > > > > > This is a bit awkward since problematic drivers would only expose
> > > > > > this property if they are new enough.
> > > > > >
> > > > > > A way to avoid this is for all new drivers expose this property, but
> > > > > > special case the size 0x0 as "everything below the max limit goes". Then
> > > > > > userspace can do (ignoring the missing cap fallback).
> > > > >
> > > > > I don't think there are any drivers that need that.
> > > > > So I'm thinking we can just ignore that for now.
> > > >
> > > > None the less, userspace not seeing SIZE_HINTS will be required to
> > > > indefinitely use the existing "old" behavior using the size cap as the
> > > > buffer size with a fallback, and drivers without any size limitations
> > > > that, i.e. details that are hard to express with a set of accepted
> > > > sizes, will still use the inoptimal buffer sizes.
> > > >
> > > > If I read [1] correctly, AMD has no particular size limitations other
> > > > than a size limit, but without a SIZE_HINTS, userspace still needs to
> > > > use the maximum size.
> > >
> > > Simon pointed out they have pretty much the same exact limits as i915.
> > > Ie. only a few power of two sizes, and stride must match width.
> >
> > How about various ARM drivers, where the cursor plane is a regular
> > overlay plane with an artificial 'cursor' stamp on it?
>
> They don't even bother with the size cap currently. So the
> generic ioctl code currently just decides that 64x64 is good
> enough for them.
>
> >
> > Either way, the documentation creates an impossible expectation -
> > drivers, existing of future, that does not "support for a very limited
> > set of sizes" but actually any size below a limit, can't communicate to
> > userspace that it can handle cursor buffers with an arbitrary sizes,
> > without userspace breaking on todays kernels.
>
> I don't see how anything would break. You just won't get a 100%
> optimal result potentially if you don't declare any smaller
> sizes. And I think we can always specify that magic 0x0 value
> later (or a new cap/etc) should an actual user for it appear.
Or maybe better than the 0x0 magic value inside the blob would
be to just have the property with value 0 (ie. no blob at all)?
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH v2 0/2] drm: Add plane SIZE_HINTS property
@ 2024-02-27 19:35 Ville Syrjala
2024-02-27 19:35 ` [PATCH v2 1/2] drm: Introduce " Ville Syrjala
` (4 more replies)
0 siblings, 5 replies; 23+ messages in thread
From: Ville Syrjala @ 2024-02-27 19:35 UTC (permalink / raw)
To: dri-devel
Cc: intel-gfx, Simon Ser, Jonas Ådahl, Daniel Stone,
Sameer Lattannavar, Sebastian Wick, Harry Wentland,
Pekka Paalanen
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Final version for a new plane SIZE_HINTS property to
essentially replace the cursor size caps, based on recent
discussion in this gitlab bug:
https://gitlab.freedesktop.org/drm/intel/-/issues/7687
As for userspace, so far I only did a quick modetest
blob decoder (mainly to verify that it looks correct):
https://gitlab.freedesktop.org/vsyrjala/libdrm/-/commits/plane_size_hints
Sameer & co. have done a real mutter implementation:
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3165
This final version follows the original idea of having
just a list of sizes in a blob, rather than the mode
complex "2D bitmap" approach I also proposed later.
I think that's fair, the bitmap was probably overly
complicated.
The only difference to the previous version of this approach
is that the documentation now states that the list is sorted
in order of preference, and thus userspace should pick the
first suitable size from the list. This should match the
aforementioned mutter implementation.
Cc: Simon Ser <contact@emersion.fr>
Cc: Jonas Ådahl <jadahl@redhat.com>
Cc: Daniel Stone <daniel@fooishbar.org>
Cc: Sameer Lattannavar <sameer.lattannavar@intel.com>
Cc: Sebastian Wick <sebastian.wick@redhat.com>
Cc: Harry Wentland <harry.wentland@amd.com>
Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
Ville Syrjälä (2):
drm: Introduce plane SIZE_HINTS property
drm/i915: Add SIZE_HINTS property for cursors
drivers/gpu/drm/drm_mode_config.c | 7 +++
drivers/gpu/drm/drm_plane.c | 52 +++++++++++++++++++++
drivers/gpu/drm/i915/display/intel_cursor.c | 24 ++++++++++
include/drm/drm_mode_config.h | 5 ++
include/drm/drm_plane.h | 4 ++
include/uapi/drm/drm_mode.h | 11 +++++
6 files changed, 103 insertions(+)
--
2.43.0
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2024-02-27 19:35 [PATCH v2 0/2] drm: Add plane SIZE_HINTS property Ville Syrjala
@ 2024-02-27 19:35 ` Ville Syrjala
2024-02-27 20:32 ` Sebastian Wick
` (2 more replies)
2024-02-27 19:35 ` [PATCH v2 2/2] drm/i915: Add SIZE_HINTS property for cursors Ville Syrjala
` (3 subsequent siblings)
4 siblings, 3 replies; 23+ messages in thread
From: Ville Syrjala @ 2024-02-27 19:35 UTC (permalink / raw)
To: dri-devel
Cc: intel-gfx, Simon Ser, Jonas Ådahl, Daniel Stone,
Sameer Lattannavar, Sebastian Wick, Harry Wentland,
Pekka Paalanen
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Add a new immutable plane property by which a plane can advertise
a handful of recommended plane sizes. This would be mostly exposed
by cursor planes as a slightly more capable replacement for
the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
a one size fits all limit for the whole device.
Currently eg. amdgpu/i915/nouveau just advertize the max cursor
size via the cursor size caps. But always using the max sized
cursor can waste a surprising amount of power, so a better
stragey is desirable.
Most other drivers don't specify any cursor size at all, in
which case the ioctl code just claims that 64x64 is a great
choice. Whether that is actually true is debatable.
A poll of various compositor developers informs us that
blindly probing with setcursor/atomic ioctl to determine
suitable cursor sizes is not acceptable, thus the
introduction of the new property to supplant the cursor
size caps. The compositor will now be free to select a
more optimal cursor size from the short list of options.
Note that the reported sizes (either via the property or the
caps) make no claims about things such as plane scaling. So
these things should only really be consulted for simple
"cursor like" use cases.
Userspace consumer in the form of mutter seems ready:
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3165
v2: Try to add some docs
v3: Specify that value 0 is reserved for future use (basic idea from Jonas)
Drop the note about typical hardware (Pekka)
v4: Update the docs to indicate the list is "in order of preference"
Add a a link to the mutter MR
Cc: Simon Ser <contact@emersion.fr>
Cc: Jonas Ådahl <jadahl@redhat.com>
Cc: Daniel Stone <daniel@fooishbar.org>
Cc: Sameer Lattannavar <sameer.lattannavar@intel.com>
Cc: Sebastian Wick <sebastian.wick@redhat.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/drm_mode_config.c | 7 +++++
drivers/gpu/drm/drm_plane.c | 52 +++++++++++++++++++++++++++++++
include/drm/drm_mode_config.h | 5 +++
include/drm/drm_plane.h | 4 +++
include/uapi/drm/drm_mode.h | 11 +++++++
5 files changed, 79 insertions(+)
diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
index 48fd2d67f352..568972258222 100644
--- a/drivers/gpu/drm/drm_mode_config.c
+++ b/drivers/gpu/drm/drm_mode_config.c
@@ -372,6 +372,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
return -ENOMEM;
dev->mode_config.modifiers_property = prop;
+ prop = drm_property_create(dev,
+ DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
+ "SIZE_HINTS", 0);
+ if (!prop)
+ return -ENOMEM;
+ dev->mode_config.size_hints_property = prop;
+
return 0;
}
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index 672c655c7a8e..4135ce16e608 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -140,6 +140,25 @@
* DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
* various bugs in this area with inconsistencies between the capability
* flag and per-plane properties.
+ *
+ * SIZE_HINTS:
+ * Blob property which contains the set of recommended plane size
+ * which can used for simple "cursor like" use cases (eg. no scaling).
+ * Using these hints frees userspace from extensive probing of
+ * supported plane sizes through atomic/setcursor ioctls.
+ *
+ * The blob contains an array of struct drm_plane_size_hint, in
+ * order of preference. For optimal usage userspace should pick
+ * the first size that satisfies its own requirements.
+ *
+ * Drivers should only attach this property to planes that
+ * support a very limited set of sizes.
+ *
+ * Note that property value 0 (ie. no blob) is reserved for potential
+ * future use. Current userspace is expected to ignore the property
+ * if the value is 0, and fall back to some other means (eg.
+ * &DRM_CAP_CURSOR_WIDTH and &DRM_CAP_CURSOR_HEIGHT) to determine
+ * the appropriate plane size to use.
*/
static unsigned int drm_num_planes(struct drm_device *dev)
@@ -1729,3 +1748,36 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
return 0;
}
EXPORT_SYMBOL(drm_plane_create_scaling_filter_property);
+
+/**
+ * drm_plane_add_size_hint_property - create a size hint property
+ *
+ * @plane: drm plane
+ * @hints: size hints
+ * @num_hints: number of size hints
+ *
+ * Create a size hints property for the plane.
+ *
+ * RETURNS:
+ * Zero for success or -errno
+ */
+int drm_plane_add_size_hints_property(struct drm_plane *plane,
+ const struct drm_plane_size_hint *hints,
+ int num_hints)
+{
+ struct drm_device *dev = plane->dev;
+ struct drm_mode_config *config = &dev->mode_config;
+ struct drm_property_blob *blob;
+
+ blob = drm_property_create_blob(dev,
+ array_size(sizeof(hints[0]), num_hints),
+ hints);
+ if (IS_ERR(blob))
+ return PTR_ERR(blob);
+
+ drm_object_attach_property(&plane->base, config->size_hints_property,
+ blob->base.id);
+
+ return 0;
+}
+EXPORT_SYMBOL(drm_plane_add_size_hints_property);
diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
index 973119a9176b..9d8acf7a10eb 100644
--- a/include/drm/drm_mode_config.h
+++ b/include/drm/drm_mode_config.h
@@ -942,6 +942,11 @@ struct drm_mode_config {
*/
struct drm_property *modifiers_property;
+ /**
+ * @size_hints_propertty: Plane SIZE_HINTS property.
+ */
+ struct drm_property *size_hints_property;
+
/* cursor size */
uint32_t cursor_width, cursor_height;
diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
index 641fe298052d..ec1112208b73 100644
--- a/include/drm/drm_plane.h
+++ b/include/drm/drm_plane.h
@@ -32,6 +32,7 @@
#include <drm/drm_util.h>
struct drm_crtc;
+struct drm_plane_size_hint;
struct drm_printer;
struct drm_modeset_acquire_ctx;
@@ -976,5 +977,8 @@ drm_plane_get_damage_clips(const struct drm_plane_state *state);
int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
unsigned int supported_filters);
+int drm_plane_add_size_hints_property(struct drm_plane *plane,
+ const struct drm_plane_size_hint *hints,
+ int num_hints);
#endif
diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
index 7040e7ea80c7..1ca5c7e418fd 100644
--- a/include/uapi/drm/drm_mode.h
+++ b/include/uapi/drm/drm_mode.h
@@ -865,6 +865,17 @@ struct drm_color_lut {
__u16 reserved;
};
+/**
+ * struct drm_plane_size_hint - Plane size hints
+ *
+ * The plane SIZE_HINTS property blob contains an
+ * array of struct drm_plane_size_hint.
+ */
+struct drm_plane_size_hint {
+ __u16 width;
+ __u16 height;
+};
+
/**
* struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
*
--
2.43.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 2/2] drm/i915: Add SIZE_HINTS property for cursors
2024-02-27 19:35 [PATCH v2 0/2] drm: Add plane SIZE_HINTS property Ville Syrjala
2024-02-27 19:35 ` [PATCH v2 1/2] drm: Introduce " Ville Syrjala
@ 2024-02-27 19:35 ` Ville Syrjala
2024-02-27 20:12 ` ✗ Fi.CI.SPARSE: warning for drm: Add plane SIZE_HINTS property (rev5) Patchwork
` (2 subsequent siblings)
4 siblings, 0 replies; 23+ messages in thread
From: Ville Syrjala @ 2024-02-27 19:35 UTC (permalink / raw)
To: dri-devel
Cc: intel-gfx, Simon Ser, Jonas Ådahl, Daniel Stone,
Sameer Lattannavar, Sebastian Wick, Harry Wentland,
Pekka Paalanen
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Advertize more suitable cursor sizes via the new SIZE_HINTS
plane property.
We can't really enumerate all supported cursor sizes on
the platforms where the cursor height can vary freely, so
for simplicity we'll just expose all square+POT sizes between
each platform's min and max cursor limits.
Depending on the platform this will give us one of three
results:
- 64x64,128x128,256x256,512x512
- 64x64,128x128,256x256
- 64x64
Cc: Simon Ser <contact@emersion.fr>
Cc: Jonas Ådahl <jadahl@redhat.com>
Cc: Daniel Stone <daniel@fooishbar.org>
Cc: Sameer Lattannavar <sameer.lattannavar@intel.com>
Cc: Sebastian Wick <sebastian.wick@redhat.com>
Cc: Harry Wentland <harry.wentland@amd.com>
Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_cursor.c | 24 +++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index f8b33999d43f..49e9b9be2235 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -823,6 +823,28 @@ static const struct drm_plane_funcs intel_cursor_plane_funcs = {
.format_mod_supported = intel_cursor_format_mod_supported,
};
+static void intel_cursor_add_size_hints_property(struct intel_plane *plane)
+{
+ struct drm_i915_private *i915 = to_i915(plane->base.dev);
+ const struct drm_mode_config *config = &i915->drm.mode_config;
+ struct drm_plane_size_hint hints[4];
+ int size, max_size, num_hints = 0;
+
+ max_size = min(config->cursor_width, config->cursor_height);
+
+ /* for simplicity only enumerate the supported square+POT sizes */
+ for (size = 64; size <= max_size; size *= 2) {
+ if (drm_WARN_ON(&i915->drm, num_hints >= ARRAY_SIZE(hints)))
+ break;
+
+ hints[num_hints].width = size;
+ hints[num_hints].height = size;
+ num_hints++;
+ }
+
+ drm_plane_add_size_hints_property(&plane->base, hints, num_hints);
+}
+
struct intel_plane *
intel_cursor_plane_create(struct drm_i915_private *dev_priv,
enum pipe pipe)
@@ -881,6 +903,8 @@ intel_cursor_plane_create(struct drm_i915_private *dev_priv,
DRM_MODE_ROTATE_0 |
DRM_MODE_ROTATE_180);
+ intel_cursor_add_size_hints_property(cursor);
+
zpos = DISPLAY_RUNTIME_INFO(dev_priv)->num_sprites[pipe] + 1;
drm_plane_create_zpos_immutable_property(&cursor->base, zpos);
--
2.43.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* ✗ Fi.CI.SPARSE: warning for drm: Add plane SIZE_HINTS property (rev5)
2024-02-27 19:35 [PATCH v2 0/2] drm: Add plane SIZE_HINTS property Ville Syrjala
2024-02-27 19:35 ` [PATCH v2 1/2] drm: Introduce " Ville Syrjala
2024-02-27 19:35 ` [PATCH v2 2/2] drm/i915: Add SIZE_HINTS property for cursors Ville Syrjala
@ 2024-02-27 20:12 ` Patchwork
2024-02-27 20:24 ` ✓ Fi.CI.BAT: success " Patchwork
2024-02-28 12:01 ` ✓ Fi.CI.IGT: " Patchwork
4 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-02-27 20:12 UTC (permalink / raw)
To: Ville Syrjala; +Cc: intel-gfx
== Series Details ==
Series: drm: Add plane SIZE_HINTS property (rev5)
URL : https://patchwork.freedesktop.org/series/113758/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
^ permalink raw reply [flat|nested] 23+ messages in thread
* ✓ Fi.CI.BAT: success for drm: Add plane SIZE_HINTS property (rev5)
2024-02-27 19:35 [PATCH v2 0/2] drm: Add plane SIZE_HINTS property Ville Syrjala
` (2 preceding siblings ...)
2024-02-27 20:12 ` ✗ Fi.CI.SPARSE: warning for drm: Add plane SIZE_HINTS property (rev5) Patchwork
@ 2024-02-27 20:24 ` Patchwork
2024-02-28 12:01 ` ✓ Fi.CI.IGT: " Patchwork
4 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-02-27 20:24 UTC (permalink / raw)
To: Ville Syrjala; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 2317 bytes --]
== Series Details ==
Series: drm: Add plane SIZE_HINTS property (rev5)
URL : https://patchwork.freedesktop.org/series/113758/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_14352 -> Patchwork_113758v5
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/index.html
Participating hosts (41 -> 41)
------------------------------
Additional (1): bat-kbl-2
Missing (1): fi-snb-2520m
Known issues
------------
Here are the changes found in Patchwork_113758v5 that come from known issues:
### CI changes ###
#### Issues hit ####
* boot:
- fi-cfl-8109u: [PASS][1] -> [FAIL][2] ([i915#8293])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/fi-cfl-8109u/boot.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/fi-cfl-8109u/boot.html
### IGT changes ###
#### Issues hit ####
* igt@fbdev@info:
- bat-kbl-2: NOTRUN -> [SKIP][3] ([fdo#109271] / [i915#1849])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/bat-kbl-2/igt@fbdev@info.html
* igt@gem_lmem_swapping@parallel-random-engines:
- bat-kbl-2: NOTRUN -> [SKIP][4] ([fdo#109271]) +39 other tests skip
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/bat-kbl-2/igt@gem_lmem_swapping@parallel-random-engines.html
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849
[i915#8293]: https://gitlab.freedesktop.org/drm/intel/issues/8293
Build changes
-------------
* Linux: CI_DRM_14352 -> Patchwork_113758v5
CI-20190529: 20190529
CI_DRM_14352: 0d7a78693be62a8d1cd311376815b89b18de8204 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7731: 17f897a81868fb35c6a7033a8b07256659742248 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_113758v5: 0d7a78693be62a8d1cd311376815b89b18de8204 @ git://anongit.freedesktop.org/gfx-ci/linux
### Linux commits
207ccb475d43 drm/i915: Add SIZE_HINTS property for cursors
cc2cd46f6ae5 drm: Introduce plane SIZE_HINTS property
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/index.html
[-- Attachment #2: Type: text/html, Size: 3048 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2024-02-27 19:35 ` [PATCH v2 1/2] drm: Introduce " Ville Syrjala
@ 2024-02-27 20:32 ` Sebastian Wick
2024-02-28 10:12 ` Simon Ser
2024-02-28 10:28 ` Daniel Stone
2 siblings, 0 replies; 23+ messages in thread
From: Sebastian Wick @ 2024-02-27 20:32 UTC (permalink / raw)
To: Ville Syrjala
Cc: dri-devel, intel-gfx, Simon Ser, Jonas Ådahl, Daniel Stone,
Sameer Lattannavar, Harry Wentland, Pekka Paalanen
On Tue, Feb 27, 2024 at 09:35:22PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Add a new immutable plane property by which a plane can advertise
> a handful of recommended plane sizes. This would be mostly exposed
> by cursor planes as a slightly more capable replacement for
> the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> a one size fits all limit for the whole device.
>
> Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> size via the cursor size caps. But always using the max sized
> cursor can waste a surprising amount of power, so a better
> stragey is desirable.
>
> Most other drivers don't specify any cursor size at all, in
> which case the ioctl code just claims that 64x64 is a great
> choice. Whether that is actually true is debatable.
>
> A poll of various compositor developers informs us that
> blindly probing with setcursor/atomic ioctl to determine
> suitable cursor sizes is not acceptable, thus the
> introduction of the new property to supplant the cursor
> size caps. The compositor will now be free to select a
> more optimal cursor size from the short list of options.
>
> Note that the reported sizes (either via the property or the
> caps) make no claims about things such as plane scaling. So
> these things should only really be consulted for simple
> "cursor like" use cases.
>
> Userspace consumer in the form of mutter seems ready:
> https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3165
>
> v2: Try to add some docs
> v3: Specify that value 0 is reserved for future use (basic idea from Jonas)
> Drop the note about typical hardware (Pekka)
> v4: Update the docs to indicate the list is "in order of preference"
> Add a a link to the mutter MR
>
> Cc: Simon Ser <contact@emersion.fr>
> Cc: Jonas Ådahl <jadahl@redhat.com>
> Cc: Daniel Stone <daniel@fooishbar.org>
> Cc: Sameer Lattannavar <sameer.lattannavar@intel.com>
> Cc: Sebastian Wick <sebastian.wick@redhat.com>
> Acked-by: Harry Wentland <harry.wentland@amd.com>
> Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/drm_mode_config.c | 7 +++++
> drivers/gpu/drm/drm_plane.c | 52 +++++++++++++++++++++++++++++++
> include/drm/drm_mode_config.h | 5 +++
> include/drm/drm_plane.h | 4 +++
> include/uapi/drm/drm_mode.h | 11 +++++++
> 5 files changed, 79 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> index 48fd2d67f352..568972258222 100644
> --- a/drivers/gpu/drm/drm_mode_config.c
> +++ b/drivers/gpu/drm/drm_mode_config.c
> @@ -372,6 +372,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> return -ENOMEM;
> dev->mode_config.modifiers_property = prop;
>
> + prop = drm_property_create(dev,
> + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> + "SIZE_HINTS", 0);
> + if (!prop)
> + return -ENOMEM;
> + dev->mode_config.size_hints_property = prop;
> +
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> index 672c655c7a8e..4135ce16e608 100644
> --- a/drivers/gpu/drm/drm_plane.c
> +++ b/drivers/gpu/drm/drm_plane.c
> @@ -140,6 +140,25 @@
> * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> * various bugs in this area with inconsistencies between the capability
> * flag and per-plane properties.
> + *
> + * SIZE_HINTS:
> + * Blob property which contains the set of recommended plane size
> + * which can used for simple "cursor like" use cases (eg. no scaling).
> + * Using these hints frees userspace from extensive probing of
> + * supported plane sizes through atomic/setcursor ioctls.
> + *
> + * The blob contains an array of struct drm_plane_size_hint, in
> + * order of preference. For optimal usage userspace should pick
> + * the first size that satisfies its own requirements.
> + *
> + * Drivers should only attach this property to planes that
> + * support a very limited set of sizes.
> + *
> + * Note that property value 0 (ie. no blob) is reserved for potential
> + * future use. Current userspace is expected to ignore the property
> + * if the value is 0, and fall back to some other means (eg.
> + * &DRM_CAP_CURSOR_WIDTH and &DRM_CAP_CURSOR_HEIGHT) to determine
> + * the appropriate plane size to use.
> */
>
> static unsigned int drm_num_planes(struct drm_device *dev)
> @@ -1729,3 +1748,36 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> return 0;
> }
> EXPORT_SYMBOL(drm_plane_create_scaling_filter_property);
> +
> +/**
> + * drm_plane_add_size_hint_property - create a size hint property
> + *
> + * @plane: drm plane
> + * @hints: size hints
> + * @num_hints: number of size hints
> + *
> + * Create a size hints property for the plane.
> + *
> + * RETURNS:
> + * Zero for success or -errno
> + */
> +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> + const struct drm_plane_size_hint *hints,
> + int num_hints)
> +{
> + struct drm_device *dev = plane->dev;
> + struct drm_mode_config *config = &dev->mode_config;
> + struct drm_property_blob *blob;
> +
> + blob = drm_property_create_blob(dev,
> + array_size(sizeof(hints[0]), num_hints),
> + hints);
> + if (IS_ERR(blob))
> + return PTR_ERR(blob);
> +
> + drm_object_attach_property(&plane->base, config->size_hints_property,
> + blob->base.id);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(drm_plane_add_size_hints_property);
> diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
> index 973119a9176b..9d8acf7a10eb 100644
> --- a/include/drm/drm_mode_config.h
> +++ b/include/drm/drm_mode_config.h
> @@ -942,6 +942,11 @@ struct drm_mode_config {
> */
> struct drm_property *modifiers_property;
>
> + /**
> + * @size_hints_propertty: Plane SIZE_HINTS property.
> + */
> + struct drm_property *size_hints_property;
> +
> /* cursor size */
> uint32_t cursor_width, cursor_height;
>
> diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> index 641fe298052d..ec1112208b73 100644
> --- a/include/drm/drm_plane.h
> +++ b/include/drm/drm_plane.h
> @@ -32,6 +32,7 @@
> #include <drm/drm_util.h>
>
> struct drm_crtc;
> +struct drm_plane_size_hint;
> struct drm_printer;
> struct drm_modeset_acquire_ctx;
>
> @@ -976,5 +977,8 @@ drm_plane_get_damage_clips(const struct drm_plane_state *state);
>
> int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> unsigned int supported_filters);
> +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> + const struct drm_plane_size_hint *hints,
> + int num_hints);
>
> #endif
> diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> index 7040e7ea80c7..1ca5c7e418fd 100644
> --- a/include/uapi/drm/drm_mode.h
> +++ b/include/uapi/drm/drm_mode.h
> @@ -865,6 +865,17 @@ struct drm_color_lut {
> __u16 reserved;
> };
>
> +/**
> + * struct drm_plane_size_hint - Plane size hints
> + *
> + * The plane SIZE_HINTS property blob contains an
> + * array of struct drm_plane_size_hint.
> + */
> +struct drm_plane_size_hint {
> + __u16 width;
> + __u16 height;
> +};
> +
> /**
> * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
> *
> --
> 2.43.0
>
Reviewed-by: Sebastian Wick <sebastian.wick@redhat.com>
Mutter is also ready to land the changes but we're approaching RC this
cycle, to it will probably have to wait for 47.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2024-02-27 19:35 ` [PATCH v2 1/2] drm: Introduce " Ville Syrjala
2024-02-27 20:32 ` Sebastian Wick
@ 2024-02-28 10:12 ` Simon Ser
2024-03-15 17:03 ` Ville Syrjälä
2024-02-28 10:28 ` Daniel Stone
2 siblings, 1 reply; 23+ messages in thread
From: Simon Ser @ 2024-02-28 10:12 UTC (permalink / raw)
To: Ville Syrjala
Cc: dri-devel, intel-gfx, Jonas Ådahl, Daniel Stone,
Sameer Lattannavar, Sebastian Wick, Harry Wentland,
Pekka Paalanen
On Tuesday, February 27th, 2024 at 20:35, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Add a new immutable plane property by which a plane can advertise
> a handful of recommended plane sizes. This would be mostly exposed
> by cursor planes as a slightly more capable replacement for
> the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> a one size fits all limit for the whole device.
>
> Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> size via the cursor size caps. But always using the max sized
> cursor can waste a surprising amount of power, so a better
> stragey is desirable.
Typo: strategy
> Most other drivers don't specify any cursor size at all, in
> which case the ioctl code just claims that 64x64 is a great
> choice. Whether that is actually true is debatable.
>
> A poll of various compositor developers informs us that
> blindly probing with setcursor/atomic ioctl to determine
> suitable cursor sizes is not acceptable, thus the
> introduction of the new property to supplant the cursor
> size caps. The compositor will now be free to select a
> more optimal cursor size from the short list of options.
>
> Note that the reported sizes (either via the property or the
> caps) make no claims about things such as plane scaling. So
> these things should only really be consulted for simple
> "cursor like" use cases.
>
> Userspace consumer in the form of mutter seems ready:
> https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3165
Do we need an IGT as well to merge this new uAPI?
> v2: Try to add some docs
> v3: Specify that value 0 is reserved for future use (basic idea from Jonas)
> Drop the note about typical hardware (Pekka)
> v4: Update the docs to indicate the list is "in order of preference"
> Add a a link to the mutter MR
>
> Cc: Simon Ser <contact@emersion.fr>
> Cc: Jonas Ådahl <jadahl@redhat.com>
> Cc: Daniel Stone <daniel@fooishbar.org>
> Cc: Sameer Lattannavar <sameer.lattannavar@intel.com>
> Cc: Sebastian Wick <sebastian.wick@redhat.com>
> Acked-by: Harry Wentland <harry.wentland@amd.com>
> Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/drm_mode_config.c | 7 +++++
> drivers/gpu/drm/drm_plane.c | 52 +++++++++++++++++++++++++++++++
> include/drm/drm_mode_config.h | 5 +++
> include/drm/drm_plane.h | 4 +++
> include/uapi/drm/drm_mode.h | 11 +++++++
> 5 files changed, 79 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> index 48fd2d67f352..568972258222 100644
> --- a/drivers/gpu/drm/drm_mode_config.c
> +++ b/drivers/gpu/drm/drm_mode_config.c
> @@ -372,6 +372,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> return -ENOMEM;
> dev->mode_config.modifiers_property = prop;
>
> + prop = drm_property_create(dev,
> + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> + "SIZE_HINTS", 0);
> + if (!prop)
> + return -ENOMEM;
> + dev->mode_config.size_hints_property = prop;
> +
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> index 672c655c7a8e..4135ce16e608 100644
> --- a/drivers/gpu/drm/drm_plane.c
> +++ b/drivers/gpu/drm/drm_plane.c
> @@ -140,6 +140,25 @@
> * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> * various bugs in this area with inconsistencies between the capability
> * flag and per-plane properties.
> + *
> + * SIZE_HINTS:
> + * Blob property which contains the set of recommended plane size
> + * which can used for simple "cursor like" use cases (eg. no scaling).
> + * Using these hints frees userspace from extensive probing of
> + * supported plane sizes through atomic/setcursor ioctls.
> + *
> + * The blob contains an array of struct drm_plane_size_hint, in
> + * order of preference. For optimal usage userspace should pick
> + * the first size that satisfies its own requirements.
> + *
> + * Drivers should only attach this property to planes that
> + * support a very limited set of sizes.
> + *
> + * Note that property value 0 (ie. no blob) is reserved for potential
> + * future use. Current userspace is expected to ignore the property
> + * if the value is 0, and fall back to some other means (eg.
> + * &DRM_CAP_CURSOR_WIDTH and &DRM_CAP_CURSOR_HEIGHT) to determine
> + * the appropriate plane size to use.
> */
>
> static unsigned int drm_num_planes(struct drm_device *dev)
> @@ -1729,3 +1748,36 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> return 0;
> }
> EXPORT_SYMBOL(drm_plane_create_scaling_filter_property);
> +
> +/**
> + * drm_plane_add_size_hint_property - create a size hint property
> + *
> + * @plane: drm plane
> + * @hints: size hints
> + * @num_hints: number of size hints
> + *
> + * Create a size hints property for the plane.
> + *
> + * RETURNS:
> + * Zero for success or -errno
> + */
> +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> + const struct drm_plane_size_hint *hints,
> + int num_hints)
> +{
Can we add a plane type check here, to make sure this is only attached to
cursor planes? If there is a use-case for other plane types, I'd prefer to
discuss about it first before expanding the property's scope.
With that:
Reviewed-by: Simon Ser <contact@emersion.fr>
> + struct drm_device *dev = plane->dev;
> + struct drm_mode_config *config = &dev->mode_config;
> + struct drm_property_blob *blob;
> +
> + blob = drm_property_create_blob(dev,
> + array_size(sizeof(hints[0]), num_hints),
> + hints);
> + if (IS_ERR(blob))
> + return PTR_ERR(blob);
> +
> + drm_object_attach_property(&plane->base, config->size_hints_property,
> + blob->base.id);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(drm_plane_add_size_hints_property);
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2024-02-27 19:35 ` [PATCH v2 1/2] drm: Introduce " Ville Syrjala
2024-02-27 20:32 ` Sebastian Wick
2024-02-28 10:12 ` Simon Ser
@ 2024-02-28 10:28 ` Daniel Stone
2 siblings, 0 replies; 23+ messages in thread
From: Daniel Stone @ 2024-02-28 10:28 UTC (permalink / raw)
To: Ville Syrjala
Cc: dri-devel, intel-gfx, Simon Ser, Jonas Ådahl,
Sameer Lattannavar, Sebastian Wick, Harry Wentland,
Pekka Paalanen
Hi,
On Tue, 27 Feb 2024 at 19:35, Ville Syrjala
<ville.syrjala@linux.intel.com> wrote:
> Add a new immutable plane property by which a plane can advertise
> a handful of recommended plane sizes. This would be mostly exposed
> by cursor planes as a slightly more capable replacement for
> the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> a one size fits all limit for the whole device.
Acked-by: Daniel Stone <daniels@collabora.com>
Cheers,
Daniel
^ permalink raw reply [flat|nested] 23+ messages in thread
* ✓ Fi.CI.IGT: success for drm: Add plane SIZE_HINTS property (rev5)
2024-02-27 19:35 [PATCH v2 0/2] drm: Add plane SIZE_HINTS property Ville Syrjala
` (3 preceding siblings ...)
2024-02-27 20:24 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2024-02-28 12:01 ` Patchwork
4 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-02-28 12:01 UTC (permalink / raw)
To: Ville Syrjala; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 81281 bytes --]
== Series Details ==
Series: drm: Add plane SIZE_HINTS property (rev5)
URL : https://patchwork.freedesktop.org/series/113758/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_14352_full -> Patchwork_113758v5_full
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (8 -> 8)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in Patchwork_113758v5_full that come from known issues:
### CI changes ###
#### Issues hit ####
* boot:
- shard-rkl: ([PASS][1], [PASS][2], [PASS][3], [PASS][4], [PASS][5], [PASS][6], [PASS][7], [PASS][8], [PASS][9], [PASS][10], [PASS][11], [PASS][12], [PASS][13], [PASS][14], [PASS][15], [PASS][16], [PASS][17], [PASS][18], [PASS][19], [PASS][20], [PASS][21], [PASS][22], [PASS][23], [PASS][24], [PASS][25]) -> ([PASS][26], [PASS][27], [FAIL][28], [PASS][29], [PASS][30], [PASS][31], [PASS][32], [PASS][33], [PASS][34], [PASS][35], [PASS][36], [PASS][37], [PASS][38], [PASS][39], [PASS][40], [PASS][41], [PASS][42], [PASS][43], [PASS][44], [PASS][45], [PASS][46], [PASS][47], [PASS][48], [PASS][49]) ([i915#8293])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-1/boot.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-1/boot.html
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-1/boot.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-1/boot.html
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-2/boot.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-2/boot.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-2/boot.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-2/boot.html
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-3/boot.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-3/boot.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-3/boot.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-3/boot.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-4/boot.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-4/boot.html
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-4/boot.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-5/boot.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-5/boot.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-6/boot.html
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-6/boot.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-6/boot.html
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-6/boot.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-7/boot.html
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-7/boot.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-7/boot.html
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-7/boot.html
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-6/boot.html
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-6/boot.html
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-6/boot.html
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/boot.html
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/boot.html
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/boot.html
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/boot.html
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-4/boot.html
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-4/boot.html
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-4/boot.html
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-4/boot.html
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-4/boot.html
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-2/boot.html
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-2/boot.html
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-2/boot.html
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-1/boot.html
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-1/boot.html
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-2/boot.html
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-1/boot.html
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-1/boot.html
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-7/boot.html
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-7/boot.html
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-7/boot.html
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-7/boot.html
#### Possible fixes ####
* boot:
- shard-glk: ([FAIL][50], [PASS][51], [PASS][52], [PASS][53], [PASS][54], [PASS][55], [PASS][56], [PASS][57], [PASS][58], [PASS][59], [PASS][60], [PASS][61], [PASS][62], [PASS][63], [FAIL][64], [PASS][65], [PASS][66], [PASS][67], [PASS][68], [PASS][69], [PASS][70], [PASS][71], [PASS][72], [PASS][73], [PASS][74]) ([i915#8293]) -> ([PASS][75], [PASS][76], [PASS][77], [PASS][78], [PASS][79], [PASS][80], [PASS][81], [PASS][82], [PASS][83], [PASS][84], [PASS][85], [PASS][86], [PASS][87], [PASS][88], [PASS][89], [PASS][90], [PASS][91], [PASS][92], [PASS][93], [PASS][94], [PASS][95], [PASS][96], [PASS][97], [PASS][98])
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk1/boot.html
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk1/boot.html
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk2/boot.html
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk2/boot.html
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk2/boot.html
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk3/boot.html
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk3/boot.html
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk3/boot.html
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk4/boot.html
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk4/boot.html
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk4/boot.html
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk4/boot.html
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk5/boot.html
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk5/boot.html
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk5/boot.html
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk7/boot.html
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk7/boot.html
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk7/boot.html
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk7/boot.html
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk8/boot.html
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk8/boot.html
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk8/boot.html
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk9/boot.html
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk9/boot.html
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-glk9/boot.html
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk1/boot.html
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk1/boot.html
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk1/boot.html
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk2/boot.html
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk2/boot.html
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk2/boot.html
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk3/boot.html
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk3/boot.html
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk3/boot.html
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk4/boot.html
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk4/boot.html
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk4/boot.html
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk5/boot.html
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk5/boot.html
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk5/boot.html
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk7/boot.html
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk7/boot.html
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk7/boot.html
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk8/boot.html
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk8/boot.html
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk8/boot.html
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk9/boot.html
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk9/boot.html
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk9/boot.html
### IGT changes ###
#### Issues hit ####
* igt@api_intel_bb@blit-reloc-keep-cache:
- shard-dg2: NOTRUN -> [SKIP][99] ([i915#8411])
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@api_intel_bb@blit-reloc-keep-cache.html
* igt@api_intel_bb@render-ccs:
- shard-dg2: NOTRUN -> [FAIL][100] ([i915#10288])
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@api_intel_bb@render-ccs.html
* igt@device_reset@cold-reset-bound:
- shard-mtlp: NOTRUN -> [SKIP][101] ([i915#7701])
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@device_reset@cold-reset-bound.html
* igt@drm_fdinfo@all-busy-check-all:
- shard-dg2: NOTRUN -> [SKIP][102] ([i915#8414]) +1 other test skip
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@drm_fdinfo@all-busy-check-all.html
* igt@drm_fdinfo@virtual-busy-hang:
- shard-mtlp: NOTRUN -> [SKIP][103] ([i915#8414])
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@drm_fdinfo@virtual-busy-hang.html
* igt@gem_basic@multigpu-create-close:
- shard-dg2: NOTRUN -> [SKIP][104] ([i915#7697])
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@gem_basic@multigpu-create-close.html
* igt@gem_ccs@ctrl-surf-copy-new-ctx:
- shard-mtlp: NOTRUN -> [SKIP][105] ([i915#9323])
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@gem_ccs@ctrl-surf-copy-new-ctx.html
* igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0:
- shard-dg2: NOTRUN -> [INCOMPLETE][106] ([i915#7297])
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-6/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0.html
* igt@gem_create@create-ext-cpu-access-sanity-check:
- shard-tglu: NOTRUN -> [SKIP][107] ([i915#6335])
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@gem_create@create-ext-cpu-access-sanity-check.html
* igt@gem_ctx_sseu@engines:
- shard-dg2: NOTRUN -> [SKIP][108] ([i915#280])
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@gem_ctx_sseu@engines.html
* igt@gem_ctx_sseu@mmap-args:
- shard-mtlp: NOTRUN -> [SKIP][109] ([i915#280])
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@gem_ctx_sseu@mmap-args.html
* igt@gem_exec_capture@many-4k-incremental:
- shard-dg2: NOTRUN -> [FAIL][110] ([i915#9606])
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@gem_exec_capture@many-4k-incremental.html
* igt@gem_exec_capture@many-4k-zero:
- shard-mtlp: NOTRUN -> [FAIL][111] ([i915#9606])
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@gem_exec_capture@many-4k-zero.html
* igt@gem_exec_fair@basic-none-share:
- shard-mtlp: NOTRUN -> [SKIP][112] ([i915#4473] / [i915#4771])
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@gem_exec_fair@basic-none-share.html
* igt@gem_exec_fair@basic-none-solo@rcs0:
- shard-rkl: [PASS][113] -> [FAIL][114] ([i915#2842])
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-2/igt@gem_exec_fair@basic-none-solo@rcs0.html
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-1/igt@gem_exec_fair@basic-none-solo@rcs0.html
* igt@gem_exec_fair@basic-none-vip@rcs0:
- shard-glk: NOTRUN -> [FAIL][115] ([i915#2842])
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk4/igt@gem_exec_fair@basic-none-vip@rcs0.html
* igt@gem_exec_fair@basic-pace:
- shard-dg2: NOTRUN -> [SKIP][116] ([i915#3539])
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@gem_exec_fair@basic-pace.html
* igt@gem_exec_fair@basic-pace@rcs0:
- shard-tglu: [PASS][117] -> [FAIL][118] ([i915#2876])
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-tglu-5/igt@gem_exec_fair@basic-pace@rcs0.html
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-8/igt@gem_exec_fair@basic-pace@rcs0.html
* igt@gem_exec_fence@submit3:
- shard-mtlp: NOTRUN -> [SKIP][119] ([i915#4812])
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@gem_exec_fence@submit3.html
* igt@gem_exec_flush@basic-wb-prw-default:
- shard-dg2: NOTRUN -> [SKIP][120] ([i915#3539] / [i915#4852]) +1 other test skip
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@gem_exec_flush@basic-wb-prw-default.html
* igt@gem_exec_gttfill@multigpu-basic:
- shard-mtlp: NOTRUN -> [SKIP][121] ([i915#7697])
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@gem_exec_gttfill@multigpu-basic.html
* igt@gem_exec_reloc@basic-gtt-wc-noreloc:
- shard-rkl: NOTRUN -> [SKIP][122] ([i915#3281]) +1 other test skip
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@gem_exec_reloc@basic-gtt-wc-noreloc.html
* igt@gem_exec_reloc@basic-range-active:
- shard-dg2: NOTRUN -> [SKIP][123] ([i915#3281]) +4 other tests skip
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@gem_exec_reloc@basic-range-active.html
* igt@gem_exec_schedule@preempt-queue-contexts:
- shard-dg2: NOTRUN -> [SKIP][124] ([i915#4537] / [i915#4812])
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@gem_exec_schedule@preempt-queue-contexts.html
* igt@gem_exec_schedule@preempt-queue-contexts-chain:
- shard-mtlp: NOTRUN -> [SKIP][125] ([i915#4537] / [i915#4812])
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@gem_exec_schedule@preempt-queue-contexts-chain.html
* igt@gem_exec_suspend@basic-s0@lmem0:
- shard-dg2: [PASS][126] -> [INCOMPLETE][127] ([i915#9275])
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-dg2-6/igt@gem_exec_suspend@basic-s0@lmem0.html
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-10/igt@gem_exec_suspend@basic-s0@lmem0.html
* igt@gem_exec_whisper@basic-fds-priority-all:
- shard-tglu: [PASS][128] -> [INCOMPLETE][129] ([i915#6755] / [i915#7392] / [i915#9857])
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-tglu-3/igt@gem_exec_whisper@basic-fds-priority-all.html
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-8/igt@gem_exec_whisper@basic-fds-priority-all.html
* igt@gem_lmem_swapping@parallel-random-verify:
- shard-mtlp: NOTRUN -> [SKIP][130] ([i915#4613])
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@gem_lmem_swapping@parallel-random-verify.html
* igt@gem_lmem_swapping@verify-ccs:
- shard-tglu: NOTRUN -> [SKIP][131] ([i915#4613])
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@gem_lmem_swapping@verify-ccs.html
- shard-glk: NOTRUN -> [SKIP][132] ([fdo#109271] / [i915#4613]) +1 other test skip
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk9/igt@gem_lmem_swapping@verify-ccs.html
- shard-rkl: NOTRUN -> [SKIP][133] ([i915#4613])
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@gem_lmem_swapping@verify-ccs.html
* igt@gem_madvise@dontneed-before-pwrite:
- shard-dg2: NOTRUN -> [SKIP][134] ([i915#3282]) +3 other tests skip
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@gem_madvise@dontneed-before-pwrite.html
* igt@gem_media_vme:
- shard-mtlp: NOTRUN -> [SKIP][135] ([i915#284])
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@gem_media_vme.html
* igt@gem_mmap@basic-small-bo:
- shard-dg2: NOTRUN -> [SKIP][136] ([i915#4083]) +1 other test skip
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@gem_mmap@basic-small-bo.html
* igt@gem_mmap_gtt@big-copy-xy:
- shard-dg2: NOTRUN -> [SKIP][137] ([i915#4077]) +8 other tests skip
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@gem_mmap_gtt@big-copy-xy.html
* igt@gem_mmap_gtt@medium-copy:
- shard-mtlp: NOTRUN -> [SKIP][138] ([i915#4077]) +4 other tests skip
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@gem_mmap_gtt@medium-copy.html
* igt@gem_mmap_wc@close:
- shard-mtlp: NOTRUN -> [SKIP][139] ([i915#4083]) +2 other tests skip
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@gem_mmap_wc@close.html
* igt@gem_pxp@create-protected-buffer:
- shard-dg2: NOTRUN -> [SKIP][140] ([i915#4270])
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@gem_pxp@create-protected-buffer.html
* igt@gem_pxp@fail-invalid-protected-context:
- shard-tglu: NOTRUN -> [SKIP][141] ([i915#4270]) +2 other tests skip
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@gem_pxp@fail-invalid-protected-context.html
* igt@gem_pxp@verify-pxp-execution-after-suspend-resume:
- shard-rkl: NOTRUN -> [SKIP][142] ([i915#4270]) +1 other test skip
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@gem_pxp@verify-pxp-execution-after-suspend-resume.html
* igt@gem_pxp@verify-pxp-stale-buf-optout-execution:
- shard-mtlp: NOTRUN -> [SKIP][143] ([i915#4270]) +1 other test skip
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@gem_pxp@verify-pxp-stale-buf-optout-execution.html
* igt@gem_readwrite@read-bad-handle:
- shard-mtlp: NOTRUN -> [SKIP][144] ([i915#3282])
[144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@gem_readwrite@read-bad-handle.html
* igt@gem_render_copy@y-tiled-ccs-to-yf-tiled:
- shard-dg2: NOTRUN -> [SKIP][145] ([i915#5190]) +3 other tests skip
[145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@gem_render_copy@y-tiled-ccs-to-yf-tiled.html
* igt@gem_render_copy@y-tiled-to-vebox-x-tiled:
- shard-mtlp: NOTRUN -> [SKIP][146] ([i915#8428]) +2 other tests skip
[146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@gem_render_copy@y-tiled-to-vebox-x-tiled.html
* igt@gem_set_tiling_vs_blt@untiled-to-tiled:
- shard-mtlp: NOTRUN -> [SKIP][147] ([i915#4079])
[147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html
* igt@gem_softpin@evict-snoop:
- shard-dg2: NOTRUN -> [SKIP][148] ([i915#4885])
[148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@gem_softpin@evict-snoop.html
* igt@gem_userptr_blits@create-destroy-unsync:
- shard-dg2: NOTRUN -> [SKIP][149] ([i915#3297]) +2 other tests skip
[149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@gem_userptr_blits@create-destroy-unsync.html
* igt@gem_userptr_blits@readonly-unsync:
- shard-tglu: NOTRUN -> [SKIP][150] ([i915#3297])
[150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@gem_userptr_blits@readonly-unsync.html
* igt@gem_userptr_blits@relocations:
- shard-mtlp: NOTRUN -> [SKIP][151] ([i915#3281]) +7 other tests skip
[151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@gem_userptr_blits@relocations.html
* igt@gem_userptr_blits@unsync-unmap-after-close:
- shard-mtlp: NOTRUN -> [SKIP][152] ([i915#3297])
[152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@gem_userptr_blits@unsync-unmap-after-close.html
* igt@gen7_exec_parse@basic-allocation:
- shard-dg2: NOTRUN -> [SKIP][153] ([fdo#109289])
[153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@gen7_exec_parse@basic-allocation.html
* igt@gen7_exec_parse@batch-without-end:
- shard-tglu: NOTRUN -> [SKIP][154] ([fdo#109289])
[154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@gen7_exec_parse@batch-without-end.html
* igt@gen9_exec_parse@allowed-single:
- shard-mtlp: NOTRUN -> [SKIP][155] ([i915#2856]) +2 other tests skip
[155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@gen9_exec_parse@allowed-single.html
* igt@gen9_exec_parse@shadow-peek:
- shard-dg2: NOTRUN -> [SKIP][156] ([i915#2856]) +1 other test skip
[156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@gen9_exec_parse@shadow-peek.html
* igt@i915_module_load@load:
- shard-tglu: NOTRUN -> [SKIP][157] ([i915#6227])
[157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@i915_module_load@load.html
- shard-glk: NOTRUN -> [SKIP][158] ([fdo#109271] / [i915#6227])
[158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk1/igt@i915_module_load@load.html
* igt@i915_module_load@reload-with-fault-injection:
- shard-dg2: [PASS][159] -> [INCOMPLETE][160] ([i915#10137] / [i915#9820] / [i915#9849])
[159]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-dg2-1/igt@i915_module_load@reload-with-fault-injection.html
[160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-10/igt@i915_module_load@reload-with-fault-injection.html
* igt@i915_pm_rc6_residency@rc6-fence@gt0:
- shard-tglu: NOTRUN -> [WARN][161] ([i915#2681])
[161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@i915_pm_rc6_residency@rc6-fence@gt0.html
* igt@i915_pm_rpm@gem-mmap-type@gtt-smem0:
- shard-mtlp: NOTRUN -> [SKIP][162] ([i915#8431])
[162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@i915_pm_rpm@gem-mmap-type@gtt-smem0.html
* igt@i915_pm_rps@thresholds-park@gt0:
- shard-mtlp: NOTRUN -> [SKIP][163] ([i915#8925])
[163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@i915_pm_rps@thresholds-park@gt0.html
* igt@i915_pm_rps@thresholds-park@gt1:
- shard-mtlp: NOTRUN -> [SKIP][164] ([i915#3555] / [i915#8925])
[164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@i915_pm_rps@thresholds-park@gt1.html
* igt@i915_query@query-topology-known-pci-ids:
- shard-dg2: NOTRUN -> [SKIP][165] ([fdo#109303])
[165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@i915_query@query-topology-known-pci-ids.html
* igt@i915_query@query-topology-unsupported:
- shard-dg2: NOTRUN -> [SKIP][166] ([fdo#109302])
[166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@i915_query@query-topology-unsupported.html
* igt@kms_addfb_basic@clobberred-modifier:
- shard-mtlp: NOTRUN -> [SKIP][167] ([i915#4212]) +1 other test skip
[167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_addfb_basic@clobberred-modifier.html
* igt@kms_addfb_basic@tile-pitch-mismatch:
- shard-dg2: NOTRUN -> [SKIP][168] ([i915#4212])
[168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_addfb_basic@tile-pitch-mismatch.html
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-2-y-rc-ccs-cc:
- shard-rkl: NOTRUN -> [SKIP][169] ([i915#8709]) +3 other tests skip
[169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-1/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-2-y-rc-ccs-cc.html
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-1-4-mc-ccs:
- shard-dg2: NOTRUN -> [SKIP][170] ([i915#8709]) +11 other tests skip
[170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-10/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-1-4-mc-ccs.html
* igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
- shard-mtlp: NOTRUN -> [SKIP][171] ([i915#1769] / [i915#3555])
[171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip:
- shard-tglu: NOTRUN -> [SKIP][172] ([fdo#111615] / [i915#5286]) +1 other test skip
[172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip:
- shard-rkl: NOTRUN -> [SKIP][173] ([i915#5286])
[173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
* igt@kms_big_fb@x-tiled-16bpp-rotate-90:
- shard-dg2: NOTRUN -> [SKIP][174] ([fdo#111614]) +1 other test skip
[174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html
* igt@kms_big_fb@x-tiled-64bpp-rotate-90:
- shard-mtlp: NOTRUN -> [SKIP][175] ([fdo#111614])
[175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_big_fb@x-tiled-64bpp-rotate-90.html
* igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip:
- shard-tglu: [PASS][176] -> [FAIL][177] ([i915#3743]) +1 other test fail
[176]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-tglu-8/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html
[177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-6/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html
* igt@kms_big_fb@y-tiled-32bpp-rotate-180:
- shard-rkl: [PASS][178] -> [INCOMPLETE][179] ([i915#9538])
[178]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-7/igt@kms_big_fb@y-tiled-32bpp-rotate-180.html
[179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-4/igt@kms_big_fb@y-tiled-32bpp-rotate-180.html
* igt@kms_big_fb@y-tiled-8bpp-rotate-270:
- shard-rkl: NOTRUN -> [SKIP][180] ([fdo#111614] / [i915#3638]) +1 other test skip
[180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_big_fb@y-tiled-8bpp-rotate-270.html
- shard-tglu: NOTRUN -> [SKIP][181] ([fdo#111614]) +1 other test skip
[181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@kms_big_fb@y-tiled-8bpp-rotate-270.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip:
- shard-mtlp: NOTRUN -> [SKIP][182] ([fdo#111615]) +4 other tests skip
[182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html
* igt@kms_big_fb@yf-tiled-32bpp-rotate-90:
- shard-dg2: NOTRUN -> [SKIP][183] ([i915#4538] / [i915#5190]) +4 other tests skip
[183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_big_fb@yf-tiled-32bpp-rotate-90.html
* igt@kms_big_fb@yf-tiled-64bpp-rotate-180:
- shard-glk: NOTRUN -> [SKIP][184] ([fdo#109271]) +110 other tests skip
[184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk4/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
* igt@kms_big_fb@yf-tiled-8bpp-rotate-90:
- shard-rkl: NOTRUN -> [SKIP][185] ([fdo#110723])
[185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_big_fb@yf-tiled-8bpp-rotate-90.html
- shard-tglu: NOTRUN -> [SKIP][186] ([fdo#111615])
[186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@kms_big_fb@yf-tiled-8bpp-rotate-90.html
* igt@kms_big_fb@yf-tiled-addfb:
- shard-mtlp: NOTRUN -> [SKIP][187] ([i915#6187])
[187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@kms_big_fb@yf-tiled-addfb.html
* igt@kms_big_joiner@invalid-modeset:
- shard-dg2: NOTRUN -> [SKIP][188] ([i915#2705]) +1 other test skip
[188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_big_joiner@invalid-modeset.html
* igt@kms_cdclk@mode-transition:
- shard-rkl: NOTRUN -> [SKIP][189] ([i915#3742])
[189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_cdclk@mode-transition.html
- shard-tglu: NOTRUN -> [SKIP][190] ([i915#3742])
[190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@kms_cdclk@mode-transition.html
* igt@kms_cdclk@plane-scaling@pipe-c-edp-1:
- shard-mtlp: NOTRUN -> [SKIP][191] ([i915#4087]) +3 other tests skip
[191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_cdclk@plane-scaling@pipe-c-edp-1.html
* igt@kms_chamelium_audio@hdmi-audio-edid:
- shard-mtlp: NOTRUN -> [SKIP][192] ([i915#7828]) +4 other tests skip
[192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@kms_chamelium_audio@hdmi-audio-edid.html
* igt@kms_chamelium_color@ctm-negative:
- shard-dg2: NOTRUN -> [SKIP][193] ([fdo#111827])
[193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_chamelium_color@ctm-negative.html
* igt@kms_chamelium_edid@hdmi-mode-timings:
- shard-tglu: NOTRUN -> [SKIP][194] ([i915#7828]) +4 other tests skip
[194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@kms_chamelium_edid@hdmi-mode-timings.html
* igt@kms_chamelium_frames@hdmi-crc-multiple:
- shard-dg2: NOTRUN -> [SKIP][195] ([i915#7828]) +5 other tests skip
[195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-1/igt@kms_chamelium_frames@hdmi-crc-multiple.html
* igt@kms_chamelium_hpd@vga-hpd-after-suspend:
- shard-rkl: NOTRUN -> [SKIP][196] ([i915#7828]) +1 other test skip
[196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_chamelium_hpd@vga-hpd-after-suspend.html
* igt@kms_content_protection@dp-mst-lic-type-1:
- shard-dg2: NOTRUN -> [SKIP][197] ([i915#3299])
[197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_content_protection@dp-mst-lic-type-1.html
* igt@kms_content_protection@srm:
- shard-mtlp: NOTRUN -> [SKIP][198] ([i915#6944])
[198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@kms_content_protection@srm.html
* igt@kms_cursor_crc@cursor-random-32x10:
- shard-tglu: NOTRUN -> [SKIP][199] ([i915#3555]) +1 other test skip
[199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@kms_cursor_crc@cursor-random-32x10.html
- shard-rkl: NOTRUN -> [SKIP][200] ([i915#3555])
[200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_cursor_crc@cursor-random-32x10.html
* igt@kms_cursor_crc@cursor-random-512x170:
- shard-dg2: NOTRUN -> [SKIP][201] ([i915#3359])
[201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_cursor_crc@cursor-random-512x170.html
* igt@kms_cursor_crc@cursor-random-max-size:
- shard-mtlp: NOTRUN -> [SKIP][202] ([i915#3555] / [i915#8814]) +1 other test skip
[202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_cursor_crc@cursor-random-max-size.html
* igt@kms_cursor_crc@cursor-sliding-256x85:
- shard-mtlp: NOTRUN -> [SKIP][203] ([i915#8814]) +1 other test skip
[203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_cursor_crc@cursor-sliding-256x85.html
* igt@kms_cursor_edge_walk@256x256-top-edge@pipe-d-edp-1:
- shard-mtlp: [PASS][204] -> [DMESG-WARN][205] ([i915#9157])
[204]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-mtlp-8/igt@kms_cursor_edge_walk@256x256-top-edge@pipe-d-edp-1.html
[205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_cursor_edge_walk@256x256-top-edge@pipe-d-edp-1.html
* igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
- shard-tglu: NOTRUN -> [SKIP][206] ([fdo#109274])
[206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html
* igt@kms_cursor_legacy@cursora-vs-flipb-atomic:
- shard-mtlp: NOTRUN -> [SKIP][207] ([i915#9809]) +2 other tests skip
[207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@kms_cursor_legacy@cursora-vs-flipb-atomic.html
* igt@kms_cursor_legacy@cursora-vs-flipb-toggle:
- shard-rkl: NOTRUN -> [SKIP][208] ([fdo#111825]) +3 other tests skip
[208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-2/igt@kms_cursor_legacy@cursora-vs-flipb-toggle.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size:
- shard-dg2: NOTRUN -> [SKIP][209] ([fdo#109274] / [i915#5354]) +1 other test skip
[209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html
* igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot:
- shard-mtlp: NOTRUN -> [SKIP][210] ([i915#9067])
[210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
- shard-dg2: NOTRUN -> [SKIP][211] ([i915#4103] / [i915#4213])
[211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
* igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-1:
- shard-rkl: NOTRUN -> [SKIP][212] ([fdo#110189] / [i915#9723])
[212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-4/igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-1.html
* igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-2:
- shard-dg2: NOTRUN -> [SKIP][213] ([fdo#110189] / [i915#9227])
[213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-2.html
* igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-vga-1:
- shard-snb: NOTRUN -> [SKIP][214] ([fdo#109271] / [fdo#110189])
[214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-snb7/igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-vga-1.html
* igt@kms_display_modes@extended-mode-basic:
- shard-snb: NOTRUN -> [SKIP][215] ([fdo#109271])
[215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-snb6/igt@kms_display_modes@extended-mode-basic.html
* igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-1:
- shard-rkl: NOTRUN -> [SKIP][216] ([i915#3804])
[216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-1.html
- shard-tglu: NOTRUN -> [SKIP][217] ([i915#3804])
[217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-1.html
* igt@kms_dsc@dsc-basic:
- shard-mtlp: NOTRUN -> [SKIP][218] ([i915#3555] / [i915#3840] / [i915#9159])
[218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_dsc@dsc-basic.html
* igt@kms_dsc@dsc-with-bpc:
- shard-tglu: NOTRUN -> [SKIP][219] ([i915#3555] / [i915#3840])
[219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@kms_dsc@dsc-with-bpc.html
* igt@kms_dsc@dsc-with-output-formats:
- shard-dg2: NOTRUN -> [SKIP][220] ([i915#3555] / [i915#3840])
[220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_dsc@dsc-with-output-formats.html
* igt@kms_feature_discovery@psr2:
- shard-dg2: NOTRUN -> [SKIP][221] ([i915#658])
[221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_feature_discovery@psr2.html
* igt@kms_fence_pin_leak:
- shard-dg2: NOTRUN -> [SKIP][222] ([i915#4881])
[222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_fence_pin_leak.html
* igt@kms_flip@2x-flip-vs-fences:
- shard-dg2: NOTRUN -> [SKIP][223] ([i915#8381])
[223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_flip@2x-flip-vs-fences.html
* igt@kms_flip@2x-flip-vs-panning:
- shard-dg2: NOTRUN -> [SKIP][224] ([fdo#109274])
[224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_flip@2x-flip-vs-panning.html
* igt@kms_flip@2x-flip-vs-rmfb-interruptible:
- shard-mtlp: NOTRUN -> [SKIP][225] ([fdo#111767] / [i915#3637])
[225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_flip@2x-flip-vs-rmfb-interruptible.html
* igt@kms_flip@2x-flip-vs-suspend:
- shard-mtlp: NOTRUN -> [SKIP][226] ([i915#3637])
[226]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@kms_flip@2x-flip-vs-suspend.html
* igt@kms_flip@2x-nonexisting-fb-interruptible:
- shard-tglu: NOTRUN -> [SKIP][227] ([fdo#109274] / [i915#3637]) +3 other tests skip
[227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@kms_flip@2x-nonexisting-fb-interruptible.html
* igt@kms_flip@flip-vs-fences:
- shard-mtlp: NOTRUN -> [SKIP][228] ([i915#8381])
[228]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_flip@flip-vs-fences.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode:
- shard-dg2: NOTRUN -> [SKIP][229] ([i915#2672])
[229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling@pipe-a-valid-mode:
- shard-tglu: NOTRUN -> [SKIP][230] ([i915#2587] / [i915#2672]) +1 other test skip
[230]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling@pipe-a-default-mode:
- shard-mtlp: NOTRUN -> [SKIP][231] ([i915#2672]) +1 other test skip
[231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling@pipe-a-default-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-32bpp-xtile-downscaling@pipe-a-default-mode:
- shard-mtlp: NOTRUN -> [SKIP][232] ([i915#3555] / [i915#8810]) +1 other test skip
[232]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-32bpp-xtile-downscaling@pipe-a-default-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling@pipe-a-valid-mode:
- shard-rkl: NOTRUN -> [SKIP][233] ([i915#2672]) +1 other test skip
[233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode:
- shard-dg2: NOTRUN -> [SKIP][234] ([i915#2672] / [i915#3555])
[234]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-pwrite:
- shard-dg2: [PASS][235] -> [FAIL][236] ([i915#6880])
[235]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-dg2-1/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-pwrite.html
[236]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-pwrite.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-blt:
- shard-mtlp: NOTRUN -> [SKIP][237] ([i915#1825]) +22 other tests skip
[237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt:
- shard-dg2: NOTRUN -> [SKIP][238] ([i915#8708]) +8 other tests skip
[238]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-plflip-blt:
- shard-rkl: NOTRUN -> [SKIP][239] ([fdo#111825] / [i915#1825]) +6 other tests skip
[239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-plflip-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-pwrite:
- shard-snb: [PASS][240] -> [SKIP][241] ([fdo#109271]) +6 other tests skip
[240]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-snb7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-pwrite.html
[241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-snb6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-pwrite.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move:
- shard-rkl: NOTRUN -> [SKIP][242] ([i915#3023]) +5 other tests skip
[242]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-render:
- shard-dg2: NOTRUN -> [SKIP][243] ([fdo#111767] / [i915#5354]) +1 other test skip
[243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@plane-fbc-rte:
- shard-rkl: NOTRUN -> [SKIP][244] ([i915#10070])
[244]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_frontbuffer_tracking@plane-fbc-rte.html
- shard-tglu: NOTRUN -> [SKIP][245] ([i915#10070])
[245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@kms_frontbuffer_tracking@plane-fbc-rte.html
* igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-indfb-draw-mmap-cpu:
- shard-tglu: NOTRUN -> [SKIP][246] ([fdo#110189]) +10 other tests skip
[246]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-indfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-mmap-gtt:
- shard-mtlp: NOTRUN -> [SKIP][247] ([i915#8708]) +2 other tests skip
[247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move:
- shard-dg2: NOTRUN -> [SKIP][248] ([i915#3458]) +11 other tests skip
[248]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-render:
- shard-tglu: NOTRUN -> [SKIP][249] ([fdo#109280]) +16 other tests skip
[249]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-mmap-cpu:
- shard-dg2: NOTRUN -> [SKIP][250] ([i915#5354]) +13 other tests skip
[250]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-mmap-cpu.html
* igt@kms_plane_lowres@tiling-yf:
- shard-mtlp: NOTRUN -> [SKIP][251] ([i915#3555] / [i915#8821])
[251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_plane_lowres@tiling-yf.html
* igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers@pipe-a-hdmi-a-3:
- shard-dg2: NOTRUN -> [SKIP][252] ([i915#9423]) +3 other tests skip
[252]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-1/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers@pipe-a-hdmi-a-3.html
* igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-a-hdmi-a-2:
- shard-rkl: NOTRUN -> [SKIP][253] ([i915#9423]) +5 other tests skip
[253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-1/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-a-hdmi-a-2.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-a-edp-1:
- shard-mtlp: NOTRUN -> [SKIP][254] ([i915#5235]) +5 other tests skip
[254]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-a-edp-1.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-d-edp-1:
- shard-mtlp: NOTRUN -> [SKIP][255] ([i915#3555] / [i915#5235]) +1 other test skip
[255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-d-edp-1.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-b-hdmi-a-1:
- shard-rkl: NOTRUN -> [SKIP][256] ([i915#5235]) +3 other tests skip
[256]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-2/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-b-hdmi-a-1.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-c-hdmi-a-2:
- shard-dg2: NOTRUN -> [SKIP][257] ([i915#5235] / [i915#9423]) +11 other tests skip
[257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-c-hdmi-a-2.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-a-hdmi-a-1:
- shard-tglu: NOTRUN -> [SKIP][258] ([i915#5235]) +3 other tests skip
[258]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-a-hdmi-a-1.html
* igt@kms_pm_dc@dc5-dpms-negative:
- shard-mtlp: NOTRUN -> [SKIP][259] ([i915#9293])
[259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@kms_pm_dc@dc5-dpms-negative.html
* igt@kms_pm_dc@dc6-dpms:
- shard-rkl: NOTRUN -> [SKIP][260] ([i915#3361])
[260]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-2/igt@kms_pm_dc@dc6-dpms.html
* igt@kms_pm_dc@dc6-psr:
- shard-tglu: NOTRUN -> [SKIP][261] ([i915#9685])
[261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@kms_pm_dc@dc6-psr.html
* igt@kms_pm_lpsp@kms-lpsp:
- shard-dg2: NOTRUN -> [SKIP][262] ([i915#9340])
[262]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_pm_lpsp@kms-lpsp.html
* igt@kms_pm_lpsp@screens-disabled:
- shard-mtlp: NOTRUN -> [SKIP][263] ([i915#8430])
[263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_pm_lpsp@screens-disabled.html
* igt@kms_pm_rpm@dpms-lpsp:
- shard-dg2: [PASS][264] -> [SKIP][265] ([i915#9519]) +1 other test skip
[264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-dg2-10/igt@kms_pm_rpm@dpms-lpsp.html
[265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_pm_rpm@dpms-lpsp.html
* igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
- shard-mtlp: NOTRUN -> [SKIP][266] ([i915#9519])
[266]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
* igt@kms_pm_rpm@dpms-non-lpsp:
- shard-rkl: [PASS][267] -> [SKIP][268] ([i915#9519])
[267]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-1/igt@kms_pm_rpm@dpms-non-lpsp.html
[268]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-7/igt@kms_pm_rpm@dpms-non-lpsp.html
* igt@kms_pm_rpm@modeset-pc8-residency-stress:
- shard-mtlp: NOTRUN -> [SKIP][269] ([fdo#109293])
[269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_pm_rpm@modeset-pc8-residency-stress.html
* igt@kms_prime@basic-crc-vgem:
- shard-dg2: NOTRUN -> [SKIP][270] ([i915#6524] / [i915#6805])
[270]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_prime@basic-crc-vgem.html
* igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf:
- shard-dg2: NOTRUN -> [SKIP][271] ([fdo#110189])
[271]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@fbc-plane-move-sf-dmg-area@psr2-pipe-a-edp-1:
- shard-mtlp: NOTRUN -> [SKIP][272] ([i915#9808]) +3 other tests skip
[272]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_psr2_sf@fbc-plane-move-sf-dmg-area@psr2-pipe-a-edp-1.html
* igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf:
- shard-rkl: NOTRUN -> [SKIP][273] ([fdo#110189])
[273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-big-fb:
- shard-glk: NOTRUN -> [SKIP][274] ([fdo#109271] / [fdo#110189]) +1 other test skip
[274]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk4/igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-big-fb.html
* igt@kms_psr@fbc-psr-primary-blt:
- shard-dg2: NOTRUN -> [SKIP][275] ([i915#9732]) +11 other tests skip
[275]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_psr@fbc-psr-primary-blt.html
* igt@kms_psr@fbc-psr2-no-drrs:
- shard-tglu: NOTRUN -> [SKIP][276] ([i915#9732]) +9 other tests skip
[276]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@kms_psr@fbc-psr2-no-drrs.html
* igt@kms_psr@fbc-psr2-primary-mmap-gtt@edp-1:
- shard-mtlp: NOTRUN -> [SKIP][277] ([i915#9688]) +5 other tests skip
[277]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@kms_psr@fbc-psr2-primary-mmap-gtt@edp-1.html
* igt@kms_psr@psr-suspend:
- shard-rkl: NOTRUN -> [SKIP][278] ([i915#9732]) +3 other tests skip
[278]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_psr@psr-suspend.html
* igt@kms_rotation_crc@primary-y-tiled-reflect-x-90:
- shard-dg2: NOTRUN -> [SKIP][279] ([i915#4235] / [i915#5190])
[279]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
- shard-tglu: NOTRUN -> [SKIP][280] ([fdo#111615] / [i915#5289])
[280]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
* igt@kms_setmode@basic@pipe-a-vga-1-pipe-b-hdmi-a-1:
- shard-snb: NOTRUN -> [FAIL][281] ([i915#5465]) +3 other tests fail
[281]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-snb7/igt@kms_setmode@basic@pipe-a-vga-1-pipe-b-hdmi-a-1.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1:
- shard-snb: [PASS][282] -> [FAIL][283] ([i915#9196])
[282]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-snb5/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html
[283]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-snb4/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-3:
- shard-dg2: [PASS][284] -> [FAIL][285] ([i915#9196])
[284]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-dg2-6/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-3.html
[285]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-6/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-3.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1:
- shard-tglu: [PASS][286] -> [FAIL][287] ([i915#9196])
[286]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-tglu-2/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1.html
[287]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-2/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1.html
* igt@kms_writeback@writeback-fb-id:
- shard-dg2: NOTRUN -> [SKIP][288] ([i915#2437])
[288]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_writeback@writeback-fb-id.html
* igt@kms_writeback@writeback-pixel-formats:
- shard-tglu: NOTRUN -> [SKIP][289] ([i915#2437] / [i915#9412])
[289]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@kms_writeback@writeback-pixel-formats.html
- shard-glk: NOTRUN -> [SKIP][290] ([fdo#109271] / [i915#2437]) +1 other test skip
[290]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-glk9/igt@kms_writeback@writeback-pixel-formats.html
- shard-rkl: NOTRUN -> [SKIP][291] ([i915#2437] / [i915#9412])
[291]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_writeback@writeback-pixel-formats.html
* igt@perf@gen8-unprivileged-single-ctx-counters:
- shard-dg2: NOTRUN -> [SKIP][292] ([i915#2436] / [i915#7387])
[292]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@perf@gen8-unprivileged-single-ctx-counters.html
* igt@perf@unprivileged-single-ctx-counters:
- shard-mtlp: NOTRUN -> [SKIP][293] ([fdo#109289])
[293]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@perf@unprivileged-single-ctx-counters.html
* igt@perf_pmu@frequency@gt0:
- shard-dg2: NOTRUN -> [FAIL][294] ([i915#6806])
[294]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-1/igt@perf_pmu@frequency@gt0.html
* igt@prime_vgem@basic-fence-flip:
- shard-dg2: NOTRUN -> [SKIP][295] ([i915#3708])
[295]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@prime_vgem@basic-fence-flip.html
* igt@prime_vgem@basic-fence-read:
- shard-mtlp: NOTRUN -> [SKIP][296] ([i915#3708])
[296]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-5/igt@prime_vgem@basic-fence-read.html
* igt@prime_vgem@basic-read:
- shard-rkl: NOTRUN -> [SKIP][297] ([fdo#109295] / [i915#3291] / [i915#3708])
[297]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@prime_vgem@basic-read.html
* igt@prime_vgem@fence-write-hang:
- shard-tglu: NOTRUN -> [SKIP][298] ([fdo#109295])
[298]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@prime_vgem@fence-write-hang.html
- shard-rkl: NOTRUN -> [SKIP][299] ([fdo#109295] / [i915#3708])
[299]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@prime_vgem@fence-write-hang.html
* igt@sriov_basic@enable-vfs-autoprobe-on:
- shard-tglu: NOTRUN -> [SKIP][300] ([i915#9917])
[300]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@sriov_basic@enable-vfs-autoprobe-on.html
- shard-rkl: NOTRUN -> [SKIP][301] ([i915#9917])
[301]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@sriov_basic@enable-vfs-autoprobe-on.html
* igt@syncobj_wait@invalid-wait-zero-handles:
- shard-rkl: NOTRUN -> [FAIL][302] ([i915#9779])
[302]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@syncobj_wait@invalid-wait-zero-handles.html
- shard-tglu: NOTRUN -> [FAIL][303] ([i915#9779])
[303]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@syncobj_wait@invalid-wait-zero-handles.html
* igt@v3d/v3d_get_param@base-params:
- shard-mtlp: NOTRUN -> [SKIP][304] ([i915#2575]) +5 other tests skip
[304]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@v3d/v3d_get_param@base-params.html
* igt@v3d/v3d_perfmon@create-two-perfmon:
- shard-rkl: NOTRUN -> [SKIP][305] ([fdo#109315]) +2 other tests skip
[305]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@v3d/v3d_perfmon@create-two-perfmon.html
* igt@v3d/v3d_submit_cl@bad-flag:
- shard-tglu: NOTRUN -> [SKIP][306] ([fdo#109315] / [i915#2575]) +5 other tests skip
[306]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-4/igt@v3d/v3d_submit_cl@bad-flag.html
* igt@v3d/v3d_submit_csd@bad-in-sync:
- shard-dg2: NOTRUN -> [SKIP][307] ([i915#2575]) +4 other tests skip
[307]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@v3d/v3d_submit_csd@bad-in-sync.html
* igt@vc4/vc4_purgeable_bo@access-purgeable-bo-mem:
- shard-mtlp: NOTRUN -> [SKIP][308] ([i915#7711]) +2 other tests skip
[308]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-7/igt@vc4/vc4_purgeable_bo@access-purgeable-bo-mem.html
* igt@vc4/vc4_tiling@get-after-free:
- shard-tglu: NOTRUN -> [SKIP][309] ([i915#2575]) +3 other tests skip
[309]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@vc4/vc4_tiling@get-after-free.html
* igt@vc4/vc4_tiling@get-bad-modifier:
- shard-dg2: NOTRUN -> [SKIP][310] ([i915#7711]) +3 other tests skip
[310]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-2/igt@vc4/vc4_tiling@get-bad-modifier.html
* igt@vc4/vc4_tiling@set-bad-modifier:
- shard-rkl: NOTRUN -> [SKIP][311] ([i915#7711]) +2 other tests skip
[311]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@vc4/vc4_tiling@set-bad-modifier.html
#### Possible fixes ####
* igt@drm_fdinfo@most-busy-idle-check-all@rcs0:
- shard-rkl: [FAIL][312] ([i915#7742]) -> [PASS][313]
[312]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-3/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html
[313]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-2/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html
* igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-lmem0-lmem0:
- shard-dg2: [INCOMPLETE][314] ([i915#7297]) -> [PASS][315]
[314]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-dg2-6/igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-lmem0-lmem0.html
[315]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-6/igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-lmem0-lmem0.html
* igt@gem_exec_fair@basic-pace-share@rcs0:
- shard-tglu: [FAIL][316] ([i915#2842]) -> [PASS][317]
[316]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-tglu-7/igt@gem_exec_fair@basic-pace-share@rcs0.html
[317]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-3/igt@gem_exec_fair@basic-pace-share@rcs0.html
* igt@gem_exec_gttfill@engines@vcs0:
- shard-rkl: [INCOMPLETE][318] ([i915#10137]) -> [PASS][319]
[318]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-2/igt@gem_exec_gttfill@engines@vcs0.html
[319]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-2/igt@gem_exec_gttfill@engines@vcs0.html
* igt@i915_module_load@reload-with-fault-injection:
- shard-rkl: [ABORT][320] ([i915#9820]) -> [PASS][321]
[320]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-3/igt@i915_module_load@reload-with-fault-injection.html
[321]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@i915_module_load@reload-with-fault-injection.html
- shard-tglu: [INCOMPLETE][322] ([i915#10137]) -> [PASS][323]
[322]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-tglu-2/igt@i915_module_load@reload-with-fault-injection.html
[323]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-10/igt@i915_module_load@reload-with-fault-injection.html
* igt@kms_big_fb@4-tiled-64bpp-rotate-180:
- shard-mtlp: [FAIL][324] ([i915#3763] / [i915#5138]) -> [PASS][325]
[324]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-mtlp-6/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html
[325]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-8/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
- shard-tglu: [FAIL][326] ([i915#3743]) -> [PASS][327]
[326]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-tglu-2/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
[327]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-3/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
* igt@kms_cursor_legacy@2x-flip-vs-cursor-atomic:
- shard-snb: [SKIP][328] ([fdo#109271] / [fdo#111767]) -> [PASS][329] +1 other test pass
[328]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-snb4/igt@kms_cursor_legacy@2x-flip-vs-cursor-atomic.html
[329]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-snb7/igt@kms_cursor_legacy@2x-flip-vs-cursor-atomic.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-pwrite:
- shard-snb: [SKIP][330] ([fdo#109271]) -> [PASS][331] +8 other tests pass
[330]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-snb2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-pwrite.html
[331]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-snb7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-pwrite.html
* igt@kms_pm_rpm@dpms-lpsp:
- shard-rkl: [SKIP][332] ([i915#9519]) -> [PASS][333]
[332]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-3/igt@kms_pm_rpm@dpms-lpsp.html
[333]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-2/igt@kms_pm_rpm@dpms-lpsp.html
* igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
- shard-dg2: [SKIP][334] ([i915#9519]) -> [PASS][335]
[334]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-dg2-10/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
[335]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-1/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
* igt@kms_pm_rpm@i2c:
- shard-dg2: [FAIL][336] ([i915#8717]) -> [PASS][337]
[336]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-dg2-2/igt@kms_pm_rpm@i2c.html
[337]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-5/igt@kms_pm_rpm@i2c.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1:
- shard-tglu: [FAIL][338] ([i915#9196]) -> [PASS][339] +1 other test pass
[338]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-tglu-2/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1.html
[339]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-tglu-2/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1.html
* igt@perf@non-zero-reason@0-rcs0:
- shard-dg2: [FAIL][340] ([i915#7484]) -> [PASS][341]
[340]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-dg2-2/igt@perf@non-zero-reason@0-rcs0.html
[341]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-dg2-1/igt@perf@non-zero-reason@0-rcs0.html
* igt@perf_pmu@busy-double-start@bcs0:
- shard-mtlp: [FAIL][342] ([i915#4349]) -> [PASS][343]
[342]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-mtlp-7/igt@perf_pmu@busy-double-start@bcs0.html
[343]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-6/igt@perf_pmu@busy-double-start@bcs0.html
#### Warnings ####
* igt@i915_module_load@reload-with-fault-injection:
- shard-mtlp: [ABORT][344] ([i915#10131] / [i915#9820]) -> [ABORT][345] ([i915#10131] / [i915#9697])
[344]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-mtlp-7/igt@i915_module_load@reload-with-fault-injection.html
[345]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-mtlp-6/igt@i915_module_load@reload-with-fault-injection.html
* igt@kms_content_protection@lic-type-1:
- shard-snb: [INCOMPLETE][346] ([i915#10137]) -> [SKIP][347] ([fdo#109271])
[346]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-snb7/igt@kms_content_protection@lic-type-1.html
[347]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-snb6/igt@kms_content_protection@lic-type-1.html
* igt@kms_content_protection@mei-interface:
- shard-snb: [SKIP][348] ([fdo#109271]) -> [INCOMPLETE][349] ([i915#9878])
[348]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-snb4/igt@kms_content_protection@mei-interface.html
[349]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-snb7/igt@kms_content_protection@mei-interface.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-rkl: [SKIP][350] ([i915#3955]) -> [SKIP][351] ([fdo#110189] / [i915#3955])
[350]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-rkl-3/igt@kms_fbcon_fbt@psr-suspend.html
[351]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-rkl-5/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-mmap-wc:
- shard-snb: [SKIP][352] ([fdo#109271] / [fdo#111767]) -> [SKIP][353] ([fdo#109271])
[352]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14352/shard-snb4/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-mmap-wc.html
[353]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/shard-snb7/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-mmap-wc.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
[fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
[fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
[fdo#109293]: https://bugs.freedesktop.org/show_bug.cgi?id=109293
[fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
[fdo#109302]: https://bugs.freedesktop.org/show_bug.cgi?id=109302
[fdo#109303]: https://bugs.freedesktop.org/show_bug.cgi?id=109303
[fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
[fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189
[fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
[fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
[fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
[fdo#111767]: https://bugs.freedesktop.org/show_bug.cgi?id=111767
[fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
[fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
[i915#10070]: https://gitlab.freedesktop.org/drm/intel/issues/10070
[i915#10131]: https://gitlab.freedesktop.org/drm/intel/issues/10131
[i915#10137]: https://gitlab.freedesktop.org/drm/intel/issues/10137
[i915#10278]: https://gitlab.freedesktop.org/drm/intel/issues/10278
[i915#10288]: https://gitlab.freedesktop.org/drm/intel/issues/10288
[i915#10307]: https://gitlab.freedesktop.org/drm/intel/issues/10307
[i915#1769]: https://gitlab.freedesktop.org/drm/intel/issues/1769
[i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
[i915#2436]: https://gitlab.freedesktop.org/drm/intel/issues/2436
[i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
[i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
[i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
[i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
[i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
[i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
[i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
[i915#284]: https://gitlab.freedesktop.org/drm/intel/issues/284
[i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
[i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
[i915#2876]: https://gitlab.freedesktop.org/drm/intel/issues/2876
[i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023
[i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
[i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
[i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
[i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
[i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
[i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
[i915#3361]: https://gitlab.freedesktop.org/drm/intel/issues/3361
[i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
[i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
[i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
[i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
[i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
[i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
[i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
[i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743
[i915#3763]: https://gitlab.freedesktop.org/drm/intel/issues/3763
[i915#3804]: https://gitlab.freedesktop.org/drm/intel/issues/3804
[i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
[i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
[i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
[i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
[i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
[i915#4087]: https://gitlab.freedesktop.org/drm/intel/issues/4087
[i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
[i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
[i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213
[i915#4235]: https://gitlab.freedesktop.org/drm/intel/issues/4235
[i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
[i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
[i915#4473]: https://gitlab.freedesktop.org/drm/intel/issues/4473
[i915#4537]: https://gitlab.freedesktop.org/drm/intel/issues/4537
[i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771
[i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
[i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
[i915#4881]: https://gitlab.freedesktop.org/drm/intel/issues/4881
[i915#4885]: https://gitlab.freedesktop.org/drm/intel/issues/4885
[i915#5138]: https://gitlab.freedesktop.org/drm/intel/issues/5138
[i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
[i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
[i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
[i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
[i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
[i915#5465]: https://gitlab.freedesktop.org/drm/intel/issues/5465
[i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
[i915#6187]: https://gitlab.freedesktop.org/drm/intel/issues/6187
[i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227
[i915#6335]: https://gitlab.freedesktop.org/drm/intel/issues/6335
[i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524
[i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
[i915#6755]: https://gitlab.freedesktop.org/drm/intel/issues/6755
[i915#6805]: https://gitlab.freedesktop.org/drm/intel/issues/6805
[i915#6806]: https://gitlab.freedesktop.org/drm/intel/issues/6806
[i915#6880]: https://gitlab.freedesktop.org/drm/intel/issues/6880
[i915#6944]: https://gitlab.freedesktop.org/drm/intel/issues/6944
[i915#7297]: https://gitlab.freedesktop.org/drm/intel/issues/7297
[i915#7387]: https://gitlab.freedesktop.org/drm/intel/issues/7387
[i915#7392]: https://gitlab.freedesktop.org/drm/intel/issues/7392
[i915#7484]: https://gitlab.freedesktop.org/drm/intel/issues/7484
[i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
[i915#7701]: https://gitlab.freedesktop.org/drm/intel/issues/7701
[i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
[i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
[i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
[i915#8293]: https://gitlab.freedesktop.org/drm/intel/issues/8293
[i915#8381]: https://gitlab.freedesktop.org/drm/intel/issues/8381
[i915#8411]: https://gitlab.freedesktop.org/drm/intel/issues/8411
[i915#8414]: https://gitlab.freedesktop.org/drm/intel/issues/8414
[i915#8428]: https://gitlab.freedesktop.org/drm/intel/issues/8428
[i915#8430]: https://gitlab.freedesktop.org/drm/intel/issues/8430
[i915#8431]: https://gitlab.freedesktop.org/drm/intel/issues/8431
[i915#8708]: https://gitlab.freedesktop.org/drm/intel/issues/8708
[i915#8709]: https://gitlab.freedesktop.org/drm/intel/issues/8709
[i915#8717]: https://gitlab.freedesktop.org/drm/intel/issues/8717
[i915#8810]: https://gitlab.freedesktop.org/drm/intel/issues/8810
[i915#8814]: https://gitlab.freedesktop.org/drm/intel/issues/8814
[i915#8821]: https://gitlab.freedesktop.org/drm/intel/issues/8821
[i915#8925]: https://gitlab.freedesktop.org/drm/intel/issues/8925
[i915#9067]: https://gitlab.freedesktop.org/drm/intel/issues/9067
[i915#9157]: https://gitlab.freedesktop.org/drm/intel/issues/9157
[i915#9159]: https://gitlab.freedesktop.org/drm/intel/issues/9159
[i915#9196]: https://gitlab.freedesktop.org/drm/intel/issues/9196
[i915#9227]: https://gitlab.freedesktop.org/drm/intel/issues/9227
[i915#9275]: https://gitlab.freedesktop.org/drm/intel/issues/9275
[i915#9293]: https://gitlab.freedesktop.org/drm/intel/issues/9293
[i915#9323]: https://gitlab.freedesktop.org/drm/intel/issues/9323
[i915#9340]: https://gitlab.freedesktop.org/drm/intel/issues/9340
[i915#9412]: https://gitlab.freedesktop.org/drm/intel/issues/9412
[i915#9423]: https://gitlab.freedesktop.org/drm/intel/issues/9423
[i915#9519]: https://gitlab.freedesktop.org/drm/intel/issues/9519
[i915#9538]: https://gitlab.freedesktop.org/drm/intel/issues/9538
[i915#9606]: https://gitlab.freedesktop.org/drm/intel/issues/9606
[i915#9685]: https://gitlab.freedesktop.org/drm/intel/issues/9685
[i915#9688]: https://gitlab.freedesktop.org/drm/intel/issues/9688
[i915#9697]: https://gitlab.freedesktop.org/drm/intel/issues/9697
[i915#9723]: https://gitlab.freedesktop.org/drm/intel/issues/9723
[i915#9732]: https://gitlab.freedesktop.org/drm/intel/issues/9732
[i915#9779]: https://gitlab.freedesktop.org/drm/intel/issues/9779
[i915#9808]: https://gitlab.freedesktop.org/drm/intel/issues/9808
[i915#9809]: https://gitlab.freedesktop.org/drm/intel/issues/9809
[i915#9820]: https://gitlab.freedesktop.org/drm/intel/issues/9820
[i915#9849]: https://gitlab.freedesktop.org/drm/intel/issues/9849
[i915#9857]: https://gitlab.freedesktop.org/drm/intel/issues/9857
[i915#9878]: https://gitlab.freedesktop.org/drm/intel/issues/9878
[i915#9917]: https://gitlab.freedesktop.org/drm/intel/issues/9917
Build changes
-------------
* Linux: CI_DRM_14352 -> Patchwork_113758v5
CI-20190529: 20190529
CI_DRM_14352: 0d7a78693be62a8d1cd311376815b89b18de8204 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7731: 17f897a81868fb35c6a7033a8b07256659742248 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_113758v5: 0d7a78693be62a8d1cd311376815b89b18de8204 @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_113758v5/index.html
[-- Attachment #2: Type: text/html, Size: 96953 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 1/2] drm: Introduce plane SIZE_HINTS property
2024-02-28 10:12 ` Simon Ser
@ 2024-03-15 17:03 ` Ville Syrjälä
0 siblings, 0 replies; 23+ messages in thread
From: Ville Syrjälä @ 2024-03-15 17:03 UTC (permalink / raw)
To: Simon Ser
Cc: dri-devel, intel-gfx, Jonas Ådahl, Daniel Stone,
Sameer Lattannavar, Sebastian Wick, Harry Wentland,
Pekka Paalanen
On Wed, Feb 28, 2024 at 10:12:28AM +0000, Simon Ser wrote:
> On Tuesday, February 27th, 2024 at 20:35, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
>
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Add a new immutable plane property by which a plane can advertise
> > a handful of recommended plane sizes. This would be mostly exposed
> > by cursor planes as a slightly more capable replacement for
> > the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare
> > a one size fits all limit for the whole device.
> >
> > Currently eg. amdgpu/i915/nouveau just advertize the max cursor
> > size via the cursor size caps. But always using the max sized
> > cursor can waste a surprising amount of power, so a better
> > stragey is desirable.
>
> Typo: strategy
>
> > Most other drivers don't specify any cursor size at all, in
> > which case the ioctl code just claims that 64x64 is a great
> > choice. Whether that is actually true is debatable.
> >
> > A poll of various compositor developers informs us that
> > blindly probing with setcursor/atomic ioctl to determine
> > suitable cursor sizes is not acceptable, thus the
> > introduction of the new property to supplant the cursor
> > size caps. The compositor will now be free to select a
> > more optimal cursor size from the short list of options.
> >
> > Note that the reported sizes (either via the property or the
> > caps) make no claims about things such as plane scaling. So
> > these things should only really be consulted for simple
> > "cursor like" use cases.
> >
> > Userspace consumer in the form of mutter seems ready:
> > https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3165
>
> Do we need an IGT as well to merge this new uAPI?
At least for i915 the current igts already cover a superset of
what the property reports. But I guess we could add another
test that explicitly tests the sizes reported by the hint
as well, if not already covered by other tests.
>
> > v2: Try to add some docs
> > v3: Specify that value 0 is reserved for future use (basic idea from Jonas)
> > Drop the note about typical hardware (Pekka)
> > v4: Update the docs to indicate the list is "in order of preference"
> > Add a a link to the mutter MR
> >
> > Cc: Simon Ser <contact@emersion.fr>
> > Cc: Jonas Ådahl <jadahl@redhat.com>
> > Cc: Daniel Stone <daniel@fooishbar.org>
> > Cc: Sameer Lattannavar <sameer.lattannavar@intel.com>
> > Cc: Sebastian Wick <sebastian.wick@redhat.com>
> > Acked-by: Harry Wentland <harry.wentland@amd.com>
> > Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> > drivers/gpu/drm/drm_mode_config.c | 7 +++++
> > drivers/gpu/drm/drm_plane.c | 52 +++++++++++++++++++++++++++++++
> > include/drm/drm_mode_config.h | 5 +++
> > include/drm/drm_plane.h | 4 +++
> > include/uapi/drm/drm_mode.h | 11 +++++++
> > 5 files changed, 79 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> > index 48fd2d67f352..568972258222 100644
> > --- a/drivers/gpu/drm/drm_mode_config.c
> > +++ b/drivers/gpu/drm/drm_mode_config.c
> > @@ -372,6 +372,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> > return -ENOMEM;
> > dev->mode_config.modifiers_property = prop;
> >
> > + prop = drm_property_create(dev,
> > + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
> > + "SIZE_HINTS", 0);
> > + if (!prop)
> > + return -ENOMEM;
> > + dev->mode_config.size_hints_property = prop;
> > +
> > return 0;
> > }
> >
> > diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> > index 672c655c7a8e..4135ce16e608 100644
> > --- a/drivers/gpu/drm/drm_plane.c
> > +++ b/drivers/gpu/drm/drm_plane.c
> > @@ -140,6 +140,25 @@
> > * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been
> > * various bugs in this area with inconsistencies between the capability
> > * flag and per-plane properties.
> > + *
> > + * SIZE_HINTS:
> > + * Blob property which contains the set of recommended plane size
> > + * which can used for simple "cursor like" use cases (eg. no scaling).
> > + * Using these hints frees userspace from extensive probing of
> > + * supported plane sizes through atomic/setcursor ioctls.
> > + *
> > + * The blob contains an array of struct drm_plane_size_hint, in
> > + * order of preference. For optimal usage userspace should pick
> > + * the first size that satisfies its own requirements.
> > + *
> > + * Drivers should only attach this property to planes that
> > + * support a very limited set of sizes.
> > + *
> > + * Note that property value 0 (ie. no blob) is reserved for potential
> > + * future use. Current userspace is expected to ignore the property
> > + * if the value is 0, and fall back to some other means (eg.
> > + * &DRM_CAP_CURSOR_WIDTH and &DRM_CAP_CURSOR_HEIGHT) to determine
> > + * the appropriate plane size to use.
> > */
> >
> > static unsigned int drm_num_planes(struct drm_device *dev)
> > @@ -1729,3 +1748,36 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> > return 0;
> > }
> > EXPORT_SYMBOL(drm_plane_create_scaling_filter_property);
> > +
> > +/**
> > + * drm_plane_add_size_hint_property - create a size hint property
> > + *
> > + * @plane: drm plane
> > + * @hints: size hints
> > + * @num_hints: number of size hints
> > + *
> > + * Create a size hints property for the plane.
> > + *
> > + * RETURNS:
> > + * Zero for success or -errno
> > + */
> > +int drm_plane_add_size_hints_property(struct drm_plane *plane,
> > + const struct drm_plane_size_hint *hints,
> > + int num_hints)
> > +{
>
> Can we add a plane type check here, to make sure this is only attached to
> cursor planes? If there is a use-case for other plane types, I'd prefer to
> discuss about it first before expanding the property's scope.
Sure. I don't have a specific usecase for other plane types right now.
But I could imagine some hardware having multiple fixed/limited size
planes. Not sure if there are assumptions in userspace regarding
the number of cursor planes per-crtc, so not sure all such planes
can be declared as cursors.
>
> With that:
> Reviewed-by: Simon Ser <contact@emersion.fr>
>
> > + struct drm_device *dev = plane->dev;
> > + struct drm_mode_config *config = &dev->mode_config;
> > + struct drm_property_blob *blob;
> > +
> > + blob = drm_property_create_blob(dev,
> > + array_size(sizeof(hints[0]), num_hints),
> > + hints);
> > + if (IS_ERR(blob))
> > + return PTR_ERR(blob);
> > +
> > + drm_object_attach_property(&plane->base, config->size_hints_property,
> > + blob->base.id);
> > +
> > + return 0;
> > +}
> > +EXPORT_SYMBOL(drm_plane_add_size_hints_property);
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2024-03-15 17:04 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-27 19:35 [PATCH v2 0/2] drm: Add plane SIZE_HINTS property Ville Syrjala
2024-02-27 19:35 ` [PATCH v2 1/2] drm: Introduce " Ville Syrjala
2024-02-27 20:32 ` Sebastian Wick
2024-02-28 10:12 ` Simon Ser
2024-03-15 17:03 ` Ville Syrjälä
2024-02-28 10:28 ` Daniel Stone
2024-02-27 19:35 ` [PATCH v2 2/2] drm/i915: Add SIZE_HINTS property for cursors Ville Syrjala
2024-02-27 20:12 ` ✗ Fi.CI.SPARSE: warning for drm: Add plane SIZE_HINTS property (rev5) Patchwork
2024-02-27 20:24 ` ✓ Fi.CI.BAT: success " Patchwork
2024-02-28 12:01 ` ✓ Fi.CI.IGT: " Patchwork
-- strict thread matches above, loose matches on Subject: below --
2023-02-08 4:09 [Intel-gfx] [PATCH 1/2] drm: Introduce plane SIZE_HINTS property Ville Syrjala
2023-02-08 21:10 ` [PATCH v2 " Ville Syrjala
2023-02-09 11:58 ` Pekka Paalanen
2023-02-09 13:10 ` Ville Syrjälä
2023-02-10 9:44 ` Pekka Paalanen
2023-02-09 14:16 ` Jonas Ådahl
2023-02-14 9:25 ` Ville Syrjälä
2023-02-14 9:54 ` Jonas Ådahl
2023-02-14 10:28 ` Ville Syrjälä
2023-02-14 11:01 ` Jonas Ådahl
2023-02-14 11:19 ` Ville Syrjälä
2023-02-22 18:34 ` Ville Syrjälä
2023-02-14 19:27 ` Harry Wentland
2023-02-14 19:59 ` Ville Syrjälä
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.