diff options
author | Jesse Barnes <jesse.barnes@intel.com> | 2007-08-06 16:01:10 -0700 |
---|---|---|
committer | Jesse Barnes <jesse.barnes@intel.com> | 2007-08-06 16:04:12 -0700 |
commit | 5ff05dffe229e35da7619762628fdd0f125585e8 (patch) | |
tree | 0d262ddcf6b1906debe5172cda114948f2e4b664 | |
parent | ba90d944329dd8c79a757c38128964fbbe4ab898 (diff) |
More tiled rendering fixes: - check for tiling, not just offset in PrepareSolid - combine pI830->tiling and frontbuffer checks into new exaPixmapTiled function for readability
-rw-r--r-- | src/i830_exa.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/i830_exa.c b/src/i830_exa.c index 88853a75..0e9cd5bd 100644 --- a/src/i830_exa.c +++ b/src/i830_exa.c @@ -98,9 +98,14 @@ const int I830PatternROP[16] = }; static Bool -exaPixmapInFrontbuffer(PixmapPtr p) +exaPixmapTiled(PixmapPtr p) { ScreenPtr pScreen = p->drawable.pScreen; + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + I830Ptr pI830 = I830PTR(pScrn); + + if (!pI830->tiling) + return FALSE; if (p == pScreen->GetScreenPixmap(pScreen)) return TRUE; @@ -147,7 +152,7 @@ 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) + if ( exaPixmapTiled(pPixmap) && offset > 4096) I830FALLBACK("offset limited to 4k for tiled targets"); pI830->BR[13] = (pitch & 0xffff); @@ -186,7 +191,7 @@ I830EXASolid(PixmapPtr pPixmap, int x1, int y1, int x2, int y2) if (pPixmap->drawable.bitsPerPixel == 32) cmd |= XY_COLOR_BLT_WRITE_ALPHA | XY_COLOR_BLT_WRITE_RGB; - if (pI830->tiling && exaPixmapInFrontbuffer(pPixmap)) { + if (exaPixmapTiled(pPixmap)) { /* Fixup pitch for destination if tiled */ pI830->BR[13] = (ROUND_TO(pI830->BR[13] & 0xffff, 512) >> 2) | (pI830->BR[13] & 0xffff0000); @@ -230,12 +235,11 @@ I830EXAPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int xdir, pI830->copy_src_pitch = exaGetPixmapPitch(pSrcPixmap); pI830->copy_src_off = exaGetPixmapOffset(pSrcPixmap); - pI830->copy_src_tiled = (pI830->tiling && - exaPixmapInFrontbuffer(pSrcPixmap)); + pI830->copy_src_tiled = exaPixmapTiled(pSrcPixmap); if (pI830->copy_src_tiled && pI830->copy_src_off > 4096) I830FALLBACK("offset limited to 4k for tiled targets"); - if (pI830->tiling && exaPixmapInFrontbuffer(pDstPixmap) && + if (exaPixmapTiled(pDstPixmap) && exaGetPixmapOffset(pDstPixmap) > 4096) I830FALLBACK("offset limited to 4k for tiled targets"); @@ -278,7 +282,7 @@ I830EXACopy(PixmapPtr pDstPixmap, int src_x1, int src_y1, int dst_x1, if (pDstPixmap->drawable.bitsPerPixel == 32) cmd |= XY_SRC_COPY_BLT_WRITE_ALPHA | XY_SRC_COPY_BLT_WRITE_RGB; - if (pI830->tiling && exaPixmapInFrontbuffer(pDstPixmap)) { + if (exaPixmapTiled(pDstPixmap)) { /* Fixup pitch for destination if tiled */ pI830->BR[13] = (ROUND_TO(pI830->BR[13] & 0xffff, 512) >> 2) | (pI830->BR[13] & 0xffff0000); |