[Mesa-dev] [PATCH 1/7] st/nine: Don't call u_box_union_* when dirty region is empty
Axel Davy
axel.davy at ens.fr
Fri Jan 6 20:17:15 UTC 2017
From: Masanori Kakura <kakurasan at gmail.com>
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 at gmail.com>
Reviewed-by: Axel Davy <axel.davy at ens.fr>
---
src/gallium/state_trackers/nine/cubetexture9.c | 12 ++++++++----
src/gallium/state_trackers/nine/texture9.c | 10 +++++++---
src/gallium/state_trackers/nine/volumetexture9.c | 10 +++++++---
3 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/src/gallium/state_trackers/nine/cubetexture9.c b/src/gallium/state_trackers/nine/cubetexture9.c
index 977a345552..65251ad2b7 100644
--- a/src/gallium/state_trackers/nine/cubetexture9.c
+++ b/src/gallium/state_trackers/nine/cubetexture9.c
@@ -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,
diff --git a/src/gallium/state_trackers/nine/texture9.c b/src/gallium/state_trackers/nine/texture9.c
index bf054cc305..78ca4add4a 100644
--- a/src/gallium/state_trackers/nine/texture9.c
+++ b/src/gallium/state_trackers/nine/texture9.c
@@ -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);
diff --git a/src/gallium/state_trackers/nine/volumetexture9.c b/src/gallium/state_trackers/nine/volumetexture9.c
index 5c83fdb60c..c836dd2102 100644
--- a/src/gallium/state_trackers/nine/volumetexture9.c
+++ b/src/gallium/state_trackers/nine/volumetexture9.c
@@ -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);
--
2.11.0
More information about the mesa-dev
mailing list