[igt-dev] [PATCH i-g-t 2/4] tests/kms_ccs: separate ccs modifiers to separate subtests
Imre Deak
imre.deak at intel.com
Fri Jun 18 13:20:11 UTC 2021
On Tue, Jun 15, 2021 at 07:00:20PM +0300, Juha-Pekka Heikkila wrote:
> Current kms_ccs test is not revealing if some ccs modifier fails
> as long as there's at least one modifier not failing. Separate all
> ccs modifiers onto their own tests making testing individual ccs
> modifiers easier and not hiding failures.
>
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
Reviewed-by: Imre Deak <imre.deak at intel.com>
One nit below:
> ---
> tests/kms_ccs.c | 156 +++++++++++++++++++++---------------------------
> 1 file changed, 67 insertions(+), 89 deletions(-)
>
> diff --git a/tests/kms_ccs.c b/tests/kms_ccs.c
> index a3eac1f8f..62850c1b2 100644
> --- a/tests/kms_ccs.c
> +++ b/tests/kms_ccs.c
> @@ -41,6 +41,7 @@ enum test_flags {
> TEST_BAD_CCS_HANDLE = 1 << 6,
> TEST_BAD_AUX_STRIDE = 1 << 7,
> TEST_RANDOM = 1 << 8,
> + TEST_ALL_PLANES = 1 << 9,
> };
>
> #define TEST_FAIL_ON_ADDFB2 \
> @@ -92,11 +93,11 @@ static const struct {
> uint64_t modifier;
> const char *str;
> } ccs_modifiers[] = {
> - {LOCAL_I915_FORMAT_MOD_Y_TILED_CCS, "LOCAL_I915_FORMAT_MOD_Y_TILED_CCS"},
> - {LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS, "LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS"},
> - {LOCAL_I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS, "LOCAL_I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS"},
> - {LOCAL_I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC, "LOCAL_I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC"},
> - {LOCAL_I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS, "LOCAL_I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS"},
> + {LOCAL_I915_FORMAT_MOD_Y_TILED_CCS, "y_tiled_ccs"},
> + {LOCAL_I915_FORMAT_MOD_Yf_TILED_CCS, "yf_tiled_ccs"},
> + {LOCAL_I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS, "y_tiled_gen12_rc_ccs"},
> + {LOCAL_I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC, "y_tiled_gen12_rc_ccs_cc"},
> + {LOCAL_I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS, "y_tiled_gen12_mc_ccs"},
> };
>
> static bool check_ccs_planes;
> @@ -507,37 +508,53 @@ static int test_ccs(data_t *data)
> return valid_tests;
> }
>
> -static int __test_output(data_t *data)
> +static void test_output(data_t *data, const char* testformatstring)
Just const char *test_name ?
> {
> - igt_display_t *display = &data->display;
> - int i, valid_tests = 0;
> -
> - data->output = igt_get_single_output_for_pipe(display, data->pipe);
> - igt_require(data->output);
> -
> - igt_output_set_pipe(data->output, data->pipe);
> -
> - for (i = 0; i < ARRAY_SIZE(ccs_modifiers); i++) {
> - int j;
> + igt_fixture {
> + data->output = igt_get_single_output_for_pipe(&data->display,
> + data->pipe);
> + igt_output_set_pipe(data->output, data->pipe);
> + }
>
> + for (int i = 0; i < ARRAY_SIZE(ccs_modifiers); i++) {
> data->ccs_modifier = ccs_modifiers[i].modifier;
> - igt_debug("Modifier in use: %s\n", ccs_modifiers[i].str);
> - for (j = 0; j < ARRAY_SIZE(formats); j++) {
> - data->format = formats[j];
> - valid_tests += test_ccs(data);
> +
> + igt_subtest_f("pipe-%s-%s-%s", kmstest_pipe_name(data->pipe),
> + testformatstring, ccs_modifiers[i].str ) {
> + int valid_tests = 0;
> + igt_require(data->output);
> +
> + if (data->flags == TEST_RANDOM)
> + igt_info("Testing with seed %d\n", data->seed);
> +
> + if (data->flags & TEST_ALL_PLANES) {
> + igt_display_require_output_on_pipe(&data->display, data->pipe);
> +
> + for_each_plane_on_pipe(&data->display, data->pipe, data->plane) {
> + for (int j = 0; j < ARRAY_SIZE(formats); j++) {
> + data->format = formats[j];
> + valid_tests += test_ccs(data);
> + }
> + }
> + } else {
> + for (int j = 0; j < ARRAY_SIZE(formats); j++) {
> + data->format = formats[j];
> + valid_tests += test_ccs(data);
> + }
> + }
> + igt_require_f(valid_tests > 0,
> + "no valid tests for %s on pipe %s\n",
> + ccs_modifiers[i].str,
> + kmstest_pipe_name(data->pipe));
> }
> }
>
> - igt_output_set_pipe(data->output, PIPE_NONE);
> - igt_display_commit2(display, display->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
> -
> - return valid_tests;
> -}
> -
> -static void test_output(data_t *data)
> -{
> - int valid_tests = __test_output(data);
> - igt_require_f(valid_tests > 0, "CCS not supported, skipping\n");
> + igt_fixture {
> + igt_output_set_pipe(data->output, PIPE_NONE);
> + igt_display_commit2(&data->display, data->display.is_atomic ?
> + COMMIT_ATOMIC : COMMIT_LEGACY);
> + data->plane = NULL;
> + }
> }
>
> static int opt_handler(int opt, int opt_index, void *opt_data)
> @@ -570,6 +587,22 @@ igt_main_args("cs:", NULL, help_str, opt_handler, &data)
> {
> enum pipe pipe;
>
> + const struct {
> + const enum test_flags flags;
> + const char *testname;
> + const char *description;
> + } tests[] = {
> + {TEST_BAD_PIXEL_FORMAT, "bad-pixel-format", "Test bad pixel format with given CCS modifier"},
> + {TEST_BAD_ROTATION_90, "bad-rotation-90", "Test 90 degree rotation with given CCS modifier"},
> + {TEST_CRC, "crc-primary-basic", "Test primary plane CRC compatibility with given CCS modifier"},
> + {TEST_CRC | TEST_ROTATE_180, "crc-primary-rotation-180", "Test 180 degree rotation with given CCS modifier"},
> + {TEST_RANDOM, "random-ccs-data", "Test random CCS data"},
> + {TEST_NO_AUX_BUFFER, "missing-ccs-buffer", "Test missing CCS buffer with given CCS modifier"},
> + {TEST_BAD_CCS_HANDLE, "ccs-on-another-bo", "Test CCS with different BO with given modifier"},
> + {TEST_BAD_AUX_STRIDE, "bad-aux-stride", "Test with bad AUX stride with given CCS modifier"},
> + {TEST_CRC | TEST_ALL_PLANES, "crc-sprite-planes-basic", "Test sprite plane CRC compatibility with given CCS modifier"},
> + };
> +
> igt_fixture {
> data.drm_fd = drm_open_driver_master(DRIVER_INTEL);
>
> @@ -584,68 +617,13 @@ igt_main_args("cs:", NULL, help_str, opt_handler, &data)
> }
>
> for_each_pipe_static(pipe) {
> - const char *pipe_name = kmstest_pipe_name(pipe);
> -
> data.pipe = pipe;
>
> - data.flags = TEST_BAD_PIXEL_FORMAT;
> - igt_describe("Test bad pixel format with given CCS modifier");
> - igt_subtest_f("pipe-%s-bad-pixel-format", pipe_name)
> - test_output(&data);
> -
> - data.flags = TEST_BAD_ROTATION_90;
> - igt_describe("Test 90 degree rotation with given CCS modifier");
> - igt_subtest_f("pipe-%s-bad-rotation-90", pipe_name)
> - test_output(&data);
> -
> - data.flags = TEST_CRC;
> - igt_describe("Test primary plane CRC compatibility with given CCS modifier");
> - igt_subtest_f("pipe-%s-crc-primary-basic", pipe_name)
> - test_output(&data);
> -
> - data.flags = TEST_CRC | TEST_ROTATE_180;
> - igt_describe("Test 180 degree rotation with given CCS modifier");
> - igt_subtest_f("pipe-%s-crc-primary-rotation-180", pipe_name)
> - test_output(&data);
> -
> - data.flags = TEST_CRC;
> - igt_describe("Test sprite plane CRC compatibility with given CCS modifier");
> - igt_subtest_f("pipe-%s-crc-sprite-planes-basic", pipe_name) {
> - int valid_tests = 0;
> -
> - igt_display_require_output_on_pipe(&data.display, data.pipe);
> -
> - for_each_plane_on_pipe(&data.display, data.pipe, data.plane) {
> - valid_tests += __test_output(&data);
> - }
> -
> - igt_require_f(valid_tests > 0,
> - "CCS not supported, skipping\n");
> - }
> -
> - data.plane = NULL;
> -
> - data.flags = TEST_RANDOM;
> - igt_describe("Test random CCS data");
> - igt_subtest_f("pipe-%s-random-ccs-data", pipe_name) {
> - igt_info("Testing with seed %d\n", data.seed);
> - test_output(&data);
> + for (int c = 0; c < ARRAY_SIZE(tests); c++) {
> + data.flags = tests[c].flags;
> + igt_describe(tests[c].description);
> + test_output(&data, tests[c].testname);
> }
> -
> - data.flags = TEST_NO_AUX_BUFFER;
> - igt_describe("Test missing CCS buffer with given CCS modifier");
> - igt_subtest_f("pipe-%s-missing-ccs-buffer", pipe_name)
> - test_output(&data);
> -
> - data.flags = TEST_BAD_CCS_HANDLE;
> - igt_describe("Test CCS with different BO with given modifier");
> - igt_subtest_f("pipe-%s-ccs-on-another-bo", pipe_name)
> - test_output(&data);
> -
> - data.flags = TEST_BAD_AUX_STRIDE;
> - igt_describe("Test with bad AUX stride with given CCS modifier");
> - igt_subtest_f("pipe-%s-bad-aux-stride", pipe_name)
> - test_output(&data);
> }
>
> igt_fixture
> --
> 2.28.0
>
> _______________________________________________
> igt-dev mailing list
> igt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev
More information about the igt-dev
mailing list