[igt-dev] [PATCH i-g-t v2] tests/kms_rotation_crc- MPO subtest: Mixing different pixel formats and tiling on different planes.

Juha-Pekka Heikkilä juhapekka.heikkila at gmail.com
Sat Dec 11 10:29:37 UTC 2021


On Tue, Dec 7, 2021 at 2:28 PM Ananya Sharma <ananya.sharma at intel.com> wrote:
>
> Addition of P010 pixel format with already existing pixel formats.
>
> Signed-off-by: Ananya Sharma <ananya.sharma at intel.com>
> ---
>  tests/kms_rotation_crc.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
> index 1497120c..b39ae576 100644
> --- a/tests/kms_rotation_crc.c
> +++ b/tests/kms_rotation_crc.c
> @@ -666,7 +666,7 @@ static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
>          * case with tiling are 2 bpp, 4 bpp and NV12.
>          */
>         static const uint32_t formatlist[] = {DRM_FORMAT_RGB565,
> -               DRM_FORMAT_XRGB8888, DRM_FORMAT_NV12};
> +               DRM_FORMAT_XRGB8888, DRM_FORMAT_NV12, DRM_FORMAT_P010};
>
>         static struct {
>                 igt_rotation_t rotation;
> @@ -753,12 +753,17 @@ static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
>                                                  */
>                                                 if (p[0].format != DRM_FORMAT_NV12 &&
>                                                     p[1].format != DRM_FORMAT_NV12 &&
> +                                                   p[0].format != DRM_FORMAT_P010 &&
> +                                                   p[1].format != DRM_FORMAT_P010 &&

You could replace above with
"!igt_format_is_yuv_semiplanar(p[0].format) &&
!igt_format_is_yuv_semiplanar(p[1].format)"

>                                                     crclog[ctz(planeconfigs[i].rotation) | (ctz(planeconfigs[j].rotation) << 2)].frame != 0) {
>                                                         retcrc_sw = crclog[ctz(planeconfigs[i].rotation) | (ctz(planeconfigs[j].rotation) << 2)];
>                                                         have_crc = true;
>                                                 } else if (p[0].format == DRM_FORMAT_NV12 &&
>                                                            p[1].format != DRM_FORMAT_NV12 &&
>                                                            lastroundjformat != DRM_FORMAT_NV12 &&
> +                                                          p[0].format == DRM_FORMAT_P010 &&
> +                                                          p[1].format != DRM_FORMAT_P010 &&
> +                                                          lastroundjformat !=DRM_FORMAT_P010 &&

Above does not work. p[0].format == DRM_FORMAT_NV12 &&  p[0].format ==
DRM_FORMAT_P010 will never be true. Also this rule is written to take
care when p[0] can be NV12 or not NV12 in current and previous round
in order to be able to use previous crc here when rotations did stay
same and p[0] did stay NV12. Now on previous round p[0] can be also
p010 and p[1] can be NV12 or P010 on that round which need to be
checked on. This juggling is because on Intel hw color interpolation
with planar formats is not well defined.

>                                                            planeconfigs[i].rotation == lastroundirotation &&
>                                                            planeconfigs[j].rotation == lastroundjrotation) {
>                                                         /*
> @@ -819,7 +824,8 @@ static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
>                                                                                    flipsw,
>                                                                                    &retcrc_sw);
>
> -                                                       if (p[0].format != DRM_FORMAT_NV12 && p[1].format != DRM_FORMAT_NV12)
> +                                                       if (p[0].format != DRM_FORMAT_NV12 && p[1].format != DRM_FORMAT_NV12 &&
> +                                                                       p[0].format != DRM_FORMAT_P010 && p[1].format != DRM_FORMAT_P010)

Here also "!igt_format_is_yuv_semiplanar(p[0].format) &&
!igt_format_is_yuv_semiplanar(p[1].format)"

>                                                                 crclog[ctz(planeconfigs[i].rotation) | (ctz(planeconfigs[j].rotation) << 2)]
>                                                                 = retcrc_sw;
>                                                 }
> --
> 2.25.1
>


More information about the igt-dev mailing list