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
This commit is contained in:
Eric Anholt 2009-07-15 16:38:07 -07:00
parent 22f7cbc32b
commit 6b7728491c
2 changed files with 12 additions and 9 deletions

View File

@ -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);
}

View File

@ -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;
if (usage == INTEL_CREATE_PIXMAP_TILING_X) {
tiling = I915_TILING_X;
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,
i830->accel_pixmap_pitch_alignment);
if (usage == INTEL_CREATE_PIXMAP_TILING_X)
tiling = I915_TILING_X;
else if (usage == INTEL_CREATE_PIXMAP_TILING_Y)
tiling = I915_TILING_Y;
pitch_align);
if (tiling == I915_TILING_NONE) {
size = stride * h;