Limit Solid & Copy offsets to 4k when rendering to tiled targets

This commit is contained in:
Jesse Barnes 2007-08-03 21:27:52 -07:00
parent 019dbfda29
commit ffbab2ee5d
1 changed files with 8 additions and 0 deletions

View File

@ -147,6 +147,8 @@ I830EXAPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg)
I830FALLBACK("pixmap offset not aligned");
if ( pitch % pI830->EXADriverPtr->pixmapPitchAlign != 0)
I830FALLBACK("pixmap pitch not aligned");
if ( pI830->tiling && offset > 4096)
I830FALLBACK("offset limited to 4k for tiled targets");
pI830->BR[13] = (pitch & 0xffff);
switch (pPixmap->drawable.bitsPerPixel) {
@ -231,6 +233,12 @@ I830EXAPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int xdir,
pI830->copy_src_tiled = (pI830->tiling &&
exaPixmapInFrontbuffer(pSrcPixmap));
if (pI830->copy_src_tiled && pI830->copy_src_off > 4096)
I830FALLBACK("offset limited to 4k for tiled targets");
if (pI830->tiling && exaPixmapInFrontbuffer(pDstPixmap) &&
exaGetPixmapOffset(pDstPixmap) > 4096)
I830FALLBACK("offset limited to 4k for tiled targets");
pI830->BR[13] = exaGetPixmapPitch(pDstPixmap);
pI830->BR[13] |= I830CopyROP[alu] << 16;