mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
gallium/util: Really allow aliasing of dst for u_box_union_*
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@ens.fr> Reviewed-by: Patrick Rudolph <siro@das-labor.org> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> Reviewed-by: Roland Scheidegger <sroland@vmware.com> Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net> Cc: "12.0" <mesa-stable@lists.freedesktop.org>
This commit is contained in:
parent
5e7f0ebe29
commit
2290eac84e
1 changed files with 19 additions and 10 deletions
|
|
@ -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);
|
||||
int x, y, 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;
|
||||
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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue