From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Santhosh Reddy Guddati <santhosh.reddy.guddati@intel.com>
Cc: igt-dev@lists.freedesktop.org, karthik.b.s@intel.com,
arun.r.murthy@intel.com, chaitanya.kumar.borah@intel.com
Subject: Re: [PATCH i-g-t v8 1/4] lib/igt_kms: Add support to retrieve async modifiers and formats
Date: Wed, 26 Mar 2025 19:44:31 +0200 [thread overview]
Message-ID: <Z-Q8_2IQXmHrncWM@intel.com> (raw)
In-Reply-To: <20250326102758.2728285-2-santhosh.reddy.guddati@intel.com>
On Wed, Mar 26, 2025 at 03:57:55PM +0530, Santhosh Reddy Guddati wrote:
> Parse "IN_FORMATS_ASYNC" plane property to identify supported
> format modifier pairs for async flips
>
> V2: Add new fields async_formats and reset idx.
>
> V3: Improve commit message , remove unused declaration (Chaitanya)
> Introduce structure to hold a format modifier and its
> associated format list.
>
> V4: Implement format+modifier tuples for async similar to IN_FORMATS
> (Chaitanya).
>
> V5: Re use local variables for async formats and free blob after
> usage(Chaitanya)
>
> V6: Initialize async_modifiers and async_formats to NULL. (Chaitanya)
>
> V7: Fix async format count to return 0 on failures (Chaitanya)
>
> Signed-off-by: Santhosh Reddy Guddati <santhosh.reddy.guddati@intel.com>
> Reviewed-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
> ---
> lib/igt_kms.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++--
> lib/igt_kms.h | 7 ++++++-
> 2 files changed, 60 insertions(+), 3 deletions(-)
>
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index cc3bb3ae7..c6c3f1894 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -701,6 +701,7 @@ const char * const igt_plane_prop_names[IGT_NUM_PLANE_PROPS] = {
> [IGT_PLANE_FB_DAMAGE_CLIPS] = "FB_DAMAGE_CLIPS",
> [IGT_PLANE_SCALING_FILTER] = "SCALING_FILTER",
> [IGT_PLANE_SIZE_HINTS] = "SIZE_HINTS",
> + [IGT_PLANE_IN_FORMATS_ASYNC] = "IN_FORMATS_ASYNC",
> };
>
> const char * const igt_crtc_prop_names[IGT_NUM_CRTC_PROPS] = {
> @@ -5759,10 +5760,12 @@ static int igt_count_plane_format_mod(const struct drm_format_modifier_blob *blo
> static void igt_fill_plane_format_mod(igt_display_t *display, igt_plane_t *plane)
> {
> const struct drm_format_modifier_blob *blob_data;
> + const struct drm_format_modifier *async_modifiers = NULL;
> drmModePropertyBlobPtr blob;
> uint64_t blob_id;
> int idx = 0;
> - int count;
> + int count = 0;
> + const uint32_t *async_formats = NULL;
>
> if (!igt_plane_has_prop(plane, IGT_PLANE_IN_FORMATS)) {
> drmModePlanePtr p = plane->drm_plane;
> @@ -5796,8 +5799,10 @@ static void igt_fill_plane_format_mod(igt_display_t *display, igt_plane_t *plane
> blob_data = (const struct drm_format_modifier_blob *) blob->data;
>
> count = igt_count_plane_format_mod(blob_data);
> - if (!count)
> + if (!count) {
> + drmModeFreePropertyBlob(blob);
> return;
> + }
>
> plane->format_mod_count = count;
> plane->formats = calloc(count, sizeof(plane->formats[0]));
> @@ -5822,6 +5827,53 @@ static void igt_fill_plane_format_mod(igt_display_t *display, igt_plane_t *plane
> }
>
> igt_assert_eq(idx, plane->format_mod_count);
> +
> + drmModeFreePropertyBlob(blob);
> +
> + if (!igt_plane_has_prop(plane, IGT_PLANE_IN_FORMATS_ASYNC))
> + return;
> +
> + blob_id = igt_plane_get_prop(plane, IGT_PLANE_IN_FORMATS_ASYNC);
> + blob = drmModeGetPropertyBlob(display->drm_fd, blob_id);
> +
> + if (!blob)
> + return;
> +
> + blob_data = (const struct drm_format_modifier_blob *)blob->data;
> + count = igt_count_plane_format_mod(blob_data);
> +
> + if (!count) {
> + plane->async_format_mod_count = 0;
> + drmModeFreePropertyBlob(blob);
> + return;
> + }
> +
> + plane->async_format_mod_count = count;
> + plane->async_modifiers = calloc(count, sizeof(plane->async_modifiers[0]));
> + igt_assert(plane->async_modifiers);
> +
> + plane->async_formats = calloc(count, sizeof(plane->async_formats[0]));
> + igt_assert(plane->async_formats);
> +
> + idx = 0;
> + for (int i = 0; i < blob_data->count_modifiers; i++) {
> + for (int j = 0; j < 64; j++) {
> + async_modifiers = modifiers_ptr(blob_data);
> + async_formats = formats_ptr(blob_data);
> +
> + if (!(async_modifiers[i].formats & (1ULL << j)))
> + continue;
> +
> + plane->async_formats[idx] = async_formats[async_modifiers[i].offset + j];
> + plane->async_modifiers[idx] = async_modifiers[i].modifier;
> + idx++;
> + igt_assert_lte(idx, plane->async_format_mod_count);
> + }
> + }
> +
> + igt_assert_eq(idx, plane->async_format_mod_count);
> +
> + drmModeFreePropertyBlob(blob);
This code looks identical to the existing stuff that parses the normal
blob. Can you refactor that into a common function?
> }
>
> /**
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index 27b545f52..78d6a7ee4 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -365,7 +365,8 @@ enum igt_atomic_plane_properties {
> IGT_PLANE_HOTSPOT_X,
> IGT_PLANE_HOTSPOT_Y,
> IGT_PLANE_SIZE_HINTS,
> - IGT_NUM_PLANE_PROPS
> + IGT_PLANE_IN_FORMATS_ASYNC,
> + IGT_NUM_PLANE_PROPS,
> };
>
> /**
> @@ -438,6 +439,10 @@ typedef struct igt_plane {
> uint64_t *modifiers;
> uint32_t *formats;
> int format_mod_count;
> +
> + uint64_t *async_modifiers;
> + uint32_t *async_formats;
> + int async_format_mod_count;
> } igt_plane_t;
>
> /*
> --
> 2.34.1
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2025-03-26 17:44 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-26 10:27 [PATCH i-g-t v8 0/4] Support for IN_FORMATS_ASYNC plane property Santhosh Reddy Guddati
2025-03-26 10:27 ` [PATCH i-g-t v8 1/4] lib/igt_kms: Add support to retrieve async modifiers and formats Santhosh Reddy Guddati
2025-03-26 17:44 ` Ville Syrjälä [this message]
2025-03-26 10:27 ` [PATCH i-g-t v8 2/4] tests/kms_async_flips: use in_formats_async for async modifiers Santhosh Reddy Guddati
2025-03-26 10:27 ` [PATCH i-g-t v8 3/4] tests/kms_async_flips: Add test for all async format modifiers Santhosh Reddy Guddati
2025-03-26 10:27 ` [PATCH i-g-t v8 4/4] tests/kms_async_flips: Remove allow_fail flag from async flip tests Santhosh Reddy Guddati
2025-03-26 13:39 ` ✓ i915.CI.BAT: success for Support for IN_FORMATS_ASYNC plane property Patchwork
2025-03-26 13:43 ` ✓ Xe.CI.BAT: " Patchwork
2025-03-26 16:31 ` ✗ i915.CI.Full: failure " Patchwork
2025-03-27 1:57 ` ✗ Xe.CI.Full: " Patchwork
2025-03-27 10:21 ` Patchwork
2025-04-06 13:05 ` Patchwork
-- strict thread matches above, loose matches on Subject: below --
2025-03-27 9:08 [PATCH i-g-t v8 0/4] " Santhosh Reddy Guddati
2025-03-27 9:08 ` [PATCH i-g-t v8 1/4] lib/igt_kms: Add support to retrieve async modifiers and formats Santhosh Reddy Guddati
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z-Q8_2IQXmHrncWM@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=arun.r.murthy@intel.com \
--cc=chaitanya.kumar.borah@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=karthik.b.s@intel.com \
--cc=santhosh.reddy.guddati@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is 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.