summaryrefslogtreecommitdiff
path: root/exa
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2007-10-03 11:59:52 +1000
committerDave Airlie <airlied@redhat.com>2007-10-03 12:01:37 +1000
commit566dd3b7d789ba60d0adf33b3f729cfb02ff33cd (patch)
treee054fdc7cc8b62e18e52bcf491153d762d4267f7 /exa
parent1df1fee82d3565f6d8cfb91ce25a81c23a10a4b5 (diff)
exa: add new flags to denote driver handles all pixmap migration/hiding
Diffstat (limited to 'exa')
-rw-r--r--exa/exa.c7
-rw-r--r--exa/exa.h7
-rw-r--r--exa/exa_migration.c3
3 files changed, 13 insertions, 4 deletions
diff --git a/exa/exa.c b/exa/exa.c
index 8a4b8c114..7ad226fba 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -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;
}
diff --git a/exa/exa.h b/exa/exa.h
index f852df482..1ff0518e4 100644
--- a/exa/exa.h
+++ b/exa/exa.h
@@ -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