Initial commit contains ebuild for xf86-video-openchrome driver and modified ebuilds for
[openchrome.git] / x11-base / xorg-server / files / 1.4-transparent-accel.patch
blob7053d099d82f7797017595397ce11cc0e31f1db9
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
4 @@ -335,6 +335,7 @@
5 PixmapPtr pSrcPix, pMaskPix = NULL, pDstPix;
6 struct _Pixmap scratch;
7 ExaMigrationRec pixmaps[3];
8 + Bool srcOK, maskOK;
10 pSrcPix = exaGetDrawablePixmap(pSrc->pDrawable);
11 pDstPix = exaGetDrawablePixmap(pDst->pDrawable);
12 @@ -404,21 +405,48 @@
13 return 0;
16 - if (!pSrcPix && (!pMask || pMaskPix) && pExaScr->info->UploadToScratch) {
17 + /*
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?
21 + */
23 + srcOK = (pSrcPix || (pSrc->pDrawable->height == 1 &&
24 + pSrc->pDrawable->width == 1 &&
25 + pSrc->repeat));
27 + maskOK = (!pMask || pMaskPix || (pMask->pDrawable->height == 1 &&
28 + pMask->pDrawable->width == 1 &&
29 + pMask->repeat));
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)) {
35 pSrcPix = &scratch;
36 - } else if (pSrcPix && pMask && !pMaskPix && pExaScr->info->UploadToScratch) {
37 + srcOK = TRUE;
38 + } else {
39 + pSrcPix = NULL;
40 + }
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)) {
45 pMaskPix = &scratch;
46 + maskOK = TRUE;
47 + } else {
48 + pMaskPix = NULL;
49 + }
52 - if (!pSrcPix || (pMask && !pMaskPix)) {
53 + if (!srcOK || !maskOK) {
54 REGION_UNINIT(pDst->pDrawable->pScreen, &region);
55 return 0;
58 + if (!pSrcPix)
59 + pSrcPix = exaGetDrawablePixmap (pSrc->pDrawable);
60 + if (pMask && !pMaskPix)
61 + pMaskPix = exaGetDrawablePixmap (pMask->pDrawable);
63 if (!(*pExaScr->info->PrepareComposite) (op, pSrc, pMask, pDst, pSrcPix,
64 pMaskPix, pDstPix))