Re: [Mesa-dev] [PATCH 1/2] i965: Make intel_emit_linear_blit handle Gen8+ alignment restrictions.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Apr 21, 2015 at 10:13:31PM -0700, Kenneth Graunke wrote:
> The BLT engine on Gen8+ requires linear surfaces to be cacheline
> aligned.  This restriction was added as part of converting the BLT to
> use 48-bit addressing.
> 
> intel_emit_linear_blit needs to handle blits that are not cacheline
> aligned, as we use it for arbitrary glBufferSubData calls and subrange
> mappings.
> 
> Since intel_emit_linear_blit uses 1 byte per pixel, we can use the src/dst
> pixel X offset field to represent the unaligned portion, and subtract
> that from the address so it's cacheline aligned.
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=88521
> Signed-off-by: Kenneth Graunke <kenneth@xxxxxxxxxxxxx>
> Cc: mesa-stable@xxxxxxxxxxxxxxxxxxxxx

s/cacheline/page/ afaik, and nope it's not documented. Chris&Mika learned
that the hard way. Adding them to correct me in case I make a mess again.
-Daniel

> ---
>  src/mesa/drivers/dri/i965/intel_blit.c | 22 ++++++++++++++--------
>  1 file changed, 14 insertions(+), 8 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/intel_blit.c b/src/mesa/drivers/dri/i965/intel_blit.c
> index 4993f60..98d414c 100644
> --- a/src/mesa/drivers/dri/i965/intel_blit.c
> +++ b/src/mesa/drivers/dri/i965/intel_blit.c
> @@ -524,6 +524,7 @@ intel_emit_linear_blit(struct brw_context *brw,
>  {
>     struct gl_context *ctx = &brw->ctx;
>     GLuint pitch, height;
> +   int16_t src_x, dst_x;
>     bool ok;
>  
>     /* The pitch given to the GPU must be DWORD aligned, and
> @@ -532,11 +533,13 @@ intel_emit_linear_blit(struct brw_context *brw,
>      */
>     pitch = ROUND_DOWN_TO(MIN2(size, (1 << 15) - 1), 4);
>     height = (pitch == 0) ? 1 : size / pitch;
> +   src_x = src_offset % 64;
> +   dst_x = dst_offset % 64;
>     ok = intelEmitCopyBlit(brw, 1,
> -			  pitch, src_bo, src_offset, I915_TILING_NONE,
> -			  pitch, dst_bo, dst_offset, I915_TILING_NONE,
> -			  0, 0, /* src x/y */
> -			  0, 0, /* dst x/y */
> +			  pitch, src_bo, src_offset - src_x, I915_TILING_NONE,
> +			  pitch, dst_bo, dst_offset - dst_x, I915_TILING_NONE,
> +			  src_x, 0, /* src x/y */
> +			  dst_x, 0, /* dst x/y */
>  			  pitch, height, /* w, h */
>  			  GL_COPY);
>     if (!ok)
> @@ -544,15 +547,18 @@ intel_emit_linear_blit(struct brw_context *brw,
>  
>     src_offset += pitch * height;
>     dst_offset += pitch * height;
> +   src_x = src_offset % 64;
> +   dst_x = dst_offset % 64;
>     size -= pitch * height;
>     assert (size < (1 << 15));
>     pitch = ALIGN(size, 4);
> +
>     if (size != 0) {
>        ok = intelEmitCopyBlit(brw, 1,
> -			     pitch, src_bo, src_offset, I915_TILING_NONE,
> -			     pitch, dst_bo, dst_offset, I915_TILING_NONE,
> -			     0, 0, /* src x/y */
> -			     0, 0, /* dst x/y */
> +			     pitch, src_bo, src_offset - src_x, I915_TILING_NONE,
> +			     pitch, dst_bo, dst_offset - dst_x, I915_TILING_NONE,
> +			     src_x, 0, /* src x/y */
> +			     dst_x, 0, /* dst x/y */
>  			     size, 1, /* w, h */
>  			     GL_COPY);
>        if (!ok)
> -- 
> 2.3.5
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@xxxxxxxxxxxxxxxxxxxxx
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx





[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux