st/nine: Don't call u_box_union_* when dirty region is empty

When dirty region is empty, u_box_union_* incorrectly expands
the new region.

This fixes broken font rendering issue in WOLF RPG Editor v2.10 games.

Signed-off-by: Masanori Kakura <kakurasan@gmail.com>
Reviewed-by: Axel Davy <axel.davy@ens.fr>
This commit is contained in:
Masanori Kakura 2016-12-28 22:21:02 +09:00 committed by Axel Davy
parent a5f0cdb36f
commit 9b5f5de9e9
3 changed files with 22 additions and 10 deletions

View File

@ -285,10 +285,14 @@ NineCubeTexture9_AddDirtyRect( struct NineCubeTexture9 *This,
This->base.base.info.height0,
&This->dirty_rect[FaceType]);
} else {
struct pipe_box box;
rect_to_pipe_box_clamp(&box, pDirtyRect);
u_box_union_2d(&This->dirty_rect[FaceType], &This->dirty_rect[FaceType],
&box);
if (This->dirty_rect[FaceType].width == 0) {
rect_to_pipe_box_clamp(&This->dirty_rect[FaceType], pDirtyRect);
} else {
struct pipe_box box;
rect_to_pipe_box_clamp(&box, pDirtyRect);
u_box_union_2d(&This->dirty_rect[FaceType], &This->dirty_rect[FaceType],
&box);
}
(void) u_box_clip_2d(&This->dirty_rect[FaceType],
&This->dirty_rect[FaceType],
This->base.base.info.width0,

View File

@ -330,9 +330,13 @@ NineTexture9_AddDirtyRect( struct NineTexture9 *This,
u_box_origin_2d(This->base.base.info.width0,
This->base.base.info.height0, &This->dirty_rect);
} else {
struct pipe_box box;
rect_to_pipe_box_clamp(&box, pDirtyRect);
u_box_union_2d(&This->dirty_rect, &This->dirty_rect, &box);
if (This->dirty_rect.width == 0) {
rect_to_pipe_box_clamp(&This->dirty_rect, pDirtyRect);
} else {
struct pipe_box box;
rect_to_pipe_box_clamp(&box, pDirtyRect);
u_box_union_2d(&This->dirty_rect, &This->dirty_rect, &box);
}
(void) u_box_clip_2d(&This->dirty_rect, &This->dirty_rect,
This->base.base.info.width0,
This->base.base.info.height0);

View File

@ -222,9 +222,13 @@ NineVolumeTexture9_AddDirtyBox( struct NineVolumeTexture9 *This,
This->dirty_box.height = This->base.base.info.height0;
This->dirty_box.depth = This->base.base.info.depth0;
} else {
struct pipe_box box;
d3dbox_to_pipe_box(&box, pDirtyBox);
u_box_union_3d(&This->dirty_box, &This->dirty_box, &box);
if (This->dirty_box.width == 0) {
d3dbox_to_pipe_box(&This->dirty_box, pDirtyBox);
} else {
struct pipe_box box;
d3dbox_to_pipe_box(&box, pDirtyBox);
u_box_union_3d(&This->dirty_box, &This->dirty_box, &box);
}
This->dirty_box.x = MAX2(This->dirty_box.x, 0);
This->dirty_box.y = MAX2(This->dirty_box.y, 0);
This->dirty_box.z = MAX2(This->dirty_box.z, 0);