[Mesa-dev] [PATCH] i965: Fix check for negative pitch in can_do_fast_copy_blit().

Jason Ekstrand jason at jlekstrand.net
Fri Jan 27 21:52:46 UTC 2017


I think this is ok,

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

On Thu, Jan 26, 2017 at 1:27 AM, Kenneth Graunke <kenneth at whitecape.org>
wrote:

> At this point, the pitch is in bytes.  We haven't yet divided the pitch
> by 4 for tiled surfaces, so abs(pitch) may be larger than 32K.  This
> means the bit 15 trick won't work.
>
> The caller now has signed integers anyway, so just pass those through
> and do the obvious check.
>
> Cc: "17.0" <mesa-stable at lists.freedesktop.org>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/intel_blit.c | 10 ++++------
>  1 file changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/intel_blit.c
> b/src/mesa/drivers/dri/i965/intel_blit.c
> index 9863ca1f94a..4d4ab911cbc 100644
> --- a/src/mesa/drivers/dri/i965/intel_blit.c
> +++ b/src/mesa/drivers/dri/i965/intel_blit.c
> @@ -476,11 +476,11 @@ static bool
>  can_fast_copy_blit(struct brw_context *brw,
>                    drm_intel_bo *src_buffer,
>                     int16_t src_x, int16_t src_y,
> -                   uintptr_t src_offset, uint32_t src_pitch,
> +                   uintptr_t src_offset, int32_t src_pitch,
>                     uint32_t src_tiling, uint32_t src_tr_mode,
>                    drm_intel_bo *dst_buffer,
>                     int16_t dst_x, int16_t dst_y,
> -                   uintptr_t dst_offset, uint32_t dst_pitch,
> +                   uintptr_t dst_offset, int32_t dst_pitch,
>                     uint32_t dst_tiling, uint32_t dst_tr_mode,
>                     int16_t w, int16_t h, uint32_t cpp,
>                     GLenum logic_op)
> @@ -516,10 +516,8 @@ can_fast_copy_blit(struct brw_context *brw,
>     if (!_mesa_is_pow_two(cpp) || cpp > 16)
>        return false;
>
> -   /* For Fast Copy Blits the pitch cannot be a negative number. So, bit
> 15
> -    * of the destination pitch must be zero.
> -    */
> -   if ((src_pitch >> 15 & 1) != 0 || (dst_pitch >> 15 & 1) != 0)
> +   /* For Fast Copy Blits the pitch cannot be a negative number. */
> +   if (src_pitch < 0 || dst_pitch < 0)
>        return false;
>
>     /* For Linear surfaces, the pitch has to be an OWord (16byte)
> multiple. */
> --
> 2.11.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170127/f9681052/attachment.html>


More information about the mesa-dev mailing list