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

Naladala Ramanaidu ramanaidu.naladala at intel.com
Mon Aug 26 04:53:48 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. Add informative logs to indicate when a scaling operation
is not supported on a specific output.

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

diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c
index 42eb67409..588a9c5f0 100644
--- a/tests/kms_plane_scaling.c
+++ b/tests/kms_plane_scaling.c
@@ -566,7 +566,7 @@ static void cleanup_crtc(data_t *data)
 	cleanup_fbs(data);
 }
 
-static void check_scaling_pipe_plane_rot(data_t *d, igt_plane_t *plane,
+static int check_scaling_pipe_plane_rot(data_t *d, igt_plane_t *plane,
 					 uint32_t pixel_format,
 					 uint64_t modifier,
 					 double sf_plane,
@@ -634,11 +634,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 +706,17 @@ 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 int 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,18 +730,22 @@ 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,
+static int test_scaler_with_rotation_pipe(data_t *d,
 					   double sf_plane,
 					   bool is_clip_clamp,
 					   bool is_upscale,
@@ -755,6 +756,7 @@ static void test_scaler_with_rotation_pipe(data_t *d,
 	unsigned format = DRM_FORMAT_XRGB8888;
 	uint64_t modifier = DRM_FORMAT_MOD_LINEAR;
 	igt_plane_t *plane;
+	uint32_t ret;
 
 	cleanup_crtc(d);
 
@@ -768,18 +770,21 @@ 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,
+static int test_scaler_with_pixel_format_pipe(data_t *d, double sf_plane,
 					       bool is_clip_clamp,
 					       bool is_upscale,
 					       enum pipe pipe,
@@ -788,6 +793,7 @@ static void test_scaler_with_pixel_format_pipe(data_t *d, double sf_plane,
 	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 +816,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 +1337,7 @@ static data_t data;
 igt_main_args("", long_opts, help_str, opt_handler, &data)
 {
 	enum pipe pipe;
+	uint32_t ret;
 
 	igt_fixture {
 		data.drm_fd = drm_open_driver_master(DRIVER_ANY);
@@ -1343,21 +1354,28 @@ 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) {
+							igt_info(" Trying on %s\n",
+								   igt_output_name(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;
+							igt_info("Required Scaling operation not supported on %s trying on next output\n",
+								  igt_output_name(output));
 						}
-						break;
+						igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
+							      "Unsupported scaling operation in driver with return value %s\n",
+							      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
+						igt_assert_eq(ret, 0);
 					}
 				}
 			}
@@ -1367,21 +1385,27 @@ 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)) {
+						igt_info(" Trying on %s\n", igt_output_name(output));
+						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;
+							igt_info("Required Scaling operation not supported on %s trying on next output\n",
+								  igt_output_name(output));
 						}
-						break;
+						igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
+							      "Unsupported scaling operation in driver with return value %s\n",
+							      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
+						igt_assert_eq(ret, 0);
 					}
 				}
 			}
@@ -1391,21 +1415,27 @@ 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) {
+							igt_info(" Trying on %s\n", igt_output_name(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;
+							igt_info("Required Scaling operation not supported on %s trying on next valid output\n",
+								  igt_output_name(output));
 						}
-						break;
+						igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
+							      "Unsupported scaling operation in driver with return value %s\n",
+							      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
+						igt_assert_eq(ret, 0);
 					}
 				}
 			}
@@ -1414,19 +1444,25 @@ 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)) {
-
-						test_scaler_with_pixel_format_pipe(&data, 0.0, true,
-										   false, pipe,
-										   output);
+				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
+					for_each_valid_output_on_pipe(&data.display, pipe, output) {
+						igt_info(" Trying on %s\n", igt_output_name(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, 0.0, true,
+											 false, pipe,
+											 output);
+						if (ret == 0)
+							break;
+						igt_info("Required Scaling operation not supported on %s trying on next valid output\n",
+							  igt_output_name(output));
 					}
-					break;
+					igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
+						      "Unsupported scaling operation in driver with return value %s\n",
+						      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
+					igt_assert_eq(ret, 0);
 				}
 			}
 		}
@@ -1434,19 +1470,26 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
 		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) {
+						igt_info(" Trying on %s\n", igt_output_name(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, 0.0, true,
+										     false, pipe,
+										     output);
+						if (ret == 0)
+							break;
+						igt_info("Required Scaling operation not supported on %s trying on next valid output\n",
+							  igt_output_name(output));
 
-						test_scaler_with_rotation_pipe(&data, 0.0, true,
-										false, pipe,
-										output);
 					}
-					break;
+					igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
+						      "Unsupported scaling operation in driver with return value %s\n",
+						      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
+					igt_assert_eq(ret, 0);
 				}
 			}
 		}
@@ -1454,18 +1497,25 @@ 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-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-						test_scaler_with_modifier_pipe(&data, 0.0, true,
-										false, pipe,
-										output);
+				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
+					for_each_valid_output_on_pipe(&data.display, pipe, output) {
+						igt_info(" Trying on %s\n", igt_output_name(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, 0.0, true,
+										     false, pipe,
+										     output);
+						if (ret == 0)
+							break;
+						igt_info("Required Scaling operation not supported on %s trying on next valid output\n",
+							  igt_output_name(output));
 					}
-					break;
+					igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
+						      "Unsupported scaling operation in driver with return value %s\n",
+						      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
+					igt_assert_eq(ret, 0);
 				}
 			}
 		}
-- 
2.43.0



More information about the igt-dev mailing list