intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Daniel Vetter <daniel@ffwll.ch>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 12/18] drm/i915: Reorganize intel_rotation_info
Date: Mon, 25 Jan 2016 20:03:43 +0200	[thread overview]
Message-ID: <20160125180343.GV23290@intel.com> (raw)
In-Reply-To: <20160125173857.GG11240@phenom.ffwll.local>

On Mon, Jan 25, 2016 at 06:38:57PM +0100, Daniel Vetter wrote:
> On Wed, Jan 20, 2016 at 09:05:33PM +0200, ville.syrjala@linux.intel.com wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > Throw out a bunch of unnecessary stuff from struct intel_rotation_info,
> > and pull most of the remaining stuff to live under an array of
> > per-color plane sub-structures.
> > 
> > What still remains outside the sub-structure will be reorgranized later
> > as well, but that requires more work elsewhere so leave it be for now.
> > 
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_gem_gtt.c  | 35 +++++++++++++++--------------------
> >  drivers/gpu/drm/i915/i915_gem_gtt.h  | 11 ++++-------
> >  drivers/gpu/drm/i915/intel_display.c | 25 +++++++++++++++----------
> >  drivers/gpu/drm/i915/intel_drv.h     |  1 +
> >  4 files changed, 35 insertions(+), 37 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> > index b3d8e2b0948c..f95468cd0470 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> > +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> > @@ -3367,7 +3367,7 @@ static struct sg_table *
> >  intel_rotate_fb_obj_pages(struct intel_rotation_info *rot_info,
> >  			  struct drm_i915_gem_object *obj)
> >  {
> > -	unsigned int size_pages = rot_info->size >> PAGE_SHIFT;
> > +	unsigned int size_pages = rot_info->plane[0].width * rot_info->plane[0].height;
> >  	unsigned int size_pages_uv;
> >  	struct sg_page_iter sg_iter;
> >  	unsigned long i;
> > @@ -3385,7 +3385,7 @@ intel_rotate_fb_obj_pages(struct intel_rotation_info *rot_info,
> >  
> >  	/* Account for UV plane with NV12. */
> >  	if (rot_info->pixel_format == DRM_FORMAT_NV12)
> > -		size_pages_uv = rot_info->size_uv >> PAGE_SHIFT;
> > +		size_pages_uv = rot_info->plane[1].width * rot_info->plane[1].height;
> >  	else
> >  		size_pages_uv = 0;
> >  
> > @@ -3407,9 +3407,9 @@ intel_rotate_fb_obj_pages(struct intel_rotation_info *rot_info,
> >  
> >  	/* Rotate the pages. */
> >  	sg = rotate_pages(page_addr_list, 0,
> > -		     rot_info->width_pages, rot_info->height_pages,
> > -		     rot_info->width_pages,
> > -		     st, NULL);
> > +			  rot_info->plane[0].width, rot_info->plane[0].height,
> > +			  rot_info->plane[0].width,
> > +			  st, NULL);
> >  
> >  	/* Append the UV plane if NV12. */
> >  	if (rot_info->pixel_format == DRM_FORMAT_NV12) {
> > @@ -3421,18 +3421,15 @@ intel_rotate_fb_obj_pages(struct intel_rotation_info *rot_info,
> >  
> >  		rot_info->uv_start_page = uv_start_page;
> >  
> > -		rotate_pages(page_addr_list, uv_start_page,
> > -			     rot_info->width_pages_uv,
> > -			     rot_info->height_pages_uv,
> > -			     rot_info->width_pages_uv,
> > +		rotate_pages(page_addr_list, rot_info->uv_start_page,
> > +			     rot_info->plane[1].width, rot_info->plane[1].height,
> > +			     rot_info->plane[1].width,
> >  			     st, sg);
> >  	}
> >  
> > -	DRM_DEBUG_KMS(
> > -		      "Created rotated page mapping for object size %zu (pitch=%u, height=%u, pixel_format=0x%x, %ux%u tiles, %u pages (%u plane 0)).\n",
> > -		      obj->base.size, rot_info->pitch, rot_info->height,
> > -		      rot_info->pixel_format, rot_info->width_pages,
> > -		      rot_info->height_pages, size_pages + size_pages_uv,
> > +	DRM_DEBUG_KMS("Created rotated page mapping for object size %zu (%ux%u tiles, %u pages (%u plane 0)).\n",
> > +		      obj->base.size, rot_info->plane[0].width,
> > +		      rot_info->plane[0].height, size_pages + size_pages_uv,
> >  		      size_pages);
> >  
> >  	drm_free_large(page_addr_list);
> > @@ -3444,11 +3441,9 @@ err_sg_alloc:
> >  err_st_alloc:
> >  	drm_free_large(page_addr_list);
> >  
> > -	DRM_DEBUG_KMS(
> > -		      "Failed to create rotated mapping for object size %zu! (%d) (pitch=%u, height=%u, pixel_format=0x%x, %ux%u tiles, %u pages (%u plane 0))\n",
> > -		      obj->base.size, ret, rot_info->pitch, rot_info->height,
> > -		      rot_info->pixel_format, rot_info->width_pages,
> > -		      rot_info->height_pages, size_pages + size_pages_uv,
> > +	DRM_DEBUG_KMS("Failed to create rotated mapping for object size %zu! (%d) (%ux%u tiles, %u pages (%u plane 0))\n",
> > +		      obj->base.size, ret, rot_info->plane[0].width,
> > +		      rot_info->plane[0].height, size_pages + size_pages_uv,
> >  		      size_pages);
> >  	return ERR_PTR(ret);
> >  }
> > @@ -3600,7 +3595,7 @@ i915_ggtt_view_size(struct drm_i915_gem_object *obj,
> >  	if (view->type == I915_GGTT_VIEW_NORMAL) {
> >  		return obj->base.size;
> >  	} else if (view->type == I915_GGTT_VIEW_ROTATED) {
> > -		return view->params.rotated.size;
> > +		return intel_rotation_info_size(&view->params.rotated) << PAGE_SHIFT;
> 
> Isn't this a hidden bugfix? before this was size, now it's size+size_uv.

Hmm. I suppose. TBH didn't even notice that myself.

> 
> If you agree then please add a blurb to the commit message (or better,
> split this out into a tiny prep patch). Otherwise didn't spot anything,
> with either approach
> 
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> 
> >  	} else if (view->type == I915_GGTT_VIEW_PARTIAL) {
> >  		return view->params.partial.size << PAGE_SHIFT;
> >  	} else {
> > diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
> > index f520c90e5377..4b8a378b9d3f 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_gtt.h
> > +++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
> > @@ -135,16 +135,13 @@ enum i915_ggtt_view_type {
> >  };
> >  
> >  struct intel_rotation_info {
> > -	unsigned int height;
> > -	unsigned int pitch;
> >  	unsigned int uv_offset;
> >  	uint32_t pixel_format;
> > -	uint64_t fb_modifier;
> > -	unsigned int width_pages, height_pages;
> > -	uint64_t size;
> > -	unsigned int width_pages_uv, height_pages_uv;
> > -	uint64_t size_uv;
> >  	unsigned int uv_start_page;
> > +	struct {
> > +		/* tiles */
> > +		unsigned int width, height;
> > +	} plane[2];
> >  };
> >  
> >  struct i915_ggtt_view {
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index 084c8ae3668f..899ffb1a9b10 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -2291,6 +2291,17 @@ intel_fb_align_height(struct drm_device *dev, unsigned int height,
> >  	return ALIGN(height, tile_height);
> >  }
> >  
> > +unsigned int intel_rotation_info_size(const struct intel_rotation_info *rot_info)
> > +{
> > +	unsigned int size = 0;
> > +	int i;
> > +
> > +	for (i = 0 ; i < ARRAY_SIZE(rot_info->plane); i++)
> > +		size += rot_info->plane[i].width * rot_info->plane[i].height;
> > +
> > +	return size;
> > +}
> > +
> >  static void
> >  intel_fill_fb_ggtt_view(struct i915_ggtt_view *view,
> >  			const struct drm_framebuffer *fb,
> > @@ -2307,11 +2318,7 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view,
> >  
> >  	*view = i915_ggtt_view_rotated;
> >  
> > -	info->height = fb->height;
> > -	info->pixel_format = fb->pixel_format;
> > -	info->pitch = fb->pitches[0];
> >  	info->uv_offset = fb->offsets[1];
> > -	info->fb_modifier = fb->modifier[0];
> >  
> >  	tile_size = intel_tile_size(dev_priv);
> >  
> > @@ -2319,18 +2326,16 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view,
> >  	intel_tile_dims(dev_priv, &tile_width, &tile_height,
> >  			fb->modifier[0], cpp);
> >  
> > -	info->width_pages = DIV_ROUND_UP(fb->pitches[0], tile_width * cpp);
> > -	info->height_pages = DIV_ROUND_UP(fb->height, tile_height);
> > -	info->size = info->width_pages * info->height_pages * tile_size;
> > +	info->plane[0].width = DIV_ROUND_UP(fb->pitches[0], tile_width * cpp);
> > +	info->plane[0].height = DIV_ROUND_UP(fb->height, tile_height);
> >  
> >  	if (info->pixel_format == DRM_FORMAT_NV12) {
> >  		cpp = drm_format_plane_cpp(fb->pixel_format, 1);
> >  		intel_tile_dims(dev_priv, &tile_width, &tile_height,
> >  				fb->modifier[1], cpp);
> >  
> > -		info->width_pages_uv = DIV_ROUND_UP(fb->pitches[1], tile_width * cpp);
> > -		info->height_pages_uv = DIV_ROUND_UP(fb->height / 2, tile_height);
> > -		info->size_uv = info->width_pages_uv * info->height_pages_uv * tile_size;
> > +		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);
> >  	}
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > index b9ef9d5f1041..f251f253cc99 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -1059,6 +1059,7 @@ void i915_audio_component_cleanup(struct drm_i915_private *dev_priv);
> >  
> >  /* intel_display.c */
> >  extern const struct drm_plane_funcs intel_plane_funcs;
> > +unsigned int intel_rotation_info_size(const struct intel_rotation_info *rot_info);
> >  bool intel_has_pending_fb_unpin(struct drm_device *dev);
> >  int intel_pch_rawclk(struct drm_device *dev);
> >  int intel_hrawclk(struct drm_device *dev);
> > -- 
> > 2.4.10
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
> -- 
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2016-01-25 18:05 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-20 19:05 [PATCH v2 00/18] drm/i915: Handle fb->offsets[] and rewrite fb rotation handling to be more generic (v2) ville.syrjala
2016-01-20 19:05 ` [PATCH 01/18] drm/i915: Rename the rotated gtt view member to 'rotated' ville.syrjala
2016-01-25 16:50   ` Daniel Vetter
2016-01-20 19:05 ` [PATCH 02/18] drm/i915: Pass stride to rotate_pages() ville.syrjala
2016-01-25 16:52   ` Daniel Vetter
2016-01-20 19:05 ` [PATCH 03/18] drm/i915: Pass rotation_info to intel_rotate_fb_obj_pages() ville.syrjala
2016-01-25 16:53   ` Daniel Vetter
2016-01-20 19:05 ` [PATCH 04/18] drm/i915: Make display gtt offsets u32 ville.syrjala
2016-01-25 17:00   ` Daniel Vetter
2016-01-20 19:05 ` [PATCH 05/18] drm/i915: Standardize on 'cpp' for bytes per pixel ville.syrjala
2016-01-25 17:05   ` Daniel Vetter
2016-01-20 19:05 ` [PATCH v2 06/18] drm: Add drm_format_plane_width() and drm_format_plane_height() ville.syrjala
2016-01-25 17:08   ` Daniel Vetter
2016-01-28 18:15     ` Ville Syrjälä
2016-01-29 18:01   ` [PATCH v3 " ville.syrjala
2016-02-09  9:08     ` Daniel Vetter
2016-02-09 15:29   ` [PATCH v4 " ville.syrjala
2016-01-20 19:05 ` [PATCH 07/18] drm/i915: Fix intel_tile_width() parameters ville.syrjala
2016-01-25 17:12   ` Daniel Vetter
2016-01-28 18:35     ` Ville Syrjälä
2016-01-28 19:04       ` Ville Syrjälä
2016-01-20 19:05 ` [PATCH v3 08/18] drm/i915: Pass 90/270 vs. 0/180 rotation info for intel_gen4_compute_page_offset() ville.syrjala
2016-01-25 17:30   ` Daniel Vetter
2016-01-28 18:51     ` Ville Syrjälä
2016-02-10  7:35       ` Daniel Vetter
2016-01-20 19:05 ` [PATCH v2 09/18] drm/i915: Support for extra alignment for tiled surfaces ville.syrjala
2016-01-25 17:24   ` Daniel Vetter
2016-01-25 17:55     ` Ville Syrjälä
2016-01-20 19:05 ` [PATCH v2 10/18] drm/i915: Don't pass plane+plane_state to intel_pin_and_fence_fb_obj() ville.syrjala
2016-01-20 19:05 ` [PATCH 11/18] drm/i915: Pass drm_frambuffer to intel_compute_page_offset() ville.syrjala
2016-01-20 19:05 ` [PATCH 12/18] drm/i915: Reorganize intel_rotation_info ville.syrjala
2016-01-25 17:38   ` Daniel Vetter
2016-01-25 18:03     ` Ville Syrjälä [this message]
2016-01-20 19:05 ` [PATCH 13/18] drm/i915: Move the NULL sg handling out from rotate_pages() ville.syrjala
2016-01-25 17:40   ` Daniel Vetter
2016-01-20 19:05 ` [PATCH 14/18] drm/i915: Embed rotation_info under intel_framebuffer ville.syrjala
2016-01-20 21:08   ` Chris Wilson
2016-01-21 12:06     ` Ville Syrjälä
2016-01-21 12:10       ` Chris Wilson
2016-01-25 17:42   ` Daniel Vetter
2016-01-20 19:05 ` [PATCH v3 15/18] drm/i915: Rewrite fb rotation GTT handling ville.syrjala
2016-01-20 19:05 ` [PATCH v2 16/18] drm/i915: Don't pass pitch to intel_compute_page_offset() ville.syrjala
2016-01-25 17:53   ` Daniel Vetter
2016-01-20 19:05 ` [PATCH 17/18] drm/i915: Pass around plane_state instead of fb+rotation ville.syrjala
2016-01-25 17:55   ` Daniel Vetter
2016-01-20 19:05 ` [PATCH v2 18/18] drm/i915: Make sure fb offset is (macro)pixel aligned ville.syrjala
2016-01-21 13:35 ` ✓ Fi.CI.BAT: success for drm/i915: Handle fb->offsets[] and rewrite fb rotation handling to be more generic (v2) Patchwork
2016-01-30  8:31 ` ✗ Fi.CI.BAT: failure for drm/i915: Handle fb->offsets[] and rewrite fb rotation handling to be more generic (v2) (rev2) Patchwork
2016-02-01  8:31 ` Patchwork
2016-02-09 16:31 ` ✗ Fi.CI.BAT: failure for drm/i915: Handle fb->offsets[] and rewrite fb rotation handling to be more generic (v2) (rev3) Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160125180343.GV23290@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=daniel@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).