[Mesa-dev] [PATCH 02/75] gallium/util: Really allow aliasing of dst for u_box_union_*

Edward O'Callaghan funfunctor at folklore1984.net
Sat Oct 8 15:51:48 UTC 2016


Reviewed-by: Edward O'Callaghan <funfunctor at folklore1984.net>

On 10/07/2016 04:59 AM, Axel Davy wrote:
> Gallium nine relies on aliasing to work with this function.
> Without this patch, dirty region tracking was incorrect, which
> could lead to incorrect textures or vertex buffers.
> Fixes several game bugs with nine.
> Fixes https://github.com/iXit/Mesa-3D/issues/234
> 
> Signed-off-by: Axel Davy <axel.davy at ens.fr>
> Reviewed-by: Patrick Rudolph <siro at das-labor.org>
> 
> Cc: "12.0" <mesa-stable at lists.freedesktop.org>
> ---
>  src/gallium/auxiliary/util/u_box.h | 31 ++++++++++++++++++++-----------
>  1 file changed, 20 insertions(+), 11 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/util/u_box.h b/src/gallium/auxiliary/util/u_box.h
> index eb41f8a..b3f478e 100644
> --- a/src/gallium/auxiliary/util/u_box.h
> +++ b/src/gallium/auxiliary/util/u_box.h
> @@ -124,11 +124,15 @@ static inline void
>  u_box_union_2d(struct pipe_box *dst,
>                 const struct pipe_box *a, const struct pipe_box *b)
>  {
> -   dst->x = MIN2(a->x, b->x);
> -   dst->y = MIN2(a->y, b->y);
> +   int x, y;
>  
> -   dst->width = MAX2(a->x + a->width, b->x + b->width) - dst->x;
> -   dst->height = MAX2(a->y + a->height, b->y + b->height) - dst->y;
> +   x = MIN2(a->x, b->x);
> +   y = MIN2(a->y, b->y);
> +
> +   dst->width = MAX2(a->x + a->width, b->x + b->width) - x;
> +   dst->height = MAX2(a->y + a->height, b->y + b->height) - y;
> +   dst->x = x;
> +   dst->y = y;
>  }
>  
>  /* Aliasing of @dst permitted. */
> @@ -136,13 +140,18 @@ static inline void
>  u_box_union_3d(struct pipe_box *dst,
>                 const struct pipe_box *a, const struct pipe_box *b)
>  {
> -   dst->x = MIN2(a->x, b->x);
> -   dst->y = MIN2(a->y, b->y);
> -   dst->z = MIN2(a->z, b->z);
> -
> -   dst->width = MAX2(a->x + a->width, b->x + b->width) - dst->x;
> -   dst->height = MAX2(a->y + a->height, b->y + b->height) - dst->y;
> -   dst->depth = MAX2(a->z + a->depth, b->z + b->depth) - dst->z;
> +   int x, y, z;
> +
> +   x = MIN2(a->x, b->x);
> +   y = MIN2(a->y, b->y);
> +   z = MIN2(a->z, b->z);
> +
> +   dst->width = MAX2(a->x + a->width, b->x + b->width) - x;
> +   dst->height = MAX2(a->y + a->height, b->y + b->height) - y;
> +   dst->depth = MAX2(a->z + a->depth, b->z + b->depth) - z;
> +   dst->x = x;
> +   dst->y = y;
> +   dst->z = z;
>  }
>  
>  static inline boolean
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20161009/c0a3b5ed/attachment.sig>


More information about the mesa-dev mailing list