public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
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

  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