diff options
Diffstat (limited to 'src/mesa/drivers')
| -rw-r--r-- | 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 0415a50d0b..91f0db958b 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;  	} | 
