OSDN Git Service

r600g: Make unaligned 3D textures work on +evergreen
authorChristian König <deathsimple@vodafone.de>
Mon, 29 Aug 2011 10:14:30 +0000 (12:14 +0200)
committerChristian König <deathsimple@vodafone.de>
Tue, 30 Aug 2011 13:33:51 +0000 (15:33 +0200)
The layersize calculation is slightly different on +evergreen.
This makes mpeg2 video decoding and piglits texture-packed-formats
test work correctly on this hardware.

src/gallium/drivers/r600/r600_texture.c

index 3bd5350..691cc48 100644 (file)
@@ -262,7 +262,11 @@ static void r600_setup_miptree(struct pipe_screen *screen,
                nblocksx = r600_texture_get_nblocksx(screen, rtex, i);
                nblocksy = r600_texture_get_nblocksy(screen, rtex, i);
 
-               layer_size = nblocksx * nblocksy * blocksize;
+               if (chipc >= EVERGREEN && array_mode == V_038000_ARRAY_LINEAR_GENERAL)
+                       layer_size = align(nblocksx, 64) * nblocksy * blocksize;
+               else
+                       layer_size = nblocksx * nblocksy * blocksize;
+
                if (ptex->target == PIPE_TEXTURE_CUBE) {
                        if (chipc >= R700)
                                size = layer_size * 8;