diff options
author | Tilman Sauerbeck <tilman@code-monkey.de> | 2008-04-14 11:43:51 +0200 |
---|---|---|
committer | Tilman Sauerbeck <tilman@code-monkey.de> | 2008-04-14 12:48:13 +0200 |
commit | f133d85778462134f366389bde7673bff7845fa8 (patch) | |
tree | a39600618dfc281d55caa2ab27189b58b405b4c7 | |
parent | bb8868540f017b121d698da45e552ffb55a57cea (diff) |
EXA: Update pixmaps' accel_blocked field in ModifyPixmapHeader.
-rw-r--r-- | exa/exa.c | 53 |
1 files changed, 32 insertions, 21 deletions
@@ -224,6 +224,30 @@ exaLog2(int val) return bits - 1; } +static void +exaSetAccelBlock(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap, + int w, int h, int bpp) +{ + pExaPixmap->accel_blocked = 0; + + if (pExaScr->info->maxPitchPixels) { + int max_pitch = pExaScr->info->maxPitchPixels * (bpp + 7) / 8; + + if (pExaPixmap->fb_pitch > max_pitch) + pExaPixmap->accel_blocked |= EXA_RANGE_PITCH; + } + + if (pExaScr->info->maxPitchBytes && + pExaPixmap->fb_pitch > pExaScr->info->maxPitchBytes) + pExaPixmap->accel_blocked |= EXA_RANGE_PITCH; + + if (w > pExaScr->info->maxX) + pExaPixmap->accel_blocked |= EXA_RANGE_WIDTH; + + if (h > pExaScr->info->maxY) + pExaPixmap->accel_blocked |= EXA_RANGE_HEIGHT; +} + /** * exaCreatePixmap() creates a new pixmap. * @@ -339,25 +363,8 @@ exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth, REGION_NULL(pScreen, &pExaPixmap->validSys); REGION_NULL(pScreen, &pExaPixmap->validFB); - /* Check whether this pixmap can be used for acceleration. */ - pExaPixmap->accel_blocked = 0; - - if (pExaScr->info->maxPitchPixels) { - int max_pitch = pExaScr->info->maxPitchPixels * (bpp + 7) / 8; - - if (pExaPixmap->fb_pitch > max_pitch) - pExaPixmap->accel_blocked |= EXA_RANGE_PITCH; - } - - if (pExaScr->info->maxPitchBytes && - pExaPixmap->fb_pitch > pExaScr->info->maxPitchBytes) - pExaPixmap->accel_blocked |= EXA_RANGE_PITCH; - - if (w > pExaScr->info->maxX) - pExaPixmap->accel_blocked |= EXA_RANGE_WIDTH; - - if (h > pExaScr->info->maxY) - pExaPixmap->accel_blocked |= EXA_RANGE_HEIGHT; + exaSetAccelBlock(pExaScr, pExaPixmap, + w, h, bpp); return pPixmap; } @@ -373,12 +380,16 @@ exaModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth, if (!pPixmap) return FALSE; + pExaScr = ExaGetScreenPriv(pPixmap->drawable.pScreen); pExaPixmap = ExaGetPixmapPriv(pPixmap); - if (pExaPixmap) + if (pExaPixmap) { pExaPixmap->sys_ptr = pPixData; - pExaScr = ExaGetScreenPriv(pPixmap->drawable.pScreen); + exaSetAccelBlock(pExaScr, pExaPixmap, + width, height, bitsPerPixel); + } + if (pExaScr->info->ModifyPixmapHeader) { ret = pExaScr->info->ModifyPixmapHeader(pPixmap, width, height, depth, |