Mesa (mesa_7_7_branch): radeon: fix image migration for small compressed textures
Maciej Cencora
osiris at kemper.freedesktop.org
Mon Dec 7 21:30:46 UTC 2009
Module: Mesa
Branch: mesa_7_7_branch
Commit: 013cf1d63deb9c33089777afbdea85013fd46b49
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=013cf1d63deb9c33089777afbdea85013fd46b49
Author: Maciej Cencora <m.cencora at gmail.com>
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;
}
More information about the mesa-commit
mailing list