i915: Only align texture pitch to 64 bytes when textures can be render targets.
authorMichel Dänzer <michel@tungstengraphics.com>
Wed, 3 Oct 2007 09:25:59 +0000 (11:25 +0200)
committerMichel Dänzer <michel@tungstengraphics.com>
Wed, 3 Oct 2007 09:25:59 +0000 (11:25 +0200)
src/mesa/drivers/dri/i915/intel_mipmap_tree.c

index aefb89ac83c7537faf16b9c047f2170587ea25ff..2c167a9ab7b8a12bc3da13cd7229ff3e0e9372a6 100644 (file)
@@ -99,19 +99,27 @@ intel_miptree_create(struct intel_context *intel,
 
    if (ok) {
       if (!mt->compressed) {
-        /* XXX: Align pitch to multiple of 64 bytes for now to allow
-         * render-to-texture to work in all cases. This should probably be
-         * replaced at some point by some scheme to only do this when really
-         * necessary.
-         */
-        mt->pitch = (mt->pitch * cpp + 63) & ~63;
+        int align;
+
+        if (intel->intelScreen->ttm) {
+           /* XXX: Align pitch to multiple of 64 bytes for now to allow
+            * render-to-texture to work in all cases. This should probably be
+            * replaced at some point by some scheme to only do this when really
+            * necessary.
+            */
+           align = 63;
+        } else {
+           align = 3;
+        }
+
+        mt->pitch = (mt->pitch * cpp + align) & ~align;
 
         /* XXX: At least the i915 seems very upset when the pitch is a multiple
          * of 1024 and sometimes 512 bytes - performance can drop by several
-         * times. Go to the next multiple of 64 for now.
+         * times. Go to the next multiple of the required alignment for now.
          */
         if (!(mt->pitch & 511))
-           mt->pitch += 64;
+           mt->pitch += align + 1;
 
         mt->pitch /= cpp;
       }