diff mbox

uxa: Default to using TILING_X for pixmaps.

Message ID 1269366683-17546-2-git-send-email-chris@chris-wilson.co.uk (mailing list archive)
State Accepted
Headers show

Commit Message

Chris Wilson March 23, 2010, 5:51 p.m. UTC
None
diff mbox

Patch

diff --git a/src/i830_uxa.c b/src/i830_uxa.c
index fec5378..ded931d 100644
--- a/src/i830_uxa.c
+++ b/src/i830_uxa.c
@@ -135,8 +135,16 @@  i830_uxa_pixmap_compute_size(PixmapPtr pixmap,
 		pitch_align = intel->accel_pixmap_pitch_alignment;
 		size = ROUND_TO((w * pixmap->drawable.bitsPerPixel + 7) / 8,
 				pitch_align) * ALIGN (h, 2);
-		if (size < 4096)
+		if (size <= 4096) {
 			*tiling = I915_TILING_NONE;
+		} else if (!IS_I965G(intel)) {
+			/* Older hardware requires massive fences to be pot
+			 * size aligned with a minimum of 1 MiB, so
+			 * causes massive overallocation for small textures.
+			 */
+			if (size <= 1024*1024/2)
+				*tiling = I915_TILING_NONE;
+		}
 	}
 
   repeat:
@@ -863,12 +871,13 @@  i830_uxa_create_pixmap(ScreenPtr screen, int w, int h, int depth,
 			return NullPixmap;
 		}
 
-		if (usage == INTEL_CREATE_PIXMAP_TILING_X)
-			priv->tiling = I915_TILING_X;
-		else if (usage == INTEL_CREATE_PIXMAP_TILING_Y)
+		/* Always attempt to tile, compute_size() will remove the
+		 * tiling for pixmaps that are either too large or too small
+		 * to be effectively tiled.
+		 */
+		priv->tiling = I915_TILING_X;
+		if (usage == INTEL_CREATE_PIXMAP_TILING_Y)
 			priv->tiling = I915_TILING_Y;
-		else
-			priv->tiling = I915_TILING_NONE;
 
 		size = i830_uxa_pixmap_compute_size(pixmap, w, h,
 						    &priv->tiling, &stride);