[igt-dev] [RFC] tests/kms_color: Change in commit style
Daniel Vetter
daniel.vetter at ffwll.ch
Thu Oct 4 09:35:10 UTC 2018
On Thu, Oct 4, 2018 at 10:35 AM <swati2.sharma at intel.com> wrote:
>
> From: Swati Sharma <swati2.sharma at intel.com>
>
> Existing kms_color i-g-t, commit style by default is legacy for
> all the ctm/gamma/degamma subtests.
>
> In this patch, provision for both legacy and atomic commit is
> provided. Patch is floated as RFC to gather feedback on the idea
> and infrastructure proposed.
>
> Other approach could be getting the value of is_atomic as done in
> kms_available_modes_crc like
> data.commit = data.display.is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY
> However with this approach we won't be able to test both the paths.
>
> Signed-off-by: Swati Sharma <swati2.sharma at intel.com>
Imo just switch over to atomic. There's no upstream driver supporting
color management props that doesn't support atomic.
-Daniel
> ---
> lib/igt_kms.c | 14 ++++++++
> lib/igt_kms.h | 1 +
> tests/kms_color.c | 102 ++++++++++++++++++++++++++++++++++--------------------
> 3 files changed, 80 insertions(+), 37 deletions(-)
>
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index 4563bfd..fd1f4dc 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -4229,3 +4229,17 @@ bool igt_display_has_format_mod(igt_display_t *display, uint32_t format,
>
> return false;
> }
> +
> +/**
> + * kmstest_commit_style_name:
> + * @commit: commit style LEGACY/ATOMIC
> + *
> + * Returns: String representing @commit, e.g. "commit-legacy".
> + */
> +const char *kmstest_commit_style_name(enum igt_commit_style commit)
> +{
> + if (commit == COMMIT_LEGACY)
> + return "commit-legacy";
> + else if (commit == COMMIT_ATOMIC)
> + return "commit-atomic";
> +}
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index 3862efa..50bb965 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -243,6 +243,7 @@ enum igt_commit_style {
> COMMIT_UNIVERSAL,
> COMMIT_ATOMIC,
> };
> +const char *kmstest_commit_style_name(enum igt_commit_style commit);
>
> enum igt_atomic_plane_properties {
> IGT_PLANE_SRC_X = 0,
> diff --git a/tests/kms_color.c b/tests/kms_color.c
> index bb106dd..581361e 100644
> --- a/tests/kms_color.c
> +++ b/tests/kms_color.c
> @@ -61,9 +61,9 @@ typedef struct {
> uint32_t color_depth;
> uint64_t degamma_lut_size;
> uint64_t gamma_lut_size;
> + enum igt_commit_style commit;
> } data_t;
>
> -
> static void paint_gradient_rectangles(data_t *data,
> drmModeModeInfo *mode,
> color_t *colors,
> @@ -304,12 +304,12 @@ static void test_pipe_degamma(data_t *data,
> disable_ctm(primary->pipe);
> disable_degamma(primary->pipe);
> set_gamma(data, primary->pipe, gamma_linear);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
>
> /* Draw solid colors with no degamma transformation. */
> paint_rectangles(data, mode, red_green_blue, &fb);
> igt_plane_set_fb(primary, &fb);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
> igt_wait_for_vblank(data->drm_fd, primary->pipe->pipe);
> igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
>
> @@ -319,7 +319,7 @@ static void test_pipe_degamma(data_t *data,
> paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> igt_plane_set_fb(primary, &fb);
> set_degamma(data, primary->pipe, degamma_full);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
> igt_wait_for_vblank(data->drm_fd, primary->pipe->pipe);
> igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
>
> @@ -384,12 +384,12 @@ static void test_pipe_gamma(data_t *data,
> disable_ctm(primary->pipe);
> disable_degamma(primary->pipe);
> set_gamma(data, primary->pipe, gamma_full);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
>
> /* Draw solid colors with no gamma transformation. */
> paint_rectangles(data, mode, red_green_blue, &fb);
> igt_plane_set_fb(primary, &fb);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
> igt_wait_for_vblank(data->drm_fd, primary->pipe->pipe);
> igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
>
> @@ -398,7 +398,7 @@ static void test_pipe_gamma(data_t *data,
> */
> paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> igt_plane_set_fb(primary, &fb);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
> igt_wait_for_vblank(data->drm_fd, primary->pipe->pipe);
> igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
>
> @@ -470,12 +470,12 @@ static void test_pipe_legacy_gamma(data_t *data,
> disable_degamma(primary->pipe);
> disable_gamma(primary->pipe);
> disable_ctm(primary->pipe);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
>
> /* Draw solid colors with no gamma transformation. */
> paint_rectangles(data, mode, red_green_blue, &fb);
> igt_plane_set_fb(primary, &fb);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
> igt_wait_for_vblank(data->drm_fd, primary->pipe->pipe);
> igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
>
> @@ -490,7 +490,7 @@ static void test_pipe_legacy_gamma(data_t *data,
> red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe->crtc_id,
> legacy_lut_size, red_lut, green_lut, blue_lut), 0);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
> igt_wait_for_vblank(data->drm_fd, primary->pipe->pipe);
> igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
>
> @@ -505,7 +505,7 @@ static void test_pipe_legacy_gamma(data_t *data,
>
> igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe->crtc_id,
> legacy_lut_size, red_lut, green_lut, blue_lut), 0);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
>
> igt_plane_set_fb(primary, NULL);
> igt_output_set_pipe(output, PIPE_NONE);
> @@ -559,7 +559,7 @@ static void test_pipe_legacy_gamma_reset(data_t *data,
> disable_degamma(primary->pipe);
> disable_ctm(primary->pipe);
> disable_gamma(primary->pipe);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
>
> /* Set a degama & gamma LUT and a CTM using the
> * properties and verify the content of the
> @@ -567,7 +567,7 @@ static void test_pipe_legacy_gamma_reset(data_t *data,
> set_degamma(data, primary->pipe, degamma_linear);
> set_ctm(primary->pipe, ctm_identity);
> set_gamma(data, primary->pipe, gamma_zero);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
>
> blob = get_blob(data, primary->pipe, IGT_CRTC_DEGAMMA_LUT);
> igt_assert(blob &&
> @@ -610,7 +610,7 @@ static void test_pipe_legacy_gamma_reset(data_t *data,
> legacy_lut_size,
> red_lut, green_lut, blue_lut),
> 0);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
>
> igt_assert(get_blob(data, primary->pipe,
> IGT_CRTC_DEGAMMA_LUT) == NULL);
> @@ -692,12 +692,12 @@ static bool test_pipe_ctm(data_t *data,
> set_degamma(data, primary->pipe, degamma_linear);
> set_gamma(data, primary->pipe, gamma_linear);
> disable_ctm(primary->pipe);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
>
> paint_rectangles(data, mode, after, &fb);
> igt_plane_set_fb(primary, &fb);
> set_ctm(primary->pipe, ctm_identity);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
> igt_wait_for_vblank(data->drm_fd, primary->pipe->pipe);
> igt_pipe_crc_collect_crc(data->pipe_crc, &crc_software);
>
> @@ -705,7 +705,7 @@ static bool test_pipe_ctm(data_t *data,
> paint_rectangles(data, mode, before, &fb);
> igt_plane_set_fb(primary, &fb);
> set_ctm(primary->pipe, ctm_matrix);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
> igt_wait_for_vblank(data->drm_fd, primary->pipe->pipe);
> igt_pipe_crc_collect_crc(data->pipe_crc, &crc_hardware);
>
> @@ -800,7 +800,7 @@ static void test_pipe_limited_range_ctm(data_t *data,
> igt_output_set_prop_value(output, IGT_CONNECTOR_BROADCAST_RGB, BROADCAST_RGB_FULL);
> paint_rectangles(data, mode, red_green_blue_limited, &fb);
> igt_plane_set_fb(primary, &fb);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
> igt_wait_for_vblank(data->drm_fd, primary->pipe->pipe);
> igt_pipe_crc_collect_crc(data->pipe_crc, &crc_full);
>
> @@ -808,7 +808,7 @@ static void test_pipe_limited_range_ctm(data_t *data,
> igt_output_set_prop_value(output, IGT_CONNECTOR_BROADCAST_RGB, BROADCAST_RGB_16_235);
> paint_rectangles(data, mode, red_green_blue_full, &fb);
> igt_plane_set_fb(primary, &fb);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
> igt_wait_for_vblank(data->drm_fd, primary->pipe->pipe);
> igt_pipe_crc_collect_crc(data->pipe_crc, &crc_limited);
>
> @@ -876,7 +876,8 @@ run_tests_for_pipe(data_t *data, enum pipe p)
> data->color_depth = 8;
> delta = 1.0 / (1 << data->color_depth);
>
> - igt_subtest_f("pipe-%s-ctm-red-to-blue", kmstest_pipe_name(p)) {
> + igt_subtest_f("pipe-%s-ctm-red-to-blue-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit)) {
> color_t blue_green_blue[] = {
> { 0.0, 0.0, 1.0 },
> { 0.0, 1.0, 0.0 },
> @@ -889,7 +890,8 @@ run_tests_for_pipe(data_t *data, enum pipe p)
> blue_green_blue, ctm));
> }
>
> - igt_subtest_f("pipe-%s-ctm-green-to-red", kmstest_pipe_name(p)) {
> + igt_subtest_f("pipe-%s-ctm-green-to-red-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit)) {
> color_t red_red_blue[] = {
> { 1.0, 0.0, 0.0 },
> { 1.0, 0.0, 0.0 },
> @@ -902,7 +904,8 @@ run_tests_for_pipe(data_t *data, enum pipe p)
> red_red_blue, ctm));
> }
>
> - igt_subtest_f("pipe-%s-ctm-blue-to-red", kmstest_pipe_name(p)) {
> + igt_subtest_f("pipe-%s-ctm-blue-to-red-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit)) {
> color_t red_green_red[] = {
> { 1.0, 0.0, 0.0 },
> { 0.0, 1.0, 0.0 },
> @@ -919,7 +922,8 @@ run_tests_for_pipe(data_t *data, enum pipe p)
> * the it depends on the hardware we're dealing with, we can
> * either get clamped or rounded values and we also need to
> * account for odd number of items in the LUTs. */
> - igt_subtest_f("pipe-%s-ctm-0-25", kmstest_pipe_name(p)) {
> + igt_subtest_f("pipe-%s-ctm-0-25-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit)) {
> color_t expected_colors[] = {
> { 0.0, }, { 0.0, }, { 0.0, }
> };
> @@ -940,7 +944,8 @@ run_tests_for_pipe(data_t *data, enum pipe p)
> igt_assert(success);
> }
>
> - igt_subtest_f("pipe-%s-ctm-0-5", kmstest_pipe_name(p)) {
> + igt_subtest_f("pipe-%s-ctm-0-5-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit)) {
> color_t expected_colors[] = {
> { 0.0, }, { 0.0, }, { 0.0, }
> };
> @@ -961,7 +966,8 @@ run_tests_for_pipe(data_t *data, enum pipe p)
> igt_assert(success);
> }
>
> - igt_subtest_f("pipe-%s-ctm-0-75", kmstest_pipe_name(p)) {
> + igt_subtest_f("pipe-%s-ctm-0-75-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit)) {
> color_t expected_colors[] = {
> { 0.0, }, { 0.0, }, { 0.0, }
> };
> @@ -982,7 +988,8 @@ run_tests_for_pipe(data_t *data, enum pipe p)
> igt_assert(success);
> }
>
> - igt_subtest_f("pipe-%s-ctm-max", kmstest_pipe_name(p)) {
> + igt_subtest_f("pipe-%s-ctm-max-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit)) {
> color_t full_rgb[] = {
> { 1.0, 0.0, 0.0 },
> { 0.0, 1.0, 0.0 },
> @@ -1000,7 +1007,8 @@ run_tests_for_pipe(data_t *data, enum pipe p)
> full_rgb, ctm));
> }
>
> - igt_subtest_f("pipe-%s-ctm-negative", kmstest_pipe_name(p)) {
> + igt_subtest_f("pipe-%s-ctm-negative-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit)) {
> color_t all_black[] = {
> { 0.0, 0.0, 0.0 },
> { 0.0, 0.0, 0.0 },
> @@ -1014,27 +1022,32 @@ run_tests_for_pipe(data_t *data, enum pipe p)
> }
>
> #if 0
> - igt_subtest_f("pipe-%s-ctm-limited-range", kmstest_pipe_name(p))
> + igt_subtest_f("pipe-%s-ctm-limited-range-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit))
> test_pipe_limited_range_ctm(data, primary);
> #endif
>
> - igt_subtest_f("pipe-%s-degamma", kmstest_pipe_name(p))
> + igt_subtest_f("pipe-%s-degamma-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit))
> test_pipe_degamma(data, primary);
>
> - igt_subtest_f("pipe-%s-gamma", kmstest_pipe_name(p))
> + igt_subtest_f("pipe-%s-gamma-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit))
> test_pipe_gamma(data, primary);
>
> - igt_subtest_f("pipe-%s-legacy-gamma", kmstest_pipe_name(p))
> + igt_subtest_f("pipe-%s-legacy-gamma-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit))
> test_pipe_legacy_gamma(data, primary);
>
> - igt_subtest_f("pipe-%s-legacy-gamma-reset", kmstest_pipe_name(p))
> + igt_subtest_f("pipe-%s-legacy-gamma-reset-%s", kmstest_pipe_name(p),
> + kmstest_commit_style_name(data->commit))
> test_pipe_legacy_gamma_reset(data, primary);
>
> igt_fixture {
> disable_degamma(primary->pipe);
> disable_gamma(primary->pipe);
> disable_ctm(primary->pipe);
> - igt_display_commit(&data->display);
> + igt_display_commit2(&data->display, data->commit);
>
> igt_pipe_crc_free(data->pipe_crc);
> data->pipe_crc = NULL;
> @@ -1076,7 +1089,7 @@ invalid_lut_sizes(data_t *data)
> struct _drm_color_lut *degamma_lut = malloc(data->degamma_lut_size * sizeof(struct _drm_color_lut) * 2);
> struct _drm_color_lut *gamma_lut = malloc(data->gamma_lut_size * sizeof(struct _drm_color_lut) * 2);
>
> - igt_display_commit2(display, display->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
> + igt_display_commit2(&data->display, data->commit);
>
> if (igt_pipe_obj_has_prop(pipe, IGT_CRTC_DEGAMMA_LUT)) {
> igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_DEGAMMA_LUT,
> @@ -1166,15 +1179,30 @@ igt_main
> igt_display_init(&data.display, data.drm_fd);
> }
>
> + igt_subtest_f("pipe-invalid-ctm-matrix-sizes")
> + invalid_ctm_matrix_sizes(&data);
> +
> + data.commit = COMMIT_LEGACY;
> +
> for_each_pipe_static(pipe)
> igt_subtest_group
> run_tests_for_pipe(&data, pipe);
>
> - igt_subtest_f("pipe-invalid-lut-sizes")
> + igt_subtest_f("pipe-invalid-lut-sizes-%s",
> + kmstest_commit_style_name(data.commit))
> invalid_lut_sizes(&data);
>
> - igt_subtest_f("pipe-invalid-ctm-matrix-sizes")
> - invalid_ctm_matrix_sizes(&data);
> + if (data.is_atomic == 1) {
> + data.commit = COMMIT_ATOMIC;
> +
> + for_each_pipe_static(pipe)
> + igt_subtest_group
> + run_tests_for_pipe(&data, pipe);
> +
> + igt_subtest_f("pipe-invalid-lut-sizes-%s",
> + kmstest_commit_style_name(data.commit))
> + invalid_lut_sizes(&data);
> + }
>
> igt_fixture {
> igt_display_fini(&data.display);
> --
> 1.9.1
>
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
More information about the igt-dev
mailing list