summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Noland <[email protected]>2009-10-19 09:47:39 -0500
committerAlex Deucher <[email protected]>2009-10-19 11:09:10 -0400
commit8123180ea649540fb7319bc79ad77dca0d5d68cd (patch)
treecb326aad724136c51dd684b0a182db7aa7de221a
parent3594b53c0173ac810106f667604bf94b5cfc4a1e (diff)
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 <[email protected]>
-rw-r--r--src/mesa/drivers/dri/r600/r600_texstate.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/r600/r600_texstate.c b/src/mesa/drivers/dri/r600/r600_texstate.c
index 61ff7e8158e..a30703e41b0 100644
--- a/src/mesa/drivers/dri/r600/r600_texstate.c
+++ b/src/mesa/drivers/dri/r600/r600_texstate.c
@@ -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;