diff options
Diffstat (limited to 'exa')
-rw-r--r-- | exa/exa.c | 15 | ||||
-rw-r--r-- | exa/exa_priv.h | 1 |
2 files changed, 16 insertions, 0 deletions
@@ -675,6 +675,18 @@ exaBitmapToRegion(PixmapPtr pPix) return ret; } +static miCopyProc +exaGetCopyAreaFunction(DrawablePtr pSrc, + DrawablePtr pDst) +{ + ExaScreenPriv (pDst->pScreen); + + if (pExaScr->fallback_counter || pExaScr->swappedOut) + return ExaCheckCopyNtoN; + else + return exaCopyNtoN; +} + static Bool exaCreateScreenResources(ScreenPtr pScreen) { @@ -788,6 +800,8 @@ exaCloseScreen(ScreenPtr pScreen) unwrap(pExaScr, pScreen, SharePixmapBacking); if (pExaScr->SavedSetSharedPixmapBacking) unwrap(pExaScr, pScreen, SetSharedPixmapBacking); + if (pExaScr->SavedGetCopyAreaFunction) + unwrap(pExaScr, pScreen, GetCopyAreaFunction); unwrap(pExaScr, ps, Composite); if (pExaScr->SavedGlyphs) unwrap(pExaScr, ps, Glyphs); @@ -944,6 +958,7 @@ exaDriverInit(ScreenPtr pScreen, ExaDriverPtr pScreenInfo) wrap(pExaScr, pScreen, ChangeWindowAttributes, exaChangeWindowAttributes); wrap(pExaScr, pScreen, BitmapToRegion, exaBitmapToRegion); wrap(pExaScr, pScreen, CreateScreenResources, exaCreateScreenResources); + wrap(pExaScr, pScreen, GetCopyAreaFunction, exaGetCopyAreaFunction); if (ps) { wrap(pExaScr, ps, Composite, exaComposite); diff --git a/exa/exa_priv.h b/exa/exa_priv.h index 77a96986d..687b52c3b 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -171,6 +171,7 @@ typedef struct { GlyphsProcPtr SavedGlyphs; TrapezoidsProcPtr SavedTrapezoids; AddTrapsProcPtr SavedAddTraps; + GetCopyAreaFunctionProcPtr SavedGetCopyAreaFunction; void (*do_migration) (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel); Bool (*pixmap_has_gpu_copy) (PixmapPtr pPixmap); |