diff options
author | Dave Airlie <airlied@redhat.com> | 2007-10-03 11:59:52 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2007-10-03 12:01:37 +1000 |
commit | 566dd3b7d789ba60d0adf33b3f729cfb02ff33cd (patch) | |
tree | e054fdc7cc8b62e18e52bcf491153d762d4267f7 /exa | |
parent | 1df1fee82d3565f6d8cfb91ce25a81c23a10a4b5 (diff) |
exa: add new flags to denote driver handles all pixmap migration/hiding
Diffstat (limited to 'exa')
-rw-r--r-- | exa/exa.c | 7 | ||||
-rw-r--r-- | exa/exa.h | 7 | ||||
-rw-r--r-- | exa/exa_migration.c | 3 |
3 files changed, 13 insertions, 4 deletions
@@ -410,7 +410,7 @@ exaPixmapIsOffscreen(PixmapPtr p) save_ptr = p->devPrivate.ptr; - if (!save_ptr && pExaPixmap) + if (!save_ptr && pExaPixmap && !(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) p->devPrivate.ptr = ExaGetPixmapAddress(p); if (pExaScr->info->PixmapIsOffscreen) @@ -460,7 +460,7 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index) Bool offscreen = exaPixmapIsOffscreen(pPixmap); /* Unhide pixmap pointer */ - if (pPixmap->devPrivate.ptr == NULL) { + if (pPixmap->devPrivate.ptr == NULL && !(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) { pPixmap->devPrivate.ptr = ExaGetPixmapAddress(pPixmap); } @@ -521,8 +521,7 @@ exaFinishAccess(DrawablePtr pDrawable, int index) ExaPixmapPriv (pPixmap); /* Rehide pixmap pointer if we're doing that. */ - if (pExaPixmap) - { + if (pExaPixmap && !(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) { pPixmap->devPrivate.ptr = NULL; } @@ -733,6 +733,13 @@ typedef struct _ExaDriver { * (right-to-left, bottom-to-top). */ #define EXA_TWO_BITBLT_DIRECTIONS (1 << 2) + +/** + * EXA_HANDLES_PIXMAPS indicates to EXA that the driver can handle + * all pixmap addressing and migration. + */ +#define EXA_HANDLES_PIXMAPS (1 << 3) + /** @} */ ExaDriverPtr diff --git a/exa/exa_migration.c b/exa/exa_migration.c index c0e022ca7..7968521c5 100644 --- a/exa/exa_migration.c +++ b/exa/exa_migration.c @@ -553,6 +553,9 @@ exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel) ExaScreenPriv(pScreen); int i, j; + if (pExaScr->info->flags & EXA_HANDLES_PIXMAPS) + return; + /* If this debugging flag is set, check each pixmap for whether it is marked * as clean, and if so, actually check if that's the case. This should help * catch issues with failing to mark a drawable as dirty. While it will |