Improve EXA fallback debugging output to include the locations of pixmaps.

This is being used in tracking down recent compositing performance
    regressions.
This commit is contained in:
Eric Anholt 2006-04-27 20:27:27 +00:00
parent 83b061776a
commit 8738bc295b
5 changed files with 74 additions and 31 deletions

View File

@ -1,3 +1,21 @@
2006-04-27 Eric Anholt <anholt@FreeBSD.org>
* exa/exa_accel.c: (exaCopyNtoN), (exaSolidBoxClipped),
(exaImageGlyphBlt), (exaFillRegionSolid), (exaFillRegionTiled):
* exa/exa_priv.h:
* exa/exa_render.c: (exaCompositeFallbackPictDesc):
* exa/exa_unaccel.c: (exaDrawableLocation), (ExaCheckFillSpans),
(ExaCheckSetSpans), (ExaCheckPutImage), (ExaCheckCopyArea),
(ExaCheckCopyPlane), (ExaCheckPolyPoint), (ExaCheckPolylines),
(ExaCheckPolySegment), (ExaCheckPolyArc), (ExaCheckPolyFillRect),
(ExaCheckImageGlyphBlt), (ExaCheckPolyGlyphBlt),
(ExaCheckPushPixels), (ExaCheckGetImage), (ExaCheckGetSpans),
(ExaCheckSaveAreas), (ExaCheckRestoreAreas), (ExaCheckPaintWindow),
(ExaCheckComposite):
Improve EXA fallback debugging output to include the locations of
pixmaps. This is being used in tracking down recent compositing
performance regressions.
2006-04-27 Eric Anholt <anholt@FreeBSD.org> 2006-04-27 Eric Anholt <anholt@FreeBSD.org>
* exa/exa_accel.c: (exaPolySegment): * exa/exa_accel.c: (exaPolySegment):

View File

@ -432,8 +432,9 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
} }
fallback: fallback:
EXA_FALLBACK(("from 0x%lx to 0x%lx\n", (long)pSrcDrawable, EXA_FALLBACK(("from %p to %p (%c,%c)\n", pSrcDrawable, pDstDrawable,
(long)pDstDrawable)); exaDrawableLocation(pSrcDrawable),
exaDrawableLocation(pDstDrawable)));
exaPrepareAccess (pDstDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDstDrawable, EXA_PREPARE_DEST);
exaPrepareAccess (pSrcDrawable, EXA_PREPARE_SRC); exaPrepareAccess (pSrcDrawable, EXA_PREPARE_SRC);
fbCopyNtoN (pSrcDrawable, pDstDrawable, pGC, fbCopyNtoN (pSrcDrawable, pDstDrawable, pGC,
@ -651,7 +652,6 @@ exaSolidBoxClipped (DrawablePtr pDrawable,
pDrawable->width > pExaScr->info->maxX || pDrawable->width > pExaScr->info->maxX ||
pDrawable->height > pExaScr->info->maxY) pDrawable->height > pExaScr->info->maxY)
{ {
EXA_FALLBACK(("to 0x%lx\n", (long)pDrawable));
exaDoMigration (pixmaps, 1, FALSE); exaDoMigration (pixmaps, 1, FALSE);
goto fallback; goto fallback;
} else { } else {
@ -662,7 +662,8 @@ exaSolidBoxClipped (DrawablePtr pDrawable,
!(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg)) !(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg))
{ {
fallback: fallback:
EXA_FALLBACK(("to 0x%lx\n", (long)pDrawable)); EXA_FALLBACK(("to %p (%c)\n", pDrawable,
exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
fg = fbReplicatePixel (fg, pDrawable->bitsPerPixel); fg = fbReplicatePixel (fg, pDrawable->bitsPerPixel);
fbSolidBoxClipped (pDrawable, pClip, x1, y1, x2, y2, fbSolidBoxClipped (pDrawable, pClip, x1, y1, x2, y2,
@ -788,7 +789,7 @@ exaImageGlyphBlt (DrawablePtr pDrawable,
opaque = FALSE; opaque = FALSE;
} }
EXA_FALLBACK(("to 0x%lx\n", (long)pDrawable)); EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
exaPrepareAccessGC (pGC); exaPrepareAccessGC (pGC);
@ -938,7 +939,8 @@ exaFillRegionSolid (DrawablePtr pDrawable,
else else
{ {
fallback: fallback:
EXA_FALLBACK(("to 0x%lx\n", (long)pDrawable)); EXA_FALLBACK(("to %p (%c)\n", pDrawable,
exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
fbFillRegionSolid (pDrawable, pRegion, 0, fbFillRegionSolid (pDrawable, pRegion, 0,
fbReplicatePixel (pixel, pDrawable->bitsPerPixel)); fbReplicatePixel (pixel, pDrawable->bitsPerPixel));
@ -1045,7 +1047,9 @@ exaFillRegionTiled (DrawablePtr pDrawable,
} }
fallback: fallback:
EXA_FALLBACK(("from 0x%lx to 0x%lx\n", (long)pTile, (long)pDrawable)); EXA_FALLBACK(("from %p to %p (%c,%c)\n", pTile, pDrawable,
exaDrawableLocation(&pTile->drawable),
exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
exaPrepareAccess ((DrawablePtr)pTile, EXA_PREPARE_SRC); exaPrepareAccess ((DrawablePtr)pTile, EXA_PREPARE_SRC);
fbFillRegionTiled (pDrawable, pRegion, pTile); fbFillRegionTiled (pDrawable, pRegion, pTile);

View File

@ -63,6 +63,9 @@ do { \
ErrorF("EXA fallback at %s: ", __FUNCTION__); \ ErrorF("EXA fallback at %s: ", __FUNCTION__); \
ErrorF x; \ ErrorF x; \
} while (0) } while (0)
char
exaDrawableLocation(DrawablePtr pDrawable);
#else #else
#define EXA_FALLBACK(x) #define EXA_FALLBACK(x)
#endif #endif

View File

@ -74,7 +74,7 @@ static void exaCompositeFallbackPictDesc(PicturePtr pict, char *string, int n)
pict->pDrawable->height, pict->repeat ? pict->pDrawable->height, pict->repeat ?
" R" : ""); " R" : "");
snprintf(string, n, "0x%lx:%c fmt %s (%s)", (long)pict->pDrawable, loc, format, size); snprintf(string, n, "%p:%c fmt %s (%s)", pict->pDrawable, loc, format, size);
} }
static void static void

View File

@ -53,11 +53,19 @@ exaFinishAccessGC(GCPtr pGC)
exaFinishAccess(&pGC->tile.pixmap->drawable, EXA_PREPARE_SRC); exaFinishAccess(&pGC->tile.pixmap->drawable, EXA_PREPARE_SRC);
} }
#if DEBUG_TRACE_FALL
char
exaDrawableLocation(DrawablePtr pDrawable)
{
return exaDrawableIsOffscreen(pDrawable) ? 's' : 'm';
}
#endif /* DEBUG_TRACE_FALL */
void void
ExaCheckFillSpans (DrawablePtr pDrawable, GCPtr pGC, int nspans, ExaCheckFillSpans (DrawablePtr pDrawable, GCPtr pGC, int nspans,
DDXPointPtr ppt, int *pwidth, int fSorted) DDXPointPtr ppt, int *pwidth, int fSorted)
{ {
EXA_FALLBACK(("to 0x%lx\n", (long)pDrawable)); EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
exaPrepareAccessGC (pGC); exaPrepareAccessGC (pGC);
fbFillSpans (pDrawable, pGC, nspans, ppt, pwidth, fSorted); fbFillSpans (pDrawable, pGC, nspans, ppt, pwidth, fSorted);
@ -69,7 +77,7 @@ void
ExaCheckSetSpans (DrawablePtr pDrawable, GCPtr pGC, char *psrc, ExaCheckSetSpans (DrawablePtr pDrawable, GCPtr pGC, char *psrc,
DDXPointPtr ppt, int *pwidth, int nspans, int fSorted) DDXPointPtr ppt, int *pwidth, int nspans, int fSorted)
{ {
EXA_FALLBACK(("to 0x%lx\n", (long)pDrawable)); EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
fbSetSpans (pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted); fbSetSpans (pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted);
exaFinishAccess (pDrawable, EXA_PREPARE_DEST); exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
@ -80,7 +88,7 @@ ExaCheckPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth,
int x, int y, int w, int h, int leftPad, int format, int x, int y, int w, int h, int leftPad, int format,
char *bits) char *bits)
{ {
EXA_FALLBACK(("to 0x%lx\n", (long)pDrawable)); EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
fbPutImage (pDrawable, pGC, depth, x, y, w, h, leftPad, format, bits); fbPutImage (pDrawable, pGC, depth, x, y, w, h, leftPad, format, bits);
exaFinishAccess (pDrawable, EXA_PREPARE_DEST); exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
@ -92,7 +100,8 @@ ExaCheckCopyArea (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
{ {
RegionPtr ret; RegionPtr ret;
EXA_FALLBACK(("from 0x%lx to 0x%lx\n", (long)pSrc, (long)pDst)); EXA_FALLBACK(("from %p to %p (%c,%c)\n", pSrc, pDst,
exaDrawableLocation(pSrc), exaDrawableLocation(pDst)));
exaPrepareAccess (pDst, EXA_PREPARE_DEST); exaPrepareAccess (pDst, EXA_PREPARE_DEST);
exaPrepareAccess (pSrc, EXA_PREPARE_SRC); exaPrepareAccess (pSrc, EXA_PREPARE_SRC);
ret = fbCopyArea (pSrc, pDst, pGC, srcx, srcy, w, h, dstx, dsty); ret = fbCopyArea (pSrc, pDst, pGC, srcx, srcy, w, h, dstx, dsty);
@ -109,7 +118,8 @@ ExaCheckCopyPlane (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
{ {
RegionPtr ret; RegionPtr ret;
EXA_FALLBACK(("from 0x%lx to 0x%lx\n", (long)pSrc, (long)pDst)); EXA_FALLBACK(("from %p to %p (%c,%c)\n", pSrc, pDst,
exaDrawableLocation(pSrc), exaDrawableLocation(pDst)));
exaPrepareAccess (pDst, EXA_PREPARE_DEST); exaPrepareAccess (pDst, EXA_PREPARE_DEST);
exaPrepareAccess (pSrc, EXA_PREPARE_SRC); exaPrepareAccess (pSrc, EXA_PREPARE_SRC);
ret = fbCopyPlane (pSrc, pDst, pGC, srcx, srcy, w, h, dstx, dsty, ret = fbCopyPlane (pSrc, pDst, pGC, srcx, srcy, w, h, dstx, dsty,
@ -124,7 +134,7 @@ void
ExaCheckPolyPoint (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, ExaCheckPolyPoint (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
DDXPointPtr pptInit) DDXPointPtr pptInit)
{ {
EXA_FALLBACK(("to 0x%lx\n", (long)pDrawable)); EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
fbPolyPoint (pDrawable, pGC, mode, npt, pptInit); fbPolyPoint (pDrawable, pGC, mode, npt, pptInit);
exaFinishAccess (pDrawable, EXA_PREPARE_DEST); exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
@ -134,7 +144,8 @@ void
ExaCheckPolylines (DrawablePtr pDrawable, GCPtr pGC, ExaCheckPolylines (DrawablePtr pDrawable, GCPtr pGC,
int mode, int npt, DDXPointPtr ppt) int mode, int npt, DDXPointPtr ppt)
{ {
EXA_FALLBACK(("to 0x%lx, width %d, mode %d, count %d\n", (long)pDrawable, EXA_FALLBACK(("to %p (%c), width %d, mode %d, count %d\n",
pDrawable, exaDrawableLocation(pDrawable),
pGC->lineWidth, mode, npt)); pGC->lineWidth, mode, npt));
if (pGC->lineWidth == 0) { if (pGC->lineWidth == 0) {
@ -153,8 +164,8 @@ void
ExaCheckPolySegment (DrawablePtr pDrawable, GCPtr pGC, ExaCheckPolySegment (DrawablePtr pDrawable, GCPtr pGC,
int nsegInit, xSegment *pSegInit) int nsegInit, xSegment *pSegInit)
{ {
EXA_FALLBACK(("to 0x%lx width %d, count %d\n", (long)pDrawable, EXA_FALLBACK(("to %p (%c) width %d, count %d\n", pDrawable,
pGC->lineWidth, nsegInit)); exaDrawableLocation(pDrawable), pGC->lineWidth, nsegInit));
if (pGC->lineWidth == 0) { if (pGC->lineWidth == 0) {
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
exaPrepareAccessGC (pGC); exaPrepareAccessGC (pGC);
@ -171,7 +182,7 @@ void
ExaCheckPolyArc (DrawablePtr pDrawable, GCPtr pGC, ExaCheckPolyArc (DrawablePtr pDrawable, GCPtr pGC,
int narcs, xArc *pArcs) int narcs, xArc *pArcs)
{ {
EXA_FALLBACK(("to 0x%lx\n", (long)pDrawable)); EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
if (pGC->lineWidth == 0) if (pGC->lineWidth == 0)
{ {
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
@ -188,7 +199,7 @@ void
ExaCheckPolyFillRect (DrawablePtr pDrawable, GCPtr pGC, ExaCheckPolyFillRect (DrawablePtr pDrawable, GCPtr pGC,
int nrect, xRectangle *prect) int nrect, xRectangle *prect)
{ {
EXA_FALLBACK(("to 0x%lx\n", (long)pDrawable)); EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
exaPrepareAccessGC (pGC); exaPrepareAccessGC (pGC);
fbPolyFillRect (pDrawable, pGC, nrect, prect); fbPolyFillRect (pDrawable, pGC, nrect, prect);
@ -201,7 +212,8 @@ ExaCheckImageGlyphBlt (DrawablePtr pDrawable, GCPtr pGC,
int x, int y, unsigned int nglyph, int x, int y, unsigned int nglyph,
CharInfoPtr *ppci, pointer pglyphBase) CharInfoPtr *ppci, pointer pglyphBase)
{ {
EXA_FALLBACK(("to 0x%lx\n", (long)pDrawable)); EXA_FALLBACK(("to %p (%c)\n", pDrawable,
exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
exaPrepareAccessGC (pGC); exaPrepareAccessGC (pGC);
fbImageGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); fbImageGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
@ -214,8 +226,8 @@ ExaCheckPolyGlyphBlt (DrawablePtr pDrawable, GCPtr pGC,
int x, int y, unsigned int nglyph, int x, int y, unsigned int nglyph,
CharInfoPtr *ppci, pointer pglyphBase) CharInfoPtr *ppci, pointer pglyphBase)
{ {
EXA_FALLBACK(("to 0x%lx, style %d alu %d\n", (long)pDrawable, EXA_FALLBACK(("to %p (%c), style %d alu %d\n", pDrawable,
pGC->fillStyle, pGC->alu)); exaDrawableLocation(pDrawable), pGC->fillStyle, pGC->alu));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
exaPrepareAccessGC (pGC); exaPrepareAccessGC (pGC);
fbPolyGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); fbPolyGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
@ -228,7 +240,9 @@ ExaCheckPushPixels (GCPtr pGC, PixmapPtr pBitmap,
DrawablePtr pDrawable, DrawablePtr pDrawable,
int w, int h, int x, int y) int w, int h, int x, int y)
{ {
EXA_FALLBACK(("from 0x%lx to 0x%lx\n", (long)pBitmap, (long)pDrawable)); EXA_FALLBACK(("from %p to %p (%c,%c)\n", pBitmap, pDrawable,
exaDrawableLocation(&pBitmap->drawable),
exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
exaPrepareAccessGC (pGC); exaPrepareAccessGC (pGC);
fbPushPixels (pGC, pBitmap, pDrawable, w, h, x, y); fbPushPixels (pGC, pBitmap, pDrawable, w, h, x, y);
@ -242,7 +256,8 @@ ExaCheckGetImage (DrawablePtr pDrawable,
unsigned int format, unsigned long planeMask, unsigned int format, unsigned long planeMask,
char *d) char *d)
{ {
EXA_FALLBACK(("from 0x%lx\n", (long)pDrawable)); EXA_FALLBACK(("from %p (%c)\n", pDrawable,
exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_SRC); exaPrepareAccess (pDrawable, EXA_PREPARE_SRC);
fbGetImage (pDrawable, x, y, w, h, format, planeMask, d); fbGetImage (pDrawable, x, y, w, h, format, planeMask, d);
exaFinishAccess (pDrawable, EXA_PREPARE_SRC); exaFinishAccess (pDrawable, EXA_PREPARE_SRC);
@ -256,7 +271,7 @@ ExaCheckGetSpans (DrawablePtr pDrawable,
int nspans, int nspans,
char *pdstStart) char *pdstStart)
{ {
EXA_FALLBACK(("from 0x%lx\n", (long)pDrawable)); EXA_FALLBACK(("from %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_SRC); exaPrepareAccess (pDrawable, EXA_PREPARE_SRC);
fbGetSpans (pDrawable, wMax, ppt, pwidth, nspans, pdstStart); fbGetSpans (pDrawable, wMax, ppt, pwidth, nspans, pdstStart);
exaFinishAccess (pDrawable, EXA_PREPARE_SRC); exaFinishAccess (pDrawable, EXA_PREPARE_SRC);
@ -269,7 +284,8 @@ ExaCheckSaveAreas (PixmapPtr pPixmap,
int yorg, int yorg,
WindowPtr pWin) WindowPtr pWin)
{ {
EXA_FALLBACK(("from 0x%lx\n", (long)&pPixmap->drawable)); EXA_FALLBACK(("from %p (%c)\n", &pPixmap->drawable,
exaDrawableLocation(&pPixmap->drawable)));
exaPrepareAccess ((DrawablePtr)pPixmap, EXA_PREPARE_DEST); exaPrepareAccess ((DrawablePtr)pPixmap, EXA_PREPARE_DEST);
fbSaveAreas (pPixmap, prgnSave, xorg, yorg, pWin); fbSaveAreas (pPixmap, prgnSave, xorg, yorg, pWin);
exaFinishAccess ((DrawablePtr)pPixmap, EXA_PREPARE_DEST); exaFinishAccess ((DrawablePtr)pPixmap, EXA_PREPARE_DEST);
@ -282,7 +298,8 @@ ExaCheckRestoreAreas (PixmapPtr pPixmap,
int yorg, int yorg,
WindowPtr pWin) WindowPtr pWin)
{ {
EXA_FALLBACK(("to 0x%lx\n", (long)&pPixmap->drawable)); EXA_FALLBACK(("to %p (%c)\n", &pPixmap->drawable,
exaDrawableLocation(&pPixmap->drawable)));
exaPrepareAccess ((DrawablePtr)pPixmap, EXA_PREPARE_DEST); exaPrepareAccess ((DrawablePtr)pPixmap, EXA_PREPARE_DEST);
fbRestoreAreas (pPixmap, prgnSave, xorg, yorg, pWin); fbRestoreAreas (pPixmap, prgnSave, xorg, yorg, pWin);
exaFinishAccess ((DrawablePtr)pPixmap, EXA_PREPARE_DEST); exaFinishAccess ((DrawablePtr)pPixmap, EXA_PREPARE_DEST);
@ -296,7 +313,8 @@ ExaCheckRestoreAreas (PixmapPtr pPixmap,
void void
ExaCheckPaintWindow (WindowPtr pWin, RegionPtr pRegion, int what) ExaCheckPaintWindow (WindowPtr pWin, RegionPtr pRegion, int what)
{ {
EXA_FALLBACK(("from 0x%lx\n", (long)pWin)); EXA_FALLBACK(("from %p (%c)\n", pWin,
exaDrawableLocation(&pWin->drawable)));
exaPrepareAccess (&pWin->drawable, EXA_PREPARE_DEST); exaPrepareAccess (&pWin->drawable, EXA_PREPARE_DEST);
fbPaintWindow (pWin, pRegion, what); fbPaintWindow (pWin, pRegion, what);
exaFinishAccess (&pWin->drawable, EXA_PREPARE_DEST); exaFinishAccess (&pWin->drawable, EXA_PREPARE_DEST);
@ -316,8 +334,8 @@ ExaCheckComposite (CARD8 op,
CARD16 width, CARD16 width,
CARD16 height) CARD16 height)
{ {
EXA_FALLBACK(("from picts 0x%lx/0x%lx to pict 0x%lx\n", EXA_FALLBACK(("from picts %p/%p to pict %p\n",
(long)pSrc, (long)pMask, (long)pDst)); pSrc, pMask, pDst));
exaPrepareAccess (pDst->pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDst->pDrawable, EXA_PREPARE_DEST);
if (pSrc->pDrawable != NULL) if (pSrc->pDrawable != NULL)
exaPrepareAccess (pSrc->pDrawable, EXA_PREPARE_SRC); exaPrepareAccess (pSrc->pDrawable, EXA_PREPARE_SRC);