Align scratch area offsets to the offscreen byte alignment.
This commit is contained in:
parent
cf3f95d216
commit
c3bc6dd551
|
@ -85,7 +85,6 @@ ATIDrawSetup(ScreenPtr pScreen)
|
||||||
KdScreenPriv(pScreen);
|
KdScreenPriv(pScreen);
|
||||||
ATIScreenInfo(pScreenPriv);
|
ATIScreenInfo(pScreenPriv);
|
||||||
ATICardInfo(pScreenPriv);
|
ATICardInfo(pScreenPriv);
|
||||||
char *mmio = atic->reg_base;
|
|
||||||
RING_LOCALS;
|
RING_LOCALS;
|
||||||
|
|
||||||
/* XXX: this shouldn't be necessary, but fixes some R128 composite
|
/* XXX: this shouldn't be necessary, but fixes some R128 composite
|
||||||
|
@ -605,7 +604,9 @@ ATIUploadToScratch(PixmapPtr pSrc, PixmapPtr pDst)
|
||||||
* KAA flag we check for (and supported in kaa.c in general) since many
|
* KAA flag we check for (and supported in kaa.c in general) since many
|
||||||
* older bits of hardware are going to want POT pitches.
|
* older bits of hardware are going to want POT pitches.
|
||||||
*/
|
*/
|
||||||
w = 1 << (ATILog2(pSrc->drawable.width - 1) + 1);
|
w = pSrc->drawable.width;
|
||||||
|
if (atis->kaa.flags & KAA_OFFSCREEN_ALIGN_POT)
|
||||||
|
w = 1 << (ATILog2(w - 1) + 1);
|
||||||
dst_pitch = (w * pSrc->drawable.bitsPerPixel / 8 +
|
dst_pitch = (w * pSrc->drawable.bitsPerPixel / 8 +
|
||||||
atis->kaa.offscreenPitch - 1) & ~(atis->kaa.offscreenPitch - 1);
|
atis->kaa.offscreenPitch - 1) & ~(atis->kaa.offscreenPitch - 1);
|
||||||
|
|
||||||
|
@ -614,6 +615,9 @@ ATIUploadToScratch(PixmapPtr pSrc, PixmapPtr pDst)
|
||||||
ATI_FALLBACK(("Pixmap too large for scratch (%d,%d)\n",
|
ATI_FALLBACK(("Pixmap too large for scratch (%d,%d)\n",
|
||||||
pSrc->drawable.width, pSrc->drawable.height));
|
pSrc->drawable.width, pSrc->drawable.height));
|
||||||
|
|
||||||
|
atis->scratch_next = (atis->scratch_next +
|
||||||
|
atis->kaa.offscreenByteAlign - 1) &
|
||||||
|
~(atis->kaa.offscreenByteAlign - 1);
|
||||||
if (atis->scratch_next + size > atis->scratch_offset +
|
if (atis->scratch_next + size > atis->scratch_offset +
|
||||||
atis->scratch_size) {
|
atis->scratch_size) {
|
||||||
/* Only sync when we've used all of the scratch area. */
|
/* Only sync when we've used all of the scratch area. */
|
||||||
|
@ -673,6 +677,7 @@ ATIDrawInit(ScreenPtr pScreen)
|
||||||
KdScreenPriv(pScreen);
|
KdScreenPriv(pScreen);
|
||||||
ATIScreenInfo(pScreenPriv);
|
ATIScreenInfo(pScreenPriv);
|
||||||
ATICardInfo(pScreenPriv);
|
ATICardInfo(pScreenPriv);
|
||||||
|
int align_scratch;
|
||||||
|
|
||||||
ErrorF("Screen: %d/%d depth/bpp\n", pScreenPriv->screen->fb[0].depth,
|
ErrorF("Screen: %d/%d depth/bpp\n", pScreenPriv->screen->fb[0].depth,
|
||||||
pScreenPriv->screen->fb[0].bitsPerPixel);
|
pScreenPriv->screen->fb[0].bitsPerPixel);
|
||||||
|
@ -706,6 +711,13 @@ ATIDrawInit(ScreenPtr pScreen)
|
||||||
atis->kaa.offscreenPitch = 32;
|
atis->kaa.offscreenPitch = 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Align the scratch area to what offscreenByteAlign requires. */
|
||||||
|
align_scratch = (atis->scratch_offset +
|
||||||
|
atis->kaa.offscreenByteAlign - 1) &
|
||||||
|
~(atis->kaa.offscreenByteAlign - 1);
|
||||||
|
atis->scratch_size -= align_scratch - atis->scratch_offset;
|
||||||
|
atis->scratch_offset = align_scratch;
|
||||||
|
|
||||||
if (!kaaDrawInit(pScreen, &atis->kaa))
|
if (!kaaDrawInit(pScreen, &atis->kaa))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue