Mesa (master): r300g: do not use TXPITCH_EN for power-of-two textures from the DDX

Marek Olšák mareko at kemper.freedesktop.org
Sun Jul 25 09:07:30 UTC 2010


Module: Mesa
Branch: master
Commit: c92d232061c1aef6f5f56cbd815625778db2fd8c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c92d232061c1aef6f5f56cbd815625778db2fd8c

Author: Marek Olšák <maraeo at gmail.com>
Date:   Sat Jul 24 22:52:01 2010 +0200

r300g: do not use TXPITCH_EN for power-of-two textures from the DDX

We were using TXPITCH_EN for textures from the DDX since ever, for nothing.

---

 src/gallium/drivers/r300/r300_texture_desc.c |   20 ++++++++++++++------
 1 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_texture_desc.c b/src/gallium/drivers/r300/r300_texture_desc.c
index 18a2bd3..becaa59 100644
--- a/src/gallium/drivers/r300/r300_texture_desc.c
+++ b/src/gallium/drivers/r300/r300_texture_desc.c
@@ -210,6 +210,14 @@ static void r300_texture_3d_fix_mipmapping(struct r300_screen *screen,
     }
 }
 
+/* Get a width in pixels from a stride in bytes. */
+static unsigned stride_to_width(enum pipe_format format,
+                                unsigned stride_in_bytes)
+{
+    return (stride_in_bytes / util_format_get_blocksize(format)) *
+            util_format_get_blockwidth(format);
+}
+
 static void r300_setup_miptree(struct r300_screen *screen,
                                struct r300_texture_desc *desc)
 {
@@ -246,9 +254,7 @@ static void r300_setup_miptree(struct r300_screen *screen,
         desc->size_in_bytes = desc->offset_in_bytes[i] + size;
         desc->layer_size_in_bytes[i] = layer_size;
         desc->stride_in_bytes[i] = stride;
-        desc->stride_in_pixels[i] =
-                (stride / util_format_get_blocksize(base->format)) *
-                util_format_get_blockwidth(base->format);
+        desc->stride_in_pixels[i] = stride_to_width(desc->b.b.format, stride);
 
         SCREEN_DBG(screen, DBG_TEXALLOC, "r300: Texture miptree: Level %d "
                 "(%dx%dx%d px, pitch %d bytes) %d bytes total, macrotiled %s\n",
@@ -261,9 +267,11 @@ static void r300_setup_miptree(struct r300_screen *screen,
 static void r300_setup_flags(struct r300_texture_desc *desc)
 {
     desc->uses_stride_addressing =
-            !util_is_power_of_two(desc->b.b.width0) ||
-            !util_is_power_of_two(desc->b.b.height0) ||
-            desc->stride_in_bytes_override;
+        !util_is_power_of_two(desc->b.b.width0) ||
+        !util_is_power_of_two(desc->b.b.height0) ||
+        (desc->stride_in_bytes_override &&
+         stride_to_width(desc->b.b.format,
+                         desc->stride_in_bytes_override) != desc->b.b.width0);
 }
 
 static void r300_setup_cbzb_flags(struct r300_screen *rscreen,




More information about the mesa-commit mailing list