1 diff -Nru xorg-server-1.4/exa/exa_render.c xorg-server-1.4.b/exa/exa_render.c
2 --- xorg-server-1.4/exa/exa_render.c 2007-08-23 23:04:52.000000000 +0400
3 +++ xorg-server-1.4.b/exa/exa_render.c 2007-09-13 13:32:24.000000000 +0400
5 PixmapPtr pSrcPix, pMaskPix = NULL, pDstPix;
6 struct _Pixmap scratch;
7 ExaMigrationRec pixmaps[3];
10 pSrcPix = exaGetDrawablePixmap(pSrc->pDrawable);
11 pDstPix = exaGetDrawablePixmap(pDst->pDrawable);
16 - if (!pSrcPix && (!pMask || pMaskPix) && pExaScr->info->UploadToScratch) {
18 + * One pixel repeat pixmaps are considered usable for the
19 + * accelerator regardless of their current whereabouts.
20 + * Currently only via/openChrome implements this optimzation?
23 + srcOK = (pSrcPix || (pSrc->pDrawable->height == 1 &&
24 + pSrc->pDrawable->width == 1 &&
27 + maskOK = (!pMask || pMaskPix || (pMask->pDrawable->height == 1 &&
28 + pMask->pDrawable->width == 1 &&
31 + if (!srcOK && maskOK && pExaScr->info->UploadToScratch) {
32 pSrcPix = exaGetDrawablePixmap (pSrc->pDrawable);
33 - if ((*pExaScr->info->UploadToScratch) (pSrcPix, &scratch))
34 + if ((*pExaScr->info->UploadToScratch) (pSrcPix, &scratch)) {
36 - } else if (pSrcPix && pMask && !pMaskPix && pExaScr->info->UploadToScratch) {
41 + } else if (srcOK && !maskOK && pExaScr->info->UploadToScratch) {
42 pMaskPix = exaGetDrawablePixmap (pMask->pDrawable);
43 - if ((*pExaScr->info->UploadToScratch) (pMaskPix, &scratch))
44 + if ((*pExaScr->info->UploadToScratch) (pMaskPix, &scratch)) {
52 - if (!pSrcPix || (pMask && !pMaskPix)) {
53 + if (!srcOK || !maskOK) {
54 REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
59 + pSrcPix = exaGetDrawablePixmap (pSrc->pDrawable);
60 + if (pMask && !pMaskPix)
61 + pMaskPix = exaGetDrawablePixmap (pMask->pDrawable);
63 if (!(*pExaScr->info->PrepareComposite) (op, pSrc, pMask, pDst, pSrcPix,