r600: fix tfp1 bo size
authorAndre Maasikas <amaasikas@gmail.com>
Thu, 15 Oct 2009 15:24:49 +0000 (11:24 -0400)
committerAlex Deucher <alexdeucher@gmail.com>
Thu, 15 Oct 2009 15:24:49 +0000 (11:24 -0400)
Setting the wrong bo size resulting in an incomplete
read cache flush when reading the texture.  This fixes the
compiz text corruption.

[agd5f: take hw pitch alignment into account]

src/mesa/drivers/dri/r600/r600_texstate.c

index bcb8d7c73d73168a0e2f94010b9c165352c0a407..61ff7e8158e6a5e08905c6f23a44f55cff0e69ef 100644 (file)
@@ -721,7 +721,9 @@ void r600SetTexOffset(__DRIcontext * pDRICtx, GLint texname,
        struct gl_texture_object *tObj =
            _mesa_lookup_texture(rmesa->radeon.glCtx, texname);
        radeonTexObjPtr t = radeon_tex_obj(tObj);
-       uint32_t pitch_val, size;
+       int firstlevel = t->mt ? t->mt->firstLevel : 0;
+       const struct gl_texture_image *firstImage;
+       uint32_t pitch_val, size, row_align;
 
        if (!tObj)
                return;
@@ -731,7 +733,9 @@ void r600SetTexOffset(__DRIcontext * pDRICtx, GLint texname,
        if (!offset)
                return;
 
-       size = pitch;//h * w * (depth / 8);
+       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;
        if (t->bo) {
                radeon_bo_unref(t->bo);
                t->bo = NULL;