i915: Don't do the pitch expansion for tiled buffers.
authorEric Anholt <eric@anholt.net>
Tue, 2 Mar 2010 23:28:36 +0000 (15:28 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 3 Mar 2010 19:33:37 +0000 (11:33 -0800)
The weirdness that led to the bumping of pitch for those 512/1024
pixels is that in taking a 2x2 subspan or bilinear filtering we'd end
up hitting the same channel in 2 different pages, leading to lower
performance.  With tiling, that doesn't occur, so we don't need to
waste the memory.

src/mesa/drivers/dri/intel/intel_mipmap_tree.c

index cb5a341050b646061f2daf671cf7b96a9b1d46c0..a20ea5afdb70bdf3d2b496967eb602d3b0606e73 100644 (file)
@@ -238,11 +238,11 @@ int intel_miptree_pitch_align (struct intel_context *intel,
       pitch = ALIGN(pitch * mt->cpp, pitch_align);
 
 #ifdef I915
-      /* 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 the required alignment for now.
+      /* Do a little adjustment to linear allocations so that we avoid
+       * hitting the same channel of memory for 2 different pages when
+       * reading a 2x2 subspan or doing bilinear filtering.
        */
-      if (!(pitch & 511) && 
+      if (tiling == I915_TILING_NONE && !(pitch & 511) &&
         (pitch + pitch_align) < (1 << ctx->Const.MaxTextureLevels))
         pitch += pitch_align;
 #endif