summaryrefslogtreecommitdiff
authorEric Anholt <eric@anholt.net>2009-07-15 23:38:07 (GMT)
committer Eric Anholt <eric@anholt.net>2009-07-22 16:16:00 (GMT)
commit6b7728491c3b771bcba2c7ffd75330c0a0b37f44 (patch) (side-by-side diff)
treef07b12a878b0948ec90df9588658c202d6bdf663
parent22f7cbc32b70a89d55c79bbea39fb10c50a310ec (diff)
downloadxf86-video-intel-6b7728491c3b771bcba2c7ffd75330c0a0b37f44.zip
xf86-video-intel-6b7728491c3b771bcba2c7ffd75330c0a0b37f44.tar.gz
Only align DRI2 tiled pixmaps to the DRI2 tiled pixmap alignment requirement.
This should save significant amounts of memory for glyph and other small pixmap storage. Bug #21387
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--src/i830_accel.c3
-rw-r--r--src/i830_uxa.c16
2 files changed, 11 insertions, 8 deletions
diff --git a/src/i830_accel.c b/src/i830_accel.c
index 96a7bde..abefa55 100644
--- a/src/i830_accel.c
+++ b/src/i830_accel.c
@@ -232,9 +232,6 @@ I830AccelInit(ScreenPtr pScreen)
pI830->accel_max_x = 2048;
pI830->accel_max_y = 2048;
}
- /* Bump the pitch so that we can tile any pixmap we create. */
- if (pI830->directRenderingType >= DRI_DRI2)
- pI830->accel_pixmap_pitch_alignment = 512;
return i830_uxa_init(pScreen);
}
diff --git a/src/i830_uxa.c b/src/i830_uxa.c
index 3212582..3a476a7 100644
--- a/src/i830_uxa.c
+++ b/src/i830_uxa.c
@@ -597,14 +597,20 @@ i830_uxa_create_pixmap (ScreenPtr screen, int w, int h, int depth, unsigned usag
{
unsigned int size;
uint32_t tiling = I915_TILING_NONE;
+ int pitch_align;
- stride = ROUND_TO((w * pixmap->drawable.bitsPerPixel + 7) / 8,
- i830->accel_pixmap_pitch_alignment);
-
- if (usage == INTEL_CREATE_PIXMAP_TILING_X)
+ if (usage == INTEL_CREATE_PIXMAP_TILING_X) {
tiling = I915_TILING_X;
- else if (usage == INTEL_CREATE_PIXMAP_TILING_Y)
+ pitch_align = 512;
+ } else if (usage == INTEL_CREATE_PIXMAP_TILING_Y) {
tiling = I915_TILING_Y;
+ pitch_align = 512;
+ } else {
+ pitch_align = i830->accel_pixmap_pitch_alignment;
+ }
+
+ stride = ROUND_TO((w * pixmap->drawable.bitsPerPixel + 7) / 8,
+ pitch_align);
if (tiling == I915_TILING_NONE) {
size = stride * h;