[igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Fix multiplane-rotation-cropping* tests

Ville Syrjälä ville.syrjala at linux.intel.com
Fri Jan 25 21:29:35 UTC 2019


On Thu, Jan 24, 2019 at 05:45:25PM +0200, Juha-Pekka Heikkila wrote:
> Make certain viewports are divisible by four due to intel
> hw workarounds for NV12.
> 
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
> ---
>  tests/kms_rotation_crc.c | 29 +++++++++++++++++++++++++----
>  1 file changed, 25 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
> index 8f343e0..fc995d0 100644
> --- a/tests/kms_rotation_crc.c
> +++ b/tests/kms_rotation_crc.c
> @@ -486,10 +486,31 @@ static bool get_multiplane_crc(data_t *data, igt_output_t *output,
>  static void pointlocation(data_t *data, planeinfos *p, drmModeModeInfo *mode,
>  			  int c)
>  {
> -	p[c].x1 = (int32_t)(data->planepos[c].x * mode->hdisplay)
> -			+ ((data->planepos[c].origo & p_right) ? mode->hdisplay : 0);
> -	p[c].y1 = (int32_t)(data->planepos[c].y * mode->vdisplay)
> -			+ ((data->planepos[c].origo & p_bottom) ? mode->vdisplay : 0);
> +	if (data->planepos[c].origo & p_right) {
> +		p[c].x1 = (int32_t)(data->planepos[c].x * mode->hdisplay
> +				+ mode->hdisplay);
> +		p[c].x1 &= ~3;
> +		/*
> +		 * At this point is handled surface on right side. If display
> +		 * mode is not divisible by 4 but with 2 point location is
> +		 * fixed to match requirements. Because of YUV planes here is
> +		 * intentionally ignored bit 1.
> +		 */
> +		p[c].x1 -= mode->hdisplay & 2;

Not really sure why we'd ignore the first bit. If hdisplay is odd
we'll still end up with an odd viewport width, which will fail. If we
don't ignore the bit we'll end up with an odd x1 instead, which would
still fail no?

Anwways, I think this patch should do what we want so
Reviewed-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

> +	} else {
> +		p[c].x1 = (int32_t)(data->planepos[c].x * mode->hdisplay);
> +		p[c].x1 &= ~3;
> +	}
> +
> +	if (data->planepos[c].origo & p_bottom) {
> +		p[c].y1 = (int32_t)(data->planepos[c].y * mode->vdisplay
> +				+ mode->vdisplay);
> +		p[c].y1 &= ~3;
> +		p[c].y1 -= mode->vdisplay & 2;
> +	} else {
> +		p[c].y1 = (int32_t)(data->planepos[c].y * mode->vdisplay);
> +		p[c].y1 &= ~3;
> +	}
>  }
>  
>  /*
> -- 
> 2.7.4
> 
> _______________________________________________
> igt-dev mailing list
> igt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev

-- 
Ville Syrjälä
Intel


More information about the igt-dev mailing list