[igt-dev] [PATCH i-g-t] tests/kms_plane: Use solid colors for the cropping tests
Juha-Pekka Heikkila
juhapekka.heikkila at gmail.com
Wed Jun 2 11:18:32 UTC 2021
On 1.6.2021 19.28, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> Something is wrong with the way we render stuff in the crop tests.
> The renreded image can be different for different pixel formats,
> at least when using fullscreen planes (maybe resolution dependent).
> Go back to using just solid colors until someone figures out what's
> wrong with the rendering.
Is there some ci report where this could be seen? I guess it will fail
incorrectly?
/Juha-Pekka
>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
> tests/kms_plane.c | 61 ++++++++++++++++++++++++++---------------------
> 1 file changed, 34 insertions(+), 27 deletions(-)
>
> diff --git a/tests/kms_plane.c b/tests/kms_plane.c
> index d7cbe8925cd9..ea1118c23769 100644
> --- a/tests/kms_plane.c
> +++ b/tests/kms_plane.c
> @@ -567,7 +567,7 @@ static void capture_crc(data_t *data, unsigned int vblank, igt_crc_t *crc)
> crc->frame, vblank);
> }
>
> -static void capture_format_crcs_packed(data_t *data, enum pipe pipe,
> +static void capture_format_crcs_single(data_t *data, enum pipe pipe,
> igt_plane_t *plane,
> uint32_t format, uint64_t modifier,
> int width, int height,
> @@ -589,13 +589,13 @@ static void capture_format_crcs_packed(data_t *data, enum pipe pipe,
> igt_pipe_crc_get_current(data->drm_fd, data->pipe_crc, &crc[0]);
> }
>
> -static void capture_format_crcs_planar(data_t *data, enum pipe pipe,
> - igt_plane_t *plane,
> - uint32_t format, uint64_t modifier,
> - int width, int height,
> - enum igt_color_encoding encoding,
> - enum igt_color_range range,
> - igt_crc_t crc[], struct igt_fb *fb)
> +static void capture_format_crcs_multiple(data_t *data, enum pipe pipe,
> + igt_plane_t *plane,
> + uint32_t format, uint64_t modifier,
> + int width, int height,
> + enum igt_color_encoding encoding,
> + enum igt_color_range range,
> + igt_crc_t crc[], struct igt_fb *fb)
> {
> unsigned int vblank[ARRAY_SIZE(colors_extended)];
> struct drm_event_vblank ev;
> @@ -712,6 +712,11 @@ restart_round:
> capture_crc(data, vblank[i - 1], &crc[i - 1]);
> }
>
> +static bool use_multiple_colors(data_t *data, uint32_t format)
> +{
> + return data->crop != 0 || igt_format_is_yuv_semiplanar(format);
> +}
> +
> static bool test_format_plane_colors(data_t *data, enum pipe pipe,
> igt_plane_t *plane,
> uint32_t format, uint64_t modifier,
> @@ -726,17 +731,17 @@ static bool test_format_plane_colors(data_t *data, enum pipe pipe,
> int crc_mismatch_count = 0;
> bool result = true;
> int i, total_crcs = 1;
> - bool planar = igt_format_is_yuv_semiplanar(format);
>
> - if (planar) {
> - capture_format_crcs_planar(data, pipe, plane, format, modifier,
> - width, height, encoding, range, crc,
> - fb);
> + if (use_multiple_colors(data, format)) {
> + capture_format_crcs_multiple(data, pipe, plane, format, modifier,
> + width, height, encoding, range, crc,
> + fb);
> total_crcs = data->num_colors;
> - } else
> - capture_format_crcs_packed(data, pipe, plane, format, modifier,
> + } else {
> + capture_format_crcs_single(data, pipe, plane, format, modifier,
> width, height, encoding, range, crc,
> fb);
> + }
>
> for (i = 0; i < total_crcs; i++) {
> if (!igt_check_crc_equal(&crc[i], &ref_crc[i])) {
> @@ -826,9 +831,11 @@ static bool test_format_plane_yuv(data_t *data, enum pipe pipe,
> return result;
> }
>
> -enum crc_set { PACKED_CRC_SET,
> - PLANAR_CRC_SET,
> - MAX_CRC_SET };
> +enum crc_set {
> + SINGLE_CRC_SET,
> + MULTIPLE_CRC_SET,
> + MAX_CRC_SET,
> +};
>
> struct format_mod {
> uint64_t modifier;
> @@ -906,22 +913,22 @@ static bool test_format_plane(data_t *data, enum pipe pipe,
> igt_remove_fb(data->drm_fd, &test_fb);
> }
>
> - capture_format_crcs_packed(data, pipe, plane, ref.format, ref.modifier,
> + capture_format_crcs_single(data, pipe, plane, ref.format, ref.modifier,
> width, height, IGT_COLOR_YCBCR_BT709,
> IGT_COLOR_YCBCR_LIMITED_RANGE,
> - ref_crc[PACKED_CRC_SET], &fb);
> + ref_crc[SINGLE_CRC_SET], &fb);
>
> - capture_format_crcs_planar(data, pipe, plane, ref.format, ref.modifier,
> - width, height, IGT_COLOR_YCBCR_BT709,
> - IGT_COLOR_YCBCR_LIMITED_RANGE,
> - ref_crc[PLANAR_CRC_SET], &fb);
> + capture_format_crcs_multiple(data, pipe, plane, ref.format, ref.modifier,
> + width, height, IGT_COLOR_YCBCR_BT709,
> + IGT_COLOR_YCBCR_LIMITED_RANGE,
> + ref_crc[MULTIPLE_CRC_SET], &fb);
>
> /*
> * Make sure we have some difference between the colors. This
> * at least avoids claiming success when everything is just
> * black all the time (eg. if the plane is never even on).
> */
> - igt_require(num_unique_crcs(ref_crc[PLANAR_CRC_SET], data->num_colors) > 1);
> + igt_require(num_unique_crcs(ref_crc[MULTIPLE_CRC_SET], data->num_colors) > 1);
>
> for (int i = 0; i < plane->format_mod_count; i++) {
> struct format_mod f = {
> @@ -958,8 +965,8 @@ static bool test_format_plane(data_t *data, enum pipe pipe,
> continue;
> }
>
> - crcset = ref_crc[(igt_format_is_yuv_semiplanar(f.format)
> - ? PLANAR_CRC_SET : PACKED_CRC_SET)];
> + crcset = ref_crc[use_multiple_colors(data, f.format) ?
> + MULTIPLE_CRC_SET : SINGLE_CRC_SET];
>
> if (igt_format_is_yuv(f.format))
> result &= test_format_plane_yuv(data, pipe, plane,
>
More information about the igt-dev
mailing list