[PATCH i-g-t,v2 5/9] tests/kms_sharpness_filter: Add filter-tap subtest

Nautiyal, Ankit K ankit.k.nautiyal at intel.com
Thu Jan 2 08:10:35 UTC 2025


On 12/31/2024 6:32 PM, Swati Sharma wrote:
> Add subtest to verify that sharpness works with different
> resolutions (implicitly different taps). Select different taps
> based on the following conditions:
>
> TAP 3: mode->hdisplay <= 1920 && mode->vdisplay <= 1080
> TAP 5: (mode->hdisplay > 1920 && mode->hdisplay < 3840) &&
>         (mode->vdisplay > 1080 && mode->vdisplay < 2160)
> TAP 7: mode->hdisplay >= 3840 && mode->vdisplay >= 2160
>
> v2: -Fix test description (Ankit)
>      -Fix tap selection conditions (Ankit)
>      -Change iterator (Ankit)
>
> Signed-off-by: Swati Sharma <swati2.sharma at intel.com>
> ---
>   tests/kms_sharpness_filter.c | 81 ++++++++++++++++++++++++++++++++++++
>   1 file changed, 81 insertions(+)
>
> diff --git a/tests/kms_sharpness_filter.c b/tests/kms_sharpness_filter.c
> index 2bc87374e..d1d6558c5 100644
> --- a/tests/kms_sharpness_filter.c
> +++ b/tests/kms_sharpness_filter.c
> @@ -37,6 +37,10 @@
>    *
>    * SUBTEST: filter-toggle
>    * Description: Verify toggling between enabling and disabling content adaptive sharpness filter.
> + *
> + * SUBTEST: filter-tap
> + * Description: Verify content adaptive sharpness filter with resolution change, resolution change
> + * 		will lead to selection of distinct taps.

Perhaps rephrase to:

Verify content adaptive sharpness filter with resolution change, which in turn will lead to selection of distinct taps.

>   */
>   
>   IGT_TEST_DESCRIPTION("Test to validate content adaptive sharpness filter");
> @@ -47,10 +51,15 @@ IGT_TEST_DESCRIPTION("Test to validate content adaptive sharpness filter");
>    * is seen without corruption for each subtest.
>    */
>   
> +#define TAP_3				3
> +#define TAP_5				5
> +#define TAP_7				7
>   #define DISABLE_FILTER			0
>   #define MIN_FILTER_STRENGTH		1
>   #define MID_FILTER_STRENGTH		128
>   #define MAX_FILTER_STRENGTH		255
> +#define MAX_PIXELS_FOR_3_TAP_FILTER	(1920 * 1080)
> +#define MAX_PIXELS_FOR_5_TAP_FILTER	(3840 * 2160)
>   #define NROUNDS				10
>   
>   enum test_type {
> @@ -60,6 +69,7 @@ enum test_type {
>   	TEST_FILTER_FORMATS,
>   	TEST_FILTER_STRENGTH,
>   	TEST_FILTER_TOGGLE,
> +	TEST_FILTER_TAP,
>   };
>   
>   const int filter_strength_list[] = {
> @@ -69,6 +79,11 @@ const int filter_strength_list[] = {
>   	(MID_FILTER_STRENGTH + MAX_FILTER_STRENGTH) / 2,
>   	MAX_FILTER_STRENGTH,
>   };
> +const int filter_tap_list[] = {
> +	TAP_3,
> +	TAP_5,
> +	TAP_7,
> +};
>   static const struct {
>   	uint64_t modifier;
>   	const char *name;
> @@ -99,6 +114,7 @@ typedef struct {
>   	igt_plane_t *plane[4];
>   	drmModeModeInfo *mode;
>   	int filter_strength;
> +	int filter_tap;
>   	uint64_t modifier;
>   	const char *modifier_name;
>   	uint32_t format;
> @@ -151,6 +167,32 @@ static void cleanup(data_t *data)
>   	cleanup_fbs(data);
>   }
>   
> +static void get_modes_for_filter_taps(igt_output_t *output, drmModeModeInfo *mode[3])
> +{
> +	drmModeConnector *connector = output->config.connector;
> +	int total_pixels = 0;
> +
> +	/*
> +	 * TAP 3: mode->hdisplay <= 1920 && mode->vdisplay <= 1080
> +	 * TAP 5: (mode->hdisplay > 1920 && mode->hdisplay < 3840) &&
> +	 * 	  (mode->vdisplay > 1080 && mode->vdisplay < 2160)
> +	 * TAP 7: mode->hdisplay >= 3840 && mode->vdisplay >= 2160
> +	 */
> +	for (int i = 0; i < connector->count_modes; i++) {
> +		total_pixels = connector->modes[i].hdisplay * connector->modes[i].vdisplay;
> +
> +		if (total_pixels <= MAX_PIXELS_FOR_3_TAP_FILTER)
> +			mode[0] = &connector->modes[i];
> +
> +		if (total_pixels > MAX_PIXELS_FOR_3_TAP_FILTER &&
> +		    total_pixels <= MAX_PIXELS_FOR_5_TAP_FILTER)
> +			mode[1] = &connector->modes[i];
> +
> +		if (total_pixels > MAX_PIXELS_FOR_5_TAP_FILTER)
> +			mode[2] = &connector->modes[i];
> +	}
> +}
> +
>   static int test_filter_toggle(data_t *data)
>   {
>   	int ret = 0;
> @@ -239,6 +281,34 @@ run_sharpness_filter_test(data_t *data, enum test_type type)
>   				continue;
>   			}
>   
> +			if (type == TEST_FILTER_TAP) {
> +				drmModeModeInfo *modes[3] = { NULL, NULL, NULL };
> +				int num_taps = ARRAY_SIZE(filter_tap_list);
> +
> +				igt_assert(num_taps == 3);
> +
> +				get_modes_for_filter_taps(output, modes);
> +				for (int i = 0; i < 3; i++) {
> +					data->filter_tap = filter_tap_list[i];
> +					if (!modes[i])
> +						continue;
> +					data->mode = modes[i];
> +				        igt_info("Mode %dx%d@%d on output %s\n", data->mode->hdisplay, data->mode->vdisplay,
> +						  data->mode->vrefresh, igt_output_name(data->output));
> +					igt_output_override_mode(data->output, data->mode);
> +
> +					snprintf(name, sizeof(name), "-tap-%d", data->filter_tap);
> +					igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(data->pipe_id),
> +						       data->output->name, name)
> +						test_sharpness_filter(data, type);
> +				}
> +
> +				if (data->limited)
> +					break;
> +
> +				continue;
> +			}
> +
>   			switch (type) {
>   			case TEST_FILTER_BASIC:
>   				snprintf(name, sizeof(name), "-basic");
> @@ -381,6 +451,17 @@ igt_main_args("l", NULL, help_str, opt_handler, &data)
>   		run_sharpness_filter_test(&data, TEST_FILTER_TOGGLE);
>   	}
>   
> +	igt_describe("Verify that following a resolution change, "
> +		     "distict taps are selected.");

We cannot directly verify if distinct taps are selected or not. We can 
verify that sharpness works with different resolutions and (indirectly 
different taps).

With minor changes in documentation, this is:

Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>


> +	igt_subtest_with_dynamic("filter-tap") {
> +		data.modifier = DRM_FORMAT_MOD_LINEAR;
> +		data.rotation = IGT_ROTATION_0;
> +		data.format = DRM_FORMAT_XRGB8888;
> +		data.filter_strength = MID_FILTER_STRENGTH;
> +
> +		run_sharpness_filter_test(&data, TEST_FILTER_TAP);
> +	}
> +
>   	igt_fixture {
>   		igt_display_fini(&data.display);
>   		drm_close_driver(data.drm_fd);


More information about the igt-dev mailing list