[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