[Intel-gfx] [PATCH 3/3] drm/i915: Fix 90/270 rotated coordinates for FBC

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Fri May 19 11:34:58 UTC 2017


On 31/03/2017 19:00, ville.syrjala at linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> The clipped src coordinates have already been rotated by 270 degrees for
> when the plane rotation is 90/270 degrees, hence the FBC code should no
> longer swap the width and height.
>
> Cc: stable at vger.kernel.org
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Cc: Paulo Zanoni <paulo.r.zanoni at intel.com>
> Fixes: b63a16f6cd89 ("drm/i915: Compute display surface offset in the plane check hook for SKL+")
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_fbc.c | 19 +++++++------------
>  1 file changed, 7 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c
> index ded2add18b26..d93c58410bff 100644
> --- a/drivers/gpu/drm/i915/intel_fbc.c
> +++ b/drivers/gpu/drm/i915/intel_fbc.c
> @@ -82,20 +82,10 @@ static unsigned int get_crtc_fence_y_offset(struct intel_crtc *crtc)
>  static void intel_fbc_get_plane_source_size(struct intel_fbc_state_cache *cache,
>  					    int *width, int *height)
>  {
> -	int w, h;
> -
> -	if (drm_rotation_90_or_270(cache->plane.rotation)) {
> -		w = cache->plane.src_h;
> -		h = cache->plane.src_w;
> -	} else {
> -		w = cache->plane.src_w;
> -		h = cache->plane.src_h;
> -	}
> -
>  	if (width)
> -		*width = w;
> +		*width = cache->plane.src_w;
>  	if (height)
> -		*height = h;
> +		*height = cache->plane.src_h;
>  }
>
>  static int intel_fbc_calculate_cfb_size(struct drm_i915_private *dev_priv,
> @@ -746,6 +736,11 @@ static void intel_fbc_update_state_cache(struct intel_crtc *crtc,
>  		cache->crtc.hsw_bdw_pixel_rate = crtc_state->pixel_rate;
>
>  	cache->plane.rotation = plane_state->base.rotation;
> +	/*
> +	 * Src coordinates are already rotated by 270 degrees for
> +	 * the 90/270 degree plane rotation cases (to match the
> +	 * GTT mapping), hence no need to account for rotation here.
> +	 */
>  	cache->plane.src_w = drm_rect_width(&plane_state->base.src) >> 16;
>  	cache->plane.src_h = drm_rect_height(&plane_state->base.src) >> 16;
>  	cache->plane.visible = plane_state->base.visible;
>

For the series:

Tested-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko


More information about the Intel-gfx mailing list