diff options
author | Michel Dänzer <michel@tungstengraphics.com> | 2007-08-29 19:55:22 +0200 |
---|---|---|
committer | Michel Dänzer <michel@tungstengraphics.com> | 2007-09-07 18:41:30 +0200 |
commit | 962eddd7a2863a8475f5fd8107d3112df08d1172 (patch) | |
tree | 2f4c41c22919c6522d8fc43860e69a1560d5a1fe /exa/exa_render.c | |
parent | f27931bdd26fc9a1e6bb5173b5537e32c51a98b3 (diff) |
EXA: Support partial migration of pixmap contents between Sys and FB.
The initiator of migration can pass in a region that defines the relevant area
of each source pixmap or the irrelevant area of the destination pixmap. By
default, the pending damage region is assumed relevant for the destination
pixmap, and everything for source pixmaps.
Thanks to Jarno Manninen for reassuring me that my own ideas for this were
feasible and for providing additional ideas.
Diffstat (limited to 'exa/exa_render.c')
-rw-r--r-- | exa/exa_render.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/exa/exa_render.c b/exa/exa_render.c index 738ac15b1..067f88b89 100644 --- a/exa/exa_render.c +++ b/exa/exa_render.c @@ -267,6 +267,7 @@ exaTryDriverSolidFill(PicturePtr pSrc, pixmaps[0].as_dst = TRUE; pixmaps[0].as_src = FALSE; pixmaps[0].pPix = exaGetDrawablePixmap (pDst->pDrawable); + pixmaps[0].pReg = NULL; exaDoMigration(pixmaps, 1, TRUE); pDstPix = exaGetOffscreenPixmap (pDst->pDrawable, &dst_off_x, &dst_off_y); @@ -381,13 +382,16 @@ exaTryDriverComposite(CARD8 op, pixmaps[0].as_dst = TRUE; pixmaps[0].as_src = exaOpReadsDestination(op); pixmaps[0].pPix = exaGetDrawablePixmap (pDst->pDrawable); + pixmaps[0].pReg = NULL; pixmaps[1].as_dst = FALSE; pixmaps[1].as_src = TRUE; pixmaps[1].pPix = exaGetDrawablePixmap (pSrc->pDrawable); + pixmaps[1].pReg = NULL; if (pMask) { pixmaps[2].as_dst = FALSE; pixmaps[2].as_src = TRUE; pixmaps[2].pPix = exaGetDrawablePixmap (pMask->pDrawable); + pixmaps[2].pReg = NULL; exaDoMigration(pixmaps, 3, TRUE); } else { exaDoMigration(pixmaps, 2, TRUE); @@ -579,12 +583,14 @@ exaComposite(CARD8 op, pixmaps[0].as_dst = TRUE; pixmaps[0].as_src = exaOpReadsDestination(op); pixmaps[0].pPix = exaGetDrawablePixmap (pDst->pDrawable); + pixmaps[0].pReg = NULL; if (pSrc->pDrawable) { pSrcPixmap = exaGetDrawablePixmap (pSrc->pDrawable); pixmaps[npixmaps].as_dst = FALSE; pixmaps[npixmaps].as_src = TRUE; pixmaps[npixmaps].pPix = pSrcPixmap; + pixmaps[npixmaps].pReg = NULL; npixmaps++; } @@ -592,6 +598,7 @@ exaComposite(CARD8 op, pixmaps[npixmaps].as_dst = FALSE; pixmaps[npixmaps].as_src = TRUE; pixmaps[npixmaps].pPix = exaGetDrawablePixmap (pMask->pDrawable); + pixmaps[npixmaps].pReg = NULL; npixmaps++; } @@ -1159,8 +1166,9 @@ exaGlyphs (CARD8 op, * it'll stick there. */ pixmaps[0].as_dst = TRUE; - pixmaps[0].as_src = TRUE; + pixmaps[0].as_src = FALSE; pixmaps[0].pPix = pPixmap; + pixmaps[0].pReg = NULL; exaDoMigration (pixmaps, 1, pExaScr->info->PrepareComposite != NULL); while (n--) |