[igt-dev] [PATCH i-g-t 03/25] tests/kms_plane: Add validate-in-formats subtest

Ville Syrjala ville.syrjala at linux.intel.com
Thu Jul 19 15:03:53 UTC 2018


From: Ville Syrjälä <ville.syrjala at linux.intel.com>

Cross check the format list in the IN_FORMATS blob vs. the
format list returned by getplane.

Cc: Ulrich Hecht <ulrich.hecht+renesas at gmail.com>
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
 tests/kms_plane.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/tests/kms_plane.c b/tests/kms_plane.c
index f9e123f0d1ea..e0625748186f 100644
--- a/tests/kms_plane.c
+++ b/tests/kms_plane.c
@@ -366,6 +366,53 @@ test_plane_panning(data_t *data, enum pipe pipe, unsigned int flags)
 	igt_skip_on(connected_outs == 0);
 }
 
+static void validate_plane_in_formats(igt_plane_t *plane)
+{
+	drmModePlanePtr drm_plane = plane->drm_plane;
+
+	igt_require(plane->format_mod_count);
+
+	/*
+	 * Make sure every format in the IN_FORMATS blob
+	 * also appears in the getplane formats.
+	 */
+	for (int i = 0; i < plane->format_mod_count; i++) {
+		int j;
+
+		for (j = 0; j < drm_plane->count_formats; j++) {
+			if (plane->formats[i] == drm_plane->formats[j])
+				break;
+		}
+		igt_assert_lt(j, drm_plane->count_formats);
+	}
+
+	/*
+	 * Make sure every format in getplane also
+	 * appears in the IN_FORMATS blob.
+	 */
+	for (int i = 0; i < drm_plane->count_formats; i++) {
+		int j;
+
+		for (j = 0; j < plane->format_mod_count; j++) {
+			if (drm_plane->formats[i] == plane->formats[j])
+				break;
+		}
+		igt_assert_lt(j, plane->format_mod_count);
+	}
+}
+
+static void validate_in_formats(data_t *data)
+{
+	enum pipe pipe;
+
+	for_each_pipe(&data->display, pipe) {
+		igt_plane_t *plane;
+
+		for_each_plane_on_pipe(&data->display, pipe, plane)
+			validate_plane_in_formats(plane);
+	}
+}
+
 static const color_t colors[] = {
 	{ 1.0f, 0.0f, 0.0f, },
 	{ 0.0f, 1.0f, 0.0f, },
@@ -592,6 +639,9 @@ igt_main
 		igt_display_init(&data.display, data.drm_fd);
 	}
 
+	igt_subtest_f("validate-in-formats")
+		validate_in_formats(&data);
+
 	for_each_pipe_static(pipe)
 		run_tests_for_pipe_plane(&data, pipe);
 
-- 
2.16.4



More information about the igt-dev mailing list