From: Daniel Vetter <daniel@ffwll.ch>
To: ville.syrjala@linux.intel.com
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 12/18] drm/i915: Reorganize intel_rotation_info
Date: Mon, 25 Jan 2016 18:38:57 +0100 [thread overview]
Message-ID: <20160125173857.GG11240@phenom.ffwll.local> (raw)
In-Reply-To: <1453316739-13296-13-git-send-email-ville.syrjala@linux.intel.com>
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.
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
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-01-25 17:38 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 [this message]
2016-01-25 18:03 ` Ville Syrjälä
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=20160125173857.GG11240@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=intel-gfx@lists.freedesktop.org \
--cc=ville.syrjala@linux.intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.