[Intel-gfx] [RFC][PATCH v2 3/3] drm/i915: Add SIZE_HINTS property for cursors
Ville Syrjala
ville.syrjala at linux.intel.com
Tue Mar 21 14:36:43 UTC 2023
From: Ville Syrjälä <ville.syrjala at linux.intel.com>
Advertize more suitable cursor sizes via the new SIZE_HINTS
plane property.
Here are some examples on various platforms:
ivb+:
31 SIZE_HINTS:
flags: immutable blob
blobs:
value:
4000080000010001ff6f0200
size_hints blob decoded:
min: 64x8
max: 256x256
bitmap[0]: 0b100110111111111111
64 128 256
8 * * *
16 * * *
32 * * *
64 * * *
128 * *
256 *
i945+:
31 SIZE_HINTS:
flags: immutable blob
blobs:
value:
400040000001000111010000
size_hints blob decoded:
min: 64x64
max: 256x256
bitmap[0]: 0b100010001
64 128 256
64 *
128 *
256 *
i865:
31 SIZE_HINTS:
flags: immutable blob
blobs:
value:
400001000002ff03ffffffffff0f0000
size_hints blob decoded:
min: 64x1
max: 512x1023
bitmap[0]: 0b11111111111111111111111111111111
bitmap[1]: 0b111111111111
64 128 256 512
1 * * * *
2 * * * *
4 * * * *
8 * * * *
16 * * * *
32 * * * *
64 * * * *
128 * * * *
256 * * * *
512 * * * *
1023 * * * *
Cc: Simon Ser <contact at emersion.fr>
Cc: Jonas Ådahl <jadahl at redhat.com>
Cc: Daniel Stone <daniel at fooishbar.org>
Cc: Pekka Paalanen <pekka.paalanen at collabora.com>
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_cursor.c | 43 ++++++++++++++++++---
1 file changed, 38 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index edeeb5f9f795..449860342aea 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -388,9 +388,9 @@ static u32 i9xx_cursor_ctl(const struct intel_crtc_state *crtc_state,
return cntl;
}
-static bool i9xx_cursor_size_ok(struct drm_plane *plane,
- int width, int height,
- unsigned int rotation)
+static bool _i9xx_cursor_size_ok(struct drm_plane *plane,
+ int width, int height,
+ unsigned int rotation)
{
struct drm_i915_private *i915 = to_i915(plane->dev);
@@ -424,6 +424,12 @@ static bool i9xx_cursor_size_ok(struct drm_plane *plane,
return true;
}
+static bool i9xx_cursor_size_ok(struct drm_plane *plane,
+ int width, int height)
+{
+ return _i9xx_cursor_size_ok(plane, width, height, DRM_MODE_ROTATE_0);
+}
+
static int i9xx_check_cursor(struct intel_crtc_state *crtc_state,
struct intel_plane_state *plane_state)
{
@@ -445,8 +451,8 @@ static int i9xx_check_cursor(struct intel_crtc_state *crtc_state,
height = drm_rect_height(&plane_state->uapi.dst);
/* Check for which cursor types we support */
- if (!i9xx_cursor_size_ok(&plane->base, width, height,
- plane_state->hw.rotation)) {
+ if (!_i9xx_cursor_size_ok(&plane->base, width, height,
+ plane_state->hw.rotation)) {
drm_dbg_kms(&dev_priv->drm,
"Cursor dimension %dx%d not supported\n",
width, height);
@@ -757,6 +763,31 @@ 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;
+
+ if (IS_I845G(i915) || IS_I865G(i915))
+ drm_plane_add_size_hints_property(&plane->base,
+ 64, 1,
+ config->cursor_width,
+ config->cursor_height,
+ i845_cursor_size_ok);
+ else if (HAS_CUR_FBC(i915))
+ drm_plane_add_size_hints_property(&plane->base,
+ 64, 8,
+ config->cursor_width,
+ config->cursor_height,
+ i9xx_cursor_size_ok);
+ else
+ drm_plane_add_size_hints_property(&plane->base,
+ 64, 64,
+ config->cursor_width,
+ config->cursor_height,
+ i9xx_cursor_size_ok);
+}
+
struct intel_plane *
intel_cursor_plane_create(struct drm_i915_private *dev_priv,
enum pipe pipe)
@@ -815,6 +846,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 = RUNTIME_INFO(dev_priv)->num_sprites[pipe] + 1;
drm_plane_create_zpos_immutable_property(&cursor->base, zpos);
--
2.39.2
More information about the Intel-gfx
mailing list