From: Sivakumar Thulasimani <sivakumar.thulasimani@intel.com>
To: ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 09/12] drm/i915: Make intel_adjust_tile_offset() work for linear buffers
Date: Mon, 9 May 2016 14:54:50 +0530 [thread overview]
Message-ID: <57305762.4020100@intel.com> (raw)
In-Reply-To: <1462290001-9246-10-git-send-email-ville.syrjala@linux.intel.com>
Reviewed-by: Sivakumar Thulasimani <sivakumar.thulasimani@intel.com>
On Tuesday 03 May 2016 09:09 PM, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> To make life less surprising we can make intel_adjust_tile_offset()
> deal with linear buffers as well. Currently it doesn't seem like there's
> a real need for this since only X tiling and NV12 (which would always
> be tiled currently) should need it. But I've used it for some debug
> hacks already so seems like a reasonable thing to have.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_display.c | 73 ++++++++++++++++++++++++++++--------
> 1 file changed, 57 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 17f9f014e808..ad7c48757ba6 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -2347,19 +2347,16 @@ void intel_add_fb_offsets(int *x, int *y,
> }
>
> /*
> - * Adjust the tile offset by moving the difference into
> - * the x/y offsets.
> - *
> * Input tile dimensions and pitch must already be
> * rotated to match x and y, and in pixel units.
> */
> -static u32 intel_adjust_tile_offset(int *x, int *y,
> - unsigned int tile_width,
> - unsigned int tile_height,
> - unsigned int tile_size,
> - unsigned int pitch_tiles,
> - u32 old_offset,
> - u32 new_offset)
> +static u32 _intel_adjust_tile_offset(int *x, int *y,
> + unsigned int tile_width,
> + unsigned int tile_height,
> + unsigned int tile_size,
> + unsigned int pitch_tiles,
> + u32 old_offset,
> + u32 new_offset)
> {
> unsigned int pitch_pixels = pitch_tiles * tile_width;
> unsigned int tiles;
> @@ -2381,6 +2378,50 @@ static u32 intel_adjust_tile_offset(int *x, int *y,
> }
>
> /*
> + * Adjust the tile offset by moving the difference into
> + * the x/y offsets.
> + */
> +static u32 intel_adjust_tile_offset(int *x, int *y,
> + const struct intel_plane_state *state, int plane,
> + u32 old_offset, u32 new_offset)
> +{
> + const struct drm_i915_private *dev_priv = to_i915(state->base.plane->dev);
> + const struct drm_framebuffer *fb = state->base.fb;
> + unsigned int cpp = drm_format_plane_cpp(fb->pixel_format, plane);
> + unsigned int rotation = state->base.rotation;
> + unsigned int pitch = intel_fb_pitch(fb, plane, rotation);
> +
> + WARN_ON(new_offset > old_offset);
> +
> + if (fb->modifier[plane] != DRM_FORMAT_MOD_NONE) {
> + unsigned int tile_size, tile_width, tile_height;
> + unsigned int pitch_tiles;
> +
> + tile_size = intel_tile_size(dev_priv);
> + intel_tile_dims(dev_priv, &tile_width, &tile_height,
> + fb->modifier[plane], cpp);
> +
> + if (intel_rotation_90_or_270(rotation)) {
> + pitch_tiles = pitch / tile_height;
> + swap(tile_width, tile_height);
> + } else {
> + pitch_tiles = pitch / (tile_width * cpp);
> + }
> +
> + _intel_adjust_tile_offset(x, y, tile_width, tile_height,
> + tile_size, pitch_tiles,
> + old_offset, new_offset);
> + } else {
> + old_offset += *y * pitch + *x * cpp;
> +
> + *y = (old_offset - new_offset) / pitch;
> + *x = ((old_offset - new_offset) - *y * pitch) / cpp;
> + }
> +
> + return new_offset;
> +}
> +
> +/*
> * Computes the linear offset to the base tile and adjusts
> * x, y. bytes per pixel is assumed to be a power-of-two.
> *
> @@ -2432,9 +2473,9 @@ static u32 _intel_compute_tile_offset(const struct drm_i915_private *dev_priv,
> offset = (tile_rows * pitch_tiles + tiles) * tile_size;
> offset_aligned = offset & ~alignment;
>
> - intel_adjust_tile_offset(x, y, tile_width, tile_height,
> - tile_size, pitch_tiles,
> - offset, offset_aligned);
> + _intel_adjust_tile_offset(x, y, tile_width, tile_height,
> + tile_size, pitch_tiles,
> + offset, offset_aligned);
> } else {
> offset = *y * pitch + *x * cpp;
> offset_aligned = offset & ~alignment;
> @@ -2581,9 +2622,9 @@ intel_fill_fb_info(struct drm_i915_private *dev_priv,
> * We only keep the x/y offsets, so push all of the
> * gtt offset into the x/y offsets.
> */
> - intel_adjust_tile_offset(&x, &y, tile_size,
> - tile_width, tile_height, pitch_tiles,
> - gtt_offset_rotated * tile_size, 0);
> + _intel_adjust_tile_offset(&x, &y, tile_size,
> + tile_width, tile_height, pitch_tiles,
> + gtt_offset_rotated * tile_size, 0);
>
> gtt_offset_rotated += rot_info->plane[i].width * rot_info->plane[i].height;
>
--
regards,
Sivakumar Thulasimani
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-05-09 9:19 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-03 15:39 [PATCH v4 00/12] drm/i915: Handle fb->offsets[] and rewrite fb rotation handling to be more generic (v4) ville.syrjala
2016-05-03 15:39 ` [PATCH v5 01/12] drm/i915: Rewrite fb rotation GTT handling ville.syrjala
2016-05-05 8:12 ` Thulasimani, Sivakumar
2016-05-05 8:14 ` Thulasimani, Sivakumar
2016-05-03 15:39 ` [PATCH v3 02/12] drm/i915: Don't pass pitch to intel_compute_page_offset() ville.syrjala
2016-05-05 8:17 ` Thulasimani, Sivakumar
2016-05-03 15:39 ` [PATCH 03/12] drm/i915: Move SKL hw stride calculation into a helper ville.syrjala
2016-05-04 11:53 ` Matthew Auld
2016-05-05 8:20 ` Thulasimani, Sivakumar
2016-05-03 15:39 ` [PATCH 04/12] drm/i915: Pass around plane_state instead of fb+rotation ville.syrjala
2016-05-05 8:21 ` Thulasimani, Sivakumar
2016-05-03 15:39 ` [PATCH v2 05/12] drm/i915: Use fb modifiers for display tiling decisions ville.syrjala
2016-05-03 15:39 ` [PATCH v2 06/12] drm/i915: Adjust obj tiling vs. fb modifier rules ville.syrjala
2016-05-03 15:39 ` [PATCH 07/12] drm/i915: Limit fb x offset due to fences ville.syrjala
2016-05-05 10:19 ` Sivakumar Thulasimani
2016-05-03 15:39 ` [PATCH 08/12] drm/i915: Allow calling intel_adjust_tile_offset() multiple times ville.syrjala
2016-05-27 8:23 ` Ville Syrjälä
2016-05-30 10:14 ` Thulasimani, Sivakumar
2016-05-03 15:39 ` [PATCH 09/12] drm/i915: Make intel_adjust_tile_offset() work for linear buffers ville.syrjala
2016-05-09 9:24 ` Sivakumar Thulasimani [this message]
2016-05-03 15:39 ` [PATCH 10/12] drm/i915: Compute display surface offset in the plane check hook for SKL+ ville.syrjala
2016-05-09 10:30 ` Sivakumar Thulasimani
2016-05-03 15:40 ` [PATCH 11/12] drm/i915: Deal with NV12 CbCr plane AUX surface on SKL+ ville.syrjala
2016-05-03 15:40 ` [PATCH v2 12/12] drm/i915: Make sure fb offset is (macro)pixel aligned ville.syrjala
2016-05-03 16:25 ` ✗ Fi.CI.BAT: failure for drm/i915: Handle fb->offsets[] and rewrite fb rotation handling to be more generic (v4) Patchwork
2016-05-27 11:43 ` Ville Syrjälä
2016-05-27 11:49 ` Chris Wilson
-- strict thread matches above, loose matches on Subject: below --
2016-08-10 9:23 [PATCH v5 00/12] drm/i915: Handle fb->offsets[] and rewrite fb rotation handling to be more generic (v5) ville.syrjala
2016-08-10 9:23 ` [PATCH 09/12] drm/i915: Make intel_adjust_tile_offset() work for linear buffers ville.syrjala
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=57305762.4020100@intel.com \
--to=sivakumar.thulasimani@intel.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox