Module: Mesa
Branch: mesa_7_7_branch
Commit: 013cf1d63deb9c33089777afbdea85013fd46b49
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=013cf1d63deb9c33089777afbdea85013fd46b49

Author: Maciej Cencora <[email protected]>
Date:   Mon Dec  7 22:22:57 2009 +0100

radeon: fix image migration for small compressed textures

memcpy would give incorrect results if src rowstride != dst rowstride

---

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

diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c 
b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index 0415a50..91f0db9 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -437,23 +437,18 @@ static void migrate_image_to_miptree(radeon_mipmap_tree 
*mt,
 
                radeon_miptree_unreference(&image->mt);
        } else {
-               /* need to confirm this value is correct */
-               if (_mesa_is_format_compressed(image->base.TexFormat)) {
-                       unsigned size = 
_mesa_format_image_size(image->base.TexFormat,
-                                                                               
                        image->base.Width,
-                                                                               
                        image->base.Height,
-                                                                               
                        image->base.Depth);
-                       memcpy(dest, image->base.Data, size);
-               } else {
-                       uint32_t srcrowstride;
-                       uint32_t height;
+               const uint32_t srcrowstride = 
_mesa_format_row_stride(image->base.TexFormat, image->base.Width);
+               uint32_t rows = image->base.Height * image->base.Depth;
 
-                       height = image->base.Height * image->base.Depth;
-                       srcrowstride = image->base.Width * 
_mesa_get_format_bytes(image->base.TexFormat);
-                       copy_rows(dest, dstlvl->rowstride, image->base.Data, 
srcrowstride,
-                                       height, srcrowstride);
+               if (_mesa_is_format_compressed(image->base.TexFormat)) {
+                       uint32_t blockWidth, blockHeight;
+                       _mesa_get_format_block_size(image->base.TexFormat, 
&blockWidth, &blockHeight);
+                       rows = (rows + blockHeight - 1) / blockHeight;
                }
 
+               copy_rows(dest, dstlvl->rowstride, image->base.Data, 
srcrowstride,
+                                 rows, srcrowstride);
+
                _mesa_free_texmemory(image->base.Data);
                image->base.Data = 0;
        }

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to