[PATCH i-g-t v7 2/4] tests/kms_async_flips: use in_formats_async for async modifiers

Borah, Chaitanya Kumar chaitanya.kumar.borah at intel.com
Wed Mar 26 03:46:35 UTC 2025



> -----Original Message-----
> From: Reddy Guddati, Santhosh <santhosh.reddy.guddati at intel.com>
> Sent: Tuesday, March 25, 2025 5:46 PM
> To: igt-dev at lists.freedesktop.org
> Cc: B S, Karthik <karthik.b.s at intel.com>; Murthy, Arun R
> <arun.r.murthy at intel.com>; Borah, Chaitanya Kumar
> <chaitanya.kumar.borah at intel.com>; Reddy Guddati, Santhosh
> <santhosh.reddy.guddati at intel.com>
> Subject: [PATCH i-g-t v7 2/4] tests/kms_async_flips: use in_formats_async for
> async modifiers
> 
> Utilise IN_FORMATS_ASYNC property exposed to get the list of async
> supported modifier/format pair and improve the test coverage by iterating
> through all the supported modifier format pairs.
> 
> V2: Improve run_test_with_modifiers to set data formats based on async
>     formats.
>     Update make_fb to use data formats instead of hard coded format
> 
> V3: Update commit message, remove complicated iterations (Chaitanya)
> 
> V4: Reduce the format+modifier combinations to reduce time needed to
>     execute the tests. (Chaitanya)
> 
> V5: Remove unnecessary check for reduced formats. (Chaitanya)
> 
> V6: Introduce new test for all formats and modifiers, executing only one
>     flip to reduce overall time.
>     Update test_with_modifiers to use async modifiers and formats X8888.
> 
> V7: split the newly added subtest to separate commit and add condition
>     to skip the test if async format modifiers are not available. Also
>     remove data->fail as it is not needed with the new support (Chaitanya)
> 
> Signed-off-by: Santhosh Reddy Guddati <santhosh.reddy.guddati at intel.com>
> ---
>  tests/kms_async_flips.c | 33 ++++++++++++++++++++++++++++-----
>  1 file changed, 28 insertions(+), 5 deletions(-)
> 
> diff --git a/tests/kms_async_flips.c b/tests/kms_async_flips.c index
> da426f753..369318368 100644
> --- a/tests/kms_async_flips.c
> +++ b/tests/kms_async_flips.c
> @@ -36,6 +36,7 @@
>  #include "igt.h"
>  #include "igt_aux.h"
>  #include "igt_psr.h"
> +#include "igt_vec.h"
>  #include <sys/ioctl.h>
>  #include <sys/time.h>
>  #include <poll.h>
> @@ -85,6 +86,9 @@
>   *
>   * SUBTEST: async-flip-suspend-resume
>   * Description: Verify the async flip functionality with suspend and resume
> cycle
> + *
> + * SUBTEST: async-flip-with-all-modifiers-formats
> + * Description: Verify the async flip functionality with all supported
> + modifiers and formats
>   */
> 
>  #define CURSOR_POS 128
> @@ -122,8 +126,15 @@ typedef struct {
>  	bool allow_fail;
>  	struct buf_ops *bops;
>  	bool atomic_path;
> +	unsigned int plane_format;
> +	bool async_mod_formats;
>  } data_t;
> 
> +struct format_mod {
> +	uint64_t modifier;
> +	uint32_t format;
> +};
> +
>  static void flip_handler(int fd_, unsigned int sequence, unsigned int tv_sec,
>  			 unsigned int tv_usec, void *_data)
>  {
> @@ -193,7 +204,7 @@ static void make_fb(data_t *data, struct igt_fb *fb,
> 
>  	rec_width = width / (NUM_FBS * 2);
> 
> -	igt_create_color_fb(data->drm_fd, width, height,
> DRM_FORMAT_XRGB8888,
> +	igt_create_color_fb(data->drm_fd, width, height, data->plane_format,
>  			    data->modifier, 0.0, 0.0, 0.5, fb);
> 
>  	cr = igt_get_cairo_ctx(data->drm_fd, fb); @@ -348,10 +359,19 @@
> static void test_async_flip(data_t *data)
>  			data->suspend_resume = false;
> 
> 	igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
> SUSPEND_TEST_NONE);
>  		}
> +
> +		/* Reduce test execution for all formats and modifiers. One flip
> should suffice */
> +		if (data->async_mod_formats) {
> +			igt_assert_f(ret == 0, "Async flip failed with %s
> modifier and %s format",
> +				     igt_fb_modifier_name(data->modifier),
> +				     igt_format_str(data->plane_format));
> +			break;
> +		}
> +
>  		frame++;
>  	} while (diff.tv_sec < RUN_TIME);
> 
> -	if (!data->alternate_sync_async) {
> +	if (!data->alternate_sync_async && !data->async_mod_formats) {
>  		fps = frame * 1000 / RUN_TIME;
>  		igt_assert_f((fps / 1000) > (data->refresh_rate *
> MIN_FLIPS_PER_FRAME),
>  			     "FPS should be significantly higher than the refresh
> rate\n"); @@ -715,12 +735,14 @@ static void
> run_test_with_modifiers(data_t *data, void (*test)(data_t *))
>  	for_each_pipe_with_valid_output(&data->display, data->pipe, data-
> >output) {
>  		test_init(data);
> 
> -		for (int i = 0; i < data->plane->format_mod_count; i++) {
> +		igt_require_f(data->plane->async_format_mod_count > 0,
> +			      "No async format/modifier supported\n");

AFAIK, currently there are no platforms which do not support async on any modifier. We should fail the test here if that is the case. 

@B S, Karthik @Murthy, Arun R please correct me if I am wrong.

With that LGTM.


Reviewed-by: Chaitanya Kumar Borah <chaitanya.kumar.borah at intel.com>


Regards

Chaitanya

> +
> +		for (int i = 0; i < data->plane->async_format_mod_count; i++) {
>  			if (data->plane->formats[i] !=
> DRM_FORMAT_XRGB8888)
>  				continue;
> 
> -			data->allow_fail = true;
> -			data->modifier = data->plane->modifiers[i];
> +			data->modifier = data->plane->async_modifiers[i];
> 
>  			igt_dynamic_f("pipe-%s-%s-%s",
> kmstest_pipe_name(data->pipe),
>  				      data->output->name,
> @@ -757,6 +779,7 @@ igt_main
> 
>  		if (is_intel_device(data.drm_fd))
>  			data.bops = buf_ops_create(data.drm_fd);
> +		data.plane_format = DRM_FORMAT_XRGB8888;
>  	}
> 
>  	igt_describe("Verify the async flip functionality and the fps during
> async flips");
> --
> 2.34.1



More information about the igt-dev mailing list