r300g: do not align compressed textures to a tile size
authorMarek Olšák <maraeo@gmail.com>
Sat, 16 Jan 2010 00:45:10 +0000 (01:45 +0100)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 18 Jan 2010 10:35:08 +0000 (02:35 -0800)
src/gallium/drivers/r300/r300_texture.c

index c6dd27272b6f6b70f63f4c03ab7113e87321addf..1f73f74c2688e37da9e9c94361b897507b945539 100644 (file)
@@ -139,11 +139,15 @@ unsigned r300_texture_get_stride(struct r300_screen* screen,
         return 0;
     }
 
-    tile_width = r300_texture_get_tile_size(tex, TILE_WIDTH);
-    width = align(u_minify(tex->tex.width0, level), tile_width);
+    width = u_minify(tex->tex.width0, level);
 
-    /* Should already be aligned except for S3TC. */
-    return align(util_format_get_stride(tex->tex.format, width), 32);
+    if (!util_format_is_compressed(tex->tex.format)) {
+        tile_width = r300_texture_get_tile_size(tex, TILE_WIDTH);
+        width = align(width, tile_width);
+        return util_format_get_stride(tex->tex.format, width);
+    } else {
+        return align(util_format_get_stride(tex->tex.format, width), 32);
+    }
 }
 
 static unsigned r300_texture_get_nblocksy(struct r300_texture* tex,
@@ -151,8 +155,12 @@ static unsigned r300_texture_get_nblocksy(struct r300_texture* tex,
 {
     unsigned height, tile_height;
 
-    tile_height = r300_texture_get_tile_size(tex, TILE_HEIGHT);
-    height = align(u_minify(tex->tex.height0, level), tile_height);
+    height = u_minify(tex->tex.height0, level);
+
+    if (!util_format_is_compressed(tex->tex.format)) {
+        tile_height = r300_texture_get_tile_size(tex, TILE_HEIGHT);
+        height = align(height, tile_height);
+    }
 
     return util_format_get_nblocksy(tex->tex.format, height);
 }