Mesa (master): radeon: fix teximage migration failure in rare case

Maciej Cencora osiris at kemper.freedesktop.org
Sun Jul 11 14:22:54 UTC 2010


Module: Mesa
Branch: master
Commit: ad24ea37bb0cef7b383bb38e31466b6bb1f7fce6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ad24ea37bb0cef7b383bb38e31466b6bb1f7fce6

Author: Maciej Cencora <m.cencora at gmail.com>
Date:   Sun Jul 11 15:33:18 2010 +0200

radeon: fix teximage migration failure in rare case

Always store selected miptree in texObj->mt so get_base_teximage_offset returns correct data.
Found with piglit/mipmap-setup.

Candidate for 7.8 branch.

Signed-off-by: Maciej Cencora <m.cencora at gmail.com>

---

 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index 6cd1d87..c7dda47 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -604,15 +604,15 @@ int radeon_validate_texture_miptree(GLcontext * ctx, struct gl_texture_object *t
 	radeon_mipmap_tree *dst_miptree;
 	dst_miptree = get_biggest_matching_miptree(t, t->minLod, t->maxLod);
 
+	radeon_miptree_unreference(&t->mt);
 	if (!dst_miptree) {
-		radeon_miptree_unreference(&t->mt);
 		radeon_try_alloc_miptree(rmesa, t);
-		dst_miptree = t->mt;
 		radeon_print(RADEON_TEXTURE, RADEON_NORMAL,
 			"%s: No matching miptree found, allocated new one %p\n",
 			__FUNCTION__, t->mt);
 
 	} else {
+		radeon_miptree_reference(dst_miptree, &t->mt);
 		radeon_print(RADEON_TEXTURE, RADEON_NORMAL,
 			"%s: Using miptree %p\n", __FUNCTION__, t->mt);
 	}
@@ -629,7 +629,7 @@ int radeon_validate_texture_miptree(GLcontext * ctx, struct gl_texture_object *t
 				"Checking image level %d, face %d, mt %p ... ",
 				level, face, img->mt);
 			
-			if (img->mt != dst_miptree) {
+			if (img->mt != t->mt) {
 				radeon_print(RADEON_TEXTURE, RADEON_TRACE,
 					"MIGRATING\n");
 
@@ -637,7 +637,7 @@ int radeon_validate_texture_miptree(GLcontext * ctx, struct gl_texture_object *t
 				if (src_bo && radeon_bo_is_referenced_by_cs(src_bo, rmesa->cmdbuf.cs)) {
 					radeon_firevertices(rmesa);
 				}
-				migrate_image_to_miptree(dst_miptree, img, face, level);
+				migrate_image_to_miptree(t->mt, img, face, level);
 			} else
 				radeon_print(RADEON_TEXTURE, RADEON_TRACE, "OK\n");
 		}




More information about the mesa-commit mailing list