summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/r600/r600_texture.c
diff options
context:
space:
mode:
authorChristian König <[email protected]>2011-08-29 12:14:30 +0200
committerChristian König <[email protected]>2011-08-30 15:33:51 +0200
commit8f4ec55f77a993ec44db56726187bdd4f041880e (patch)
tree597580e3177dd869c45de92c6bf9f10542beb333 /src/gallium/drivers/r600/r600_texture.c
parentd49525d0c52601f8c4abec82590ca4ffb896a614 (diff)
r600g: Make unaligned 3D textures work on +evergreen
The layersize calculation is slightly different on +evergreen. This makes mpeg2 video decoding and piglits texture-packed-formats test work correctly on this hardware.
Diffstat (limited to 'src/gallium/drivers/r600/r600_texture.c')
-rw-r--r--src/gallium/drivers/r600/r600_texture.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c
index 3bd53501b49..691cc48dea7 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -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;