[Intel-gfx] [PATCH 14/18] drm/i915: Embed rotation_info under intel_framebuffer

Daniel Vetter daniel at ffwll.ch
Mon Jan 25 09:42:25 PST 2016


On Wed, Jan 20, 2016 at 09:05:35PM +0200, ville.syrjala at linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> Instead of repopulatin the rotation_info struct for the fb every time
> we try to use the fb, we can just populate it once when creating the fb,
> and later we can just copy the pre-populate struct into the gtt_view.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

Let's hope this doesn't balloon too badly in the future, but I think
that's unlikely given how rotation works currently (and on other hw).

Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>

> ---
>  drivers/gpu/drm/i915/intel_display.c | 27 ++++++++++++++++-----------
>  drivers/gpu/drm/i915/intel_drv.h     |  1 +
>  2 files changed, 17 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 899ffb1a9b10..7ed33b5eb443 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -2307,18 +2307,20 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view,
>  			const struct drm_framebuffer *fb,
>  			unsigned int rotation)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(fb->dev);
> -	struct intel_rotation_info *info = &view->params.rotated;
> -	unsigned int tile_size, tile_width, tile_height, cpp;
> -
> -	*view = i915_ggtt_view_normal;
> -
> -	if (!intel_rotation_90_or_270(rotation))
> -		return;
> -
> -	*view = i915_ggtt_view_rotated;
> +	if (intel_rotation_90_or_270(rotation)) {
> +		*view = i915_ggtt_view_rotated;
> +		view->params.rotated = to_intel_framebuffer(fb)->rot_info;
> +	} else {
> +		*view = i915_ggtt_view_normal;
> +	}
> +}
>  
> -	info->uv_offset = fb->offsets[1];
> +static void
> +intel_fill_fb_info(struct drm_i915_private *dev_priv,
> +		   struct drm_framebuffer *fb)
> +{
> +	struct intel_rotation_info *info = &to_intel_framebuffer(fb)->rot_info;
> +	unsigned int tile_size, tile_width, tile_height, cpp;
>  
>  	tile_size = intel_tile_size(dev_priv);
>  
> @@ -2334,6 +2336,7 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view,
>  		intel_tile_dims(dev_priv, &tile_width, &tile_height,
>  				fb->modifier[1], cpp);
>  
> +		info->uv_offset = fb->offsets[1];
>  		info->plane[1].width = DIV_ROUND_UP(fb->pitches[1], tile_width * cpp);
>  		info->plane[1].height = DIV_ROUND_UP(fb->height / 2, tile_height);
>  	}
> @@ -14906,6 +14909,8 @@ static int intel_framebuffer_init(struct drm_device *dev,
>  	drm_helper_mode_fill_fb_struct(&intel_fb->base, mode_cmd);
>  	intel_fb->obj = obj;
>  
> +	intel_fill_fb_info(dev_priv, &intel_fb->base);
> +
>  	ret = drm_framebuffer_init(dev, &intel_fb->base, &intel_fb_funcs);
>  	if (ret) {
>  		DRM_ERROR("framebuffer init failed %d\n", ret);
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index f251f253cc99..8a0f4dfd04a6 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -118,6 +118,7 @@ enum intel_output_type {
>  struct intel_framebuffer {
>  	struct drm_framebuffer base;
>  	struct drm_i915_gem_object *obj;
> +	struct intel_rotation_info rot_info;
>  };
>  
>  struct intel_fbdev {
> -- 
> 2.4.10
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the Intel-gfx mailing list