r600: Fix size calculation for 24 bit depth

size was being calculated based on 3 bytes per pixel with 24 bit depth
instead of 4 bytes.  This caused corruption in the bottom 25% of objects.
This finishes fixing the menu/text corruption in compiz/kde4.

Signed-off-by: Robert Noland <rnoland@2hip.net>
This commit is contained in:
Robert Noland 2009-10-19 09:47:39 -05:00 committed by Alex Deucher
parent 3594b53c01
commit 8123180ea6

View file

@ -723,7 +723,7 @@ void r600SetTexOffset(__DRIcontext * pDRICtx, GLint texname,
radeonTexObjPtr t = radeon_tex_obj(tObj);
int firstlevel = t->mt ? t->mt->firstLevel : 0;
const struct gl_texture_image *firstImage;
uint32_t pitch_val, size, row_align;
uint32_t pitch_val, size, row_align, bpp;
if (!tObj)
return;
@ -733,9 +733,13 @@ void r600SetTexOffset(__DRIcontext * pDRICtx, GLint texname,
if (!offset)
return;
bpp = depth / 8;
if (bpp == 3)
bpp = 4;
firstImage = t->base.Image[0][firstlevel];
row_align = rmesa->radeon.texture_row_align - 1;
size = ((firstImage->Width * (depth / 8) + row_align) & ~row_align) * firstImage->Height;
size = ((firstImage->Width * bpp + row_align) & ~row_align) * firstImage->Height;
if (t->bo) {
radeon_bo_unref(t->bo);
t->bo = NULL;