[PATCH i-g-t 5/9] tests/kms_sharpness_filter: Add filter-tap subtest
Swati Sharma
swati2.sharma at intel.com
Wed Dec 4 08:26:23 UTC 2024
Test is added to verify that following a resolution change,
distinct taps are selected i.e.
TAP 3: mode->hdisplay <= 1920 && mode->vdisplay <= 1080
TAP 5: mode->hdisplay > 1920 && mode->vdisplay > 1080
TAP 7: mode->hdisplay >= 3840 && mode->vdisplay >= 2160
Signed-off-by: Swati Sharma <swati2.sharma at intel.com>
---
tests/kms_sharpness_filter.c | 79 ++++++++++++++++++++++++++++++++++++
1 file changed, 79 insertions(+)
diff --git a/tests/kms_sharpness_filter.c b/tests/kms_sharpness_filter.c
index 8ade3b0bc..88fb50958 100644
--- a/tests/kms_sharpness_filter.c
+++ b/tests/kms_sharpness_filter.c
@@ -37,6 +37,9 @@
*
* SUBTEST: filter-toggle
* Description: Verify toggling between enabling and disabling content adaptive sharpness filter.
+ *
+ * SUBTEST: filter-tap
+ * Description: Verify that following a resolution change, distinct taps are selected.
*/
IGT_TEST_DESCRIPTION("Test to validate content adaptive sharpness filter");
@@ -47,10 +50,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 +68,7 @@ enum test_type {
TEST_FILTER_FORMATS,
TEST_FILTER_STRENGTH,
TEST_FILTER_TOGGLE,
+ TEST_FILTER_TAP,
};
const int filter_strength_list[] = {
@@ -69,6 +78,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 +113,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 +166,31 @@ 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->vdisplay > 1080
+ * 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;
@@ -237,6 +277,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 k = 0; k < 3; k++) {
+ data->filter_tap = filter_tap_list[k];
+ if (!modes[k])
+ continue;
+ data->mode = modes[k];
+ 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");
@@ -380,6 +448,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.");
+ 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);
--
2.25.1
More information about the igt-dev
mailing list