[PATCH i-g-t v1 1/5] tests/kms_plane_scaling: Update scaling functions to return error codes

Naladala Ramanaidu ramanaidu.naladala at intel.com
Thu Sep 5 14:50:34 UTC 2024


This will ensures that the system can automatically find a suitable
configuration, improving the robustness and flexibility of the
testing process. Introduce a `ret` variable to capture the return
value of scaling operations. Modify `check_scaling_pipe_plane_rot`
to return an integer error code instead of void. Update
`test_scaler_with_modifier_pipe`, `test_scaler_with_rotation_pipe`,
and `test_scaler_with_pixel_format_pipe` to handle the returned
error code.

v1: fix crash issues.  (Swati)

Signed-off-by: Naladala Ramanaidu <ramanaidu.naladala at intel.com>
---
 tests/kms_plane_scaling.c | 263 +++++++++++++++++++++-----------------
 1 file changed, 148 insertions(+), 115 deletions(-)

diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c
index 42eb67409..5c5837a51 100644
--- a/tests/kms_plane_scaling.c
+++ b/tests/kms_plane_scaling.c
@@ -566,15 +566,16 @@ static void cleanup_crtc(data_t *data)
 	cleanup_fbs(data);
 }
 
-static void check_scaling_pipe_plane_rot(data_t *d, igt_plane_t *plane,
-					 uint32_t pixel_format,
-					 uint64_t modifier,
-					 double sf_plane,
-					 bool is_clip_clamp,
-					 bool is_upscale,
-					 enum pipe pipe,
-					 igt_output_t *output,
-					 igt_rotation_t rot)
+static uint32_t
+check_scaling_pipe_plane_rot(data_t *d, igt_plane_t *plane,
+			     uint32_t pixel_format,
+			     uint64_t modifier,
+			     double sf_plane,
+			     bool is_clip_clamp,
+			     bool is_upscale,
+			     enum pipe pipe,
+			     igt_output_t *output,
+			     igt_rotation_t rot)
 {
 	igt_display_t *display = &d->display;
 	drmModeModeInfo *mode;
@@ -634,11 +635,7 @@ static void check_scaling_pipe_plane_rot(data_t *d, igt_plane_t *plane,
 		if (commit_ret == 0)
 			break;
 	}
-
-	igt_skip_on_f(commit_ret == -ERANGE || commit_ret == -EINVAL,
-		      "Unsupported scaling operation in driver with return value %s\n",
-		      (commit_ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
-	igt_assert_eq(commit_ret, 0);
+	return commit_ret;
 }
 
 static const igt_rotation_t rotations[] = {
@@ -710,16 +707,18 @@ static const uint64_t modifiers[] = {
 	I915_FORMAT_MOD_4_TILED
 };
 
-static void test_scaler_with_modifier_pipe(data_t *d,
-					   double sf_plane,
-					   bool is_clip_clamp,
-					   bool is_upscale,
-					   enum pipe pipe,
-					   igt_output_t *output)
+static uint32_t
+test_scaler_with_modifier_pipe(data_t *d,
+			       double sf_plane,
+			       bool is_clip_clamp,
+			       bool is_upscale,
+			       enum pipe pipe,
+			       igt_output_t *output)
 {
 	igt_display_t *display = &d->display;
 	unsigned format = DRM_FORMAT_XRGB8888;
 	igt_plane_t *plane;
+	uint32_t ret;
 
 	cleanup_crtc(d);
 
@@ -733,28 +732,33 @@ static void test_scaler_with_modifier_pipe(data_t *d,
 			uint64_t modifier = modifiers[i];
 
 			if (igt_plane_has_format_mod(plane, format, modifier))
-				check_scaling_pipe_plane_rot(d, plane,
-							     format, modifier,
-							     sf_plane,
-							     is_clip_clamp,
-							     is_upscale,
-							     pipe, output,
-							     IGT_ROTATION_0);
+				ret = check_scaling_pipe_plane_rot(d, plane,
+								   format, modifier,
+								   sf_plane,
+								   is_clip_clamp,
+								   is_upscale,
+								   pipe, output,
+								   IGT_ROTATION_0);
+			if (ret != 0)
+				return ret;
 		}
 	}
+	return ret;
 }
 
-static void test_scaler_with_rotation_pipe(data_t *d,
-					   double sf_plane,
-					   bool is_clip_clamp,
-					   bool is_upscale,
-					   enum pipe pipe,
-					   igt_output_t *output)
+static uint32_t
+test_scaler_with_rotation_pipe(data_t *d,
+			       double sf_plane,
+			       bool is_clip_clamp,
+			       bool is_upscale,
+			       enum pipe pipe,
+			       igt_output_t *output)
 {
 	igt_display_t *display = &d->display;
 	unsigned format = DRM_FORMAT_XRGB8888;
 	uint64_t modifier = DRM_FORMAT_MOD_LINEAR;
 	igt_plane_t *plane;
+	uint32_t ret;
 
 	cleanup_crtc(d);
 
@@ -768,26 +772,31 @@ static void test_scaler_with_rotation_pipe(data_t *d,
 			igt_rotation_t rot = rotations[i];
 
 			if (igt_plane_has_rotation(plane, rot))
-				check_scaling_pipe_plane_rot(d, plane,
-							     format, modifier,
-							     sf_plane,
-							     is_clip_clamp,
-							     is_upscale,
-							     pipe, output,
-							     rot);
+				ret = check_scaling_pipe_plane_rot(d, plane,
+								   format, modifier,
+								   sf_plane,
+								   is_clip_clamp,
+								   is_upscale,
+								   pipe, output,
+								   rot);
+			if (ret != 0)
+				return ret;
 		}
 	}
+	return ret;
 }
 
-static void test_scaler_with_pixel_format_pipe(data_t *d, double sf_plane,
-					       bool is_clip_clamp,
-					       bool is_upscale,
-					       enum pipe pipe,
-					       igt_output_t *output)
+static uint32_t
+test_scaler_with_pixel_format_pipe(data_t *d, double sf_plane,
+				   bool is_clip_clamp,
+				   bool is_upscale,
+				   enum pipe pipe,
+				   igt_output_t *output)
 {
 	igt_display_t *display = &d->display;
 	uint64_t modifier = DRM_FORMAT_MOD_LINEAR;
 	igt_plane_t *plane;
+	uint32_t ret;
 
 	cleanup_crtc(d);
 
@@ -810,17 +819,21 @@ static void test_scaler_with_pixel_format_pipe(data_t *d, double sf_plane,
 			if (test_format(d, &tested_formats, format) &&
 			    igt_plane_has_format_mod(plane, format, modifier) &&
 			    can_scale(d, format))
-			    check_scaling_pipe_plane_rot(d, plane,
-							 format, modifier,
-							 sf_plane,
-							 is_clip_clamp,
-							 is_upscale,
-							 pipe, output,
-							 IGT_ROTATION_0);
+				ret = check_scaling_pipe_plane_rot(d, plane,
+								   format, modifier,
+								   sf_plane,
+								   is_clip_clamp,
+								   is_upscale,
+								   pipe, output,
+								   IGT_ROTATION_0);
+			if (ret != 0) {
+				igt_vec_fini(&tested_formats);
+				return ret;
+			}
 		}
-
 		igt_vec_fini(&tested_formats);
 	}
+	return ret;
 }
 
 static enum pipe
@@ -1327,6 +1340,7 @@ static data_t data;
 igt_main_args("", long_opts, help_str, opt_handler, &data)
 {
 	enum pipe pipe;
+	uint32_t ret = -EINVAL;
 
 	igt_fixture {
 		data.drm_fd = drm_open_driver_master(DRIVER_ANY);
@@ -1343,21 +1357,23 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
 			igt_describe(scaler_with_pixel_format_tests[index].describe);
 			igt_subtest_with_dynamic(scaler_with_pixel_format_tests[index].name) {
 				for_each_pipe(&data.display, pipe) {
-					for_each_valid_output_on_pipe(&data.display, pipe, output) {
-						if (!pipe_output_combo_valid(&data.display, pipe, output))
-							continue;
-						if (get_num_scalers(&data.display, pipe) < 1)
-							continue;
-
-						igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-
-							test_scaler_with_pixel_format_pipe(&data,
+					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
+						for_each_valid_output_on_pipe(&data.display, pipe, output) {
+							if (!pipe_output_combo_valid(&data.display, pipe, output))
+								continue;
+							if (get_num_scalers(&data.display, pipe) < 1)
+								continue;
+							ret = test_scaler_with_pixel_format_pipe(&data,
 									scaler_with_pixel_format_tests[index].sf,
 									false,
 									scaler_with_pixel_format_tests[index].is_upscale,
 									pipe, output);
+							if (ret == 0)
+								break;
 						}
-						break;
+						igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
+							      "Unsupported scaling operation in driver with return value %s\n",
+							      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
 					}
 				}
 			}
@@ -1367,21 +1383,24 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
 			igt_describe(scaler_with_rotation_tests[index].describe);
 			igt_subtest_with_dynamic(scaler_with_rotation_tests[index].name) {
 				for_each_pipe(&data.display, pipe) {
-					for_each_valid_output_on_pipe(&data.display, pipe, output) {
-						if (!pipe_output_combo_valid(&data.display, pipe, output))
-							continue;
-						if (get_num_scalers(&data.display, pipe) < 1)
-							continue;
-
-						igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-
-							test_scaler_with_rotation_pipe(&data,
+					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
+						for_each_valid_output_on_pipe(&data.display, pipe, output) {
+							if (!pipe_output_combo_valid(&data.display, pipe, output))
+								continue;
+							if (get_num_scalers(&data.display, pipe) < 1)
+								continue;
+
+							ret = test_scaler_with_rotation_pipe(&data,
 									scaler_with_rotation_tests[index].sf,
 									false,
 									scaler_with_rotation_tests[index].is_upscale,
 									pipe, output);
+							if (ret == 0)
+								break;
 						}
-						break;
+						igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
+							      "Unsupported scaling operation in driver with return value %s\n",
+							      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
 					}
 				}
 			}
@@ -1391,21 +1410,24 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
 			igt_describe(scaler_with_modifiers_tests[index].describe);
 			igt_subtest_with_dynamic(scaler_with_modifiers_tests[index].name) {
 				for_each_pipe(&data.display, pipe) {
-					for_each_valid_output_on_pipe(&data.display, pipe, output) {
-						if (!pipe_output_combo_valid(&data.display, pipe, output))
-							continue;
-						if (get_num_scalers(&data.display, pipe) < 1)
-							continue;
-
-						igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-
-							test_scaler_with_modifier_pipe(&data,
+					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
+						for_each_valid_output_on_pipe(&data.display, pipe, output) {
+							if (!pipe_output_combo_valid(&data.display, pipe, output))
+								continue;
+							if (get_num_scalers(&data.display, pipe) < 1)
+								continue;
+
+							ret = test_scaler_with_modifier_pipe(&data,
 									scaler_with_modifiers_tests[index].sf,
 									false,
 									scaler_with_modifiers_tests[index].is_upscale,
 									pipe, output);
+							if (ret == 0)
+								break;
 						}
-						break;
+						igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
+							      "Unsupported scaling operation in driver with return value %s\n",
+							      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
 					}
 				}
 			}
@@ -1414,39 +1436,46 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
 		igt_describe("Tests scaling with clipping and clamping, pixel formats.");
 		igt_subtest_with_dynamic("plane-scaler-with-clipping-clamping-pixel-formats") {
 			for_each_pipe(&data.display, pipe) {
-				for_each_valid_output_on_pipe(&data.display, pipe, output) {
-					if (!pipe_output_combo_valid(&data.display, pipe, output))
-						continue;
-					if (get_num_scalers(&data.display, pipe) < 1)
-						continue;
-
-					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
+				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
+					for_each_valid_output_on_pipe(&data.display, pipe, output) {
+						if (!pipe_output_combo_valid(&data.display, pipe, output))
+							continue;
+						if (get_num_scalers(&data.display, pipe) < 1)
+							continue;
 
-						test_scaler_with_pixel_format_pipe(&data, 0.0, true,
-										   false, pipe,
-										   output);
+						ret = test_scaler_with_pixel_format_pipe(&data, 0.0, true,
+											 false, pipe,
+											 output);
+						if (ret == 0)
+							break;
 					}
-					break;
+					igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
+						      "Unsupported scaling operation in driver with return value %s\n",
+						      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
 				}
 			}
 		}
 
+
 		igt_describe("Tests scaling with clipping and clamping, rotation.");
 		igt_subtest_with_dynamic("plane-scaler-with-clipping-clamping-rotation") {
 			for_each_pipe(&data.display, pipe) {
-				for_each_valid_output_on_pipe(&data.display, pipe, output) {
-					if (!pipe_output_combo_valid(&data.display, pipe, output))
-						continue;
-					if (get_num_scalers(&data.display, pipe) < 1)
-						continue;
-
-					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
+				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
+					for_each_valid_output_on_pipe(&data.display, pipe, output) {
+						if (!pipe_output_combo_valid(&data.display, pipe, output))
+							continue;
+						if (get_num_scalers(&data.display, pipe) < 1)
+							continue;
 
-						test_scaler_with_rotation_pipe(&data, 0.0, true,
-										false, pipe,
-										output);
+						ret = test_scaler_with_rotation_pipe(&data, 0.0, true,
+										     false, pipe,
+										     output);
+						if (ret == 0)
+							break;
 					}
-					break;
+					igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
+						      "Unsupported scaling operation in driver with return value %s\n",
+						      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
 				}
 			}
 		}
@@ -1454,18 +1483,22 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
 		igt_describe("Tests scaling with clipping and clamping, modifiers.");
 		igt_subtest_with_dynamic("plane-scaler-with-clipping-clamping-modifiers") {
 			for_each_pipe(&data.display, pipe) {
-				for_each_valid_output_on_pipe(&data.display, pipe, output) {
-					if (!pipe_output_combo_valid(&data.display, pipe, output))
-						continue;
-					if (get_num_scalers(&data.display, pipe) < 1)
-						continue;
+				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
+					for_each_valid_output_on_pipe(&data.display, pipe, output) {
+						if (!pipe_output_combo_valid(&data.display, pipe, output))
+							continue;
+						if (get_num_scalers(&data.display, pipe) < 1)
+							continue;
 
-					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-						test_scaler_with_modifier_pipe(&data, 0.0, true,
-										false, pipe,
-										output);
+						ret = test_scaler_with_modifier_pipe(&data, 0.0, true,
+										     false, pipe,
+										     output);
+						if (ret == 0)
+							break;
 					}
-					break;
+					igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
+						      "Unsupported scaling operation in driver with return value %s\n",
+						      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
 				}
 			}
 		}
-- 
2.43.0



More information about the igt-dev mailing list