- Fix the exa pixmap offset/pitch alignment to deal with non-POT alignment

requirements. MGA, notably, uses a multiple of 3 in some cases.
- Rename the pixmap offset/pitch alignment fields to more clearly state
    their meaning.
This commit is contained in:
Eric Anholt 2005-08-14 19:46:55 +00:00
parent e3509c940f
commit ebedc8bbb5
11 changed files with 28 additions and 25 deletions

View File

@ -162,13 +162,13 @@ exaPixmapAllocArea (PixmapPtr pPixmap)
if (pExaScr->info->card.flags & EXA_OFFSCREEN_ALIGN_POT && w != 1)
w = 1 << (exaLog2(w - 1) + 1);
pitch = (w * bpp / 8 + pExaScr->info->card.offscreenPitch - 1) &
~(pExaScr->info->card.offscreenPitch - 1);
pitch = (w * bpp / 8) + (pExaScr->info->card.pixmapPitchAlign - 1);
pitch -= pitch % pExaScr->info->card.pixmapPitchAlign;
pExaPixmap->devKind = pPixmap->devKind;
pExaPixmap->devPrivate = pPixmap->devPrivate;
pExaPixmap->area = exaOffscreenAlloc (pScreen, pitch * h,
pExaScr->info->card.offscreenByteAlign,
pExaScr->info->card.pixmapOffsetAlign,
FALSE,
exaPixmapSave, (pointer) pPixmap);
if (!pExaPixmap->area)

View File

@ -72,8 +72,8 @@ typedef struct _ExaCardInfo {
<< 10, >>10 all over the place */
unsigned long memorySize;
int offscreenByteAlign;
int offscreenPitch;
int pixmapOffsetAlign;
int pixmapPitchAlign;
int flags;
/* The coordinate limitations for rendering for this hardware.

View File

@ -162,13 +162,13 @@ exaPixmapAllocArea (PixmapPtr pPixmap)
if (pExaScr->info->card.flags & EXA_OFFSCREEN_ALIGN_POT && w != 1)
w = 1 << (exaLog2(w - 1) + 1);
pitch = (w * bpp / 8 + pExaScr->info->card.offscreenPitch - 1) &
~(pExaScr->info->card.offscreenPitch - 1);
pitch = (w * bpp / 8) + (pExaScr->info->card.pixmapPitchAlign - 1);
pitch -= pitch % pExaScr->info->card.pixmapPitchAlign;
pExaPixmap->devKind = pPixmap->devKind;
pExaPixmap->devPrivate = pPixmap->devPrivate;
pExaPixmap->area = exaOffscreenAlloc (pScreen, pitch * h,
pExaScr->info->card.offscreenByteAlign,
pExaScr->info->card.pixmapOffsetAlign,
FALSE,
exaPixmapSave, (pointer) pPixmap);
if (!pExaPixmap->area)

View File

@ -162,13 +162,13 @@ exaPixmapAllocArea (PixmapPtr pPixmap)
if (pExaScr->info->card.flags & EXA_OFFSCREEN_ALIGN_POT && w != 1)
w = 1 << (exaLog2(w - 1) + 1);
pitch = (w * bpp / 8 + pExaScr->info->card.offscreenPitch - 1) &
~(pExaScr->info->card.offscreenPitch - 1);
pitch = (w * bpp / 8) + (pExaScr->info->card.pixmapPitchAlign - 1);
pitch -= pitch % pExaScr->info->card.pixmapPitchAlign;
pExaPixmap->devKind = pPixmap->devKind;
pExaPixmap->devPrivate = pPixmap->devPrivate;
pExaPixmap->area = exaOffscreenAlloc (pScreen, pitch * h,
pExaScr->info->card.offscreenByteAlign,
pExaScr->info->card.pixmapOffsetAlign,
FALSE,
exaPixmapSave, (pointer) pPixmap);
if (!pExaPixmap->area)

View File

@ -212,7 +212,8 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
area->score = 0;
area->save_offset = area->offset;
area->offset = (area->offset + align - 1) & ~(align - 1);
area->offset = (area->offset + align - 1);
area->offset -= area->offset % align;
ExaOffscreenValidate (pScreen);

View File

@ -162,13 +162,13 @@ exaPixmapAllocArea (PixmapPtr pPixmap)
if (pExaScr->info->card.flags & EXA_OFFSCREEN_ALIGN_POT && w != 1)
w = 1 << (exaLog2(w - 1) + 1);
pitch = (w * bpp / 8 + pExaScr->info->card.offscreenPitch - 1) &
~(pExaScr->info->card.offscreenPitch - 1);
pitch = (w * bpp / 8) + (pExaScr->info->card.pixmapPitchAlign - 1);
pitch -= pitch % pExaScr->info->card.pixmapPitchAlign;
pExaPixmap->devKind = pPixmap->devKind;
pExaPixmap->devPrivate = pPixmap->devPrivate;
pExaPixmap->area = exaOffscreenAlloc (pScreen, pitch * h,
pExaScr->info->card.offscreenByteAlign,
pExaScr->info->card.pixmapOffsetAlign,
FALSE,
exaPixmapSave, (pointer) pPixmap);
if (!pExaPixmap->area)

View File

@ -72,8 +72,8 @@ typedef struct _ExaCardInfo {
<< 10, >>10 all over the place */
unsigned long memorySize;
int offscreenByteAlign;
int offscreenPitch;
int pixmapOffsetAlign;
int pixmapPitchAlign;
int flags;
/* The coordinate limitations for rendering for this hardware.

View File

@ -162,13 +162,13 @@ exaPixmapAllocArea (PixmapPtr pPixmap)
if (pExaScr->info->card.flags & EXA_OFFSCREEN_ALIGN_POT && w != 1)
w = 1 << (exaLog2(w - 1) + 1);
pitch = (w * bpp / 8 + pExaScr->info->card.offscreenPitch - 1) &
~(pExaScr->info->card.offscreenPitch - 1);
pitch = (w * bpp / 8) + (pExaScr->info->card.pixmapPitchAlign - 1);
pitch -= pitch % pExaScr->info->card.pixmapPitchAlign;
pExaPixmap->devKind = pPixmap->devKind;
pExaPixmap->devPrivate = pPixmap->devPrivate;
pExaPixmap->area = exaOffscreenAlloc (pScreen, pitch * h,
pExaScr->info->card.offscreenByteAlign,
pExaScr->info->card.pixmapOffsetAlign,
FALSE,
exaPixmapSave, (pointer) pPixmap);
if (!pExaPixmap->area)

View File

@ -162,13 +162,13 @@ exaPixmapAllocArea (PixmapPtr pPixmap)
if (pExaScr->info->card.flags & EXA_OFFSCREEN_ALIGN_POT && w != 1)
w = 1 << (exaLog2(w - 1) + 1);
pitch = (w * bpp / 8 + pExaScr->info->card.offscreenPitch - 1) &
~(pExaScr->info->card.offscreenPitch - 1);
pitch = (w * bpp / 8) + (pExaScr->info->card.pixmapPitchAlign - 1);
pitch -= pitch % pExaScr->info->card.pixmapPitchAlign;
pExaPixmap->devKind = pPixmap->devKind;
pExaPixmap->devPrivate = pPixmap->devPrivate;
pExaPixmap->area = exaOffscreenAlloc (pScreen, pitch * h,
pExaScr->info->card.offscreenByteAlign,
pExaScr->info->card.pixmapOffsetAlign,
FALSE,
exaPixmapSave, (pointer) pPixmap);
if (!pExaPixmap->area)

View File

@ -212,7 +212,8 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
area->score = 0;
area->save_offset = area->offset;
area->offset = (area->offset + align - 1) & ~(align - 1);
area->offset = (area->offset + align - 1);
area->offset -= area->offset % align;
ExaOffscreenValidate (pScreen);

View File

@ -212,7 +212,8 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
area->score = 0;
area->save_offset = area->offset;
area->offset = (area->offset + align - 1) & ~(align - 1);
area->offset = (area->offset + align - 1);
area->offset -= area->offset % align;
ExaOffscreenValidate (pScreen);