diff options
author | Dave Airlie <airlied@redhat.com> | 2012-06-14 15:24:46 +0100 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-07-07 10:37:11 +0100 |
commit | 9b8217f9ef6279fff6628631d18497bed0343ef9 (patch) | |
tree | 2c7a3d271aff66bb12c05e93700ee460ee7168ae /include | |
parent | c5cc2a8243c5e6bf454af989b7512ec7e20fc3f2 (diff) |
dix/pixmap: track dirty pixmaps in server. (v4)
This adds two functions for drivers to use directly to keep a
linked list of slave pixmaps to do damage tracking on and keep
updated. It also adds a helper function that drivers may optionally
call to do a simple copy area damage update.
v2: use damage.h not damagestr.h, fixes ephyr build.
v3: address ajax review: use slave_dst, drop unused dst member.
v4: check DamageCreate return, add SourceValidate comment,
add a comment addressing possible optimisation possibility
Reviewed-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/pixmap.h | 16 | ||||
-rw-r--r-- | include/pixmapstr.h | 8 | ||||
-rw-r--r-- | include/scrnintstr.h | 2 |
3 files changed, 26 insertions, 0 deletions
diff --git a/include/pixmap.h b/include/pixmap.h index 8c523bdd9..921a94d1e 100644 --- a/include/pixmap.h +++ b/include/pixmap.h @@ -49,6 +49,7 @@ SOFTWARE. #include "misc.h" #include "screenint.h" +#include "regionstr.h" /* types for Drawable */ #define DRAWABLE_WINDOW 0 @@ -73,6 +74,8 @@ SOFTWARE. typedef struct _Drawable *DrawablePtr; typedef struct _Pixmap *PixmapPtr; +typedef struct _PixmapDirtyUpdate *PixmapDirtyUpdatePtr; + typedef union _PixUnion { PixmapPtr pixmap; unsigned long pixel; @@ -112,4 +115,17 @@ extern _X_EXPORT void FreePixmap(PixmapPtr /*pPixmap */ ); extern _X_EXPORT PixmapPtr PixmapShareToSlave(PixmapPtr pixmap, ScreenPtr slave); +extern _X_EXPORT Bool +PixmapStartDirtyTracking(PixmapPtr src, + PixmapPtr slave_dst, + int x, int y); + +extern _X_EXPORT Bool +PixmapStopDirtyTracking(PixmapPtr src, PixmapPtr slave_dst); + +/* helper function, drivers can do this themselves if they can do it more + efficently */ +extern _X_EXPORT Bool +PixmapSyncDirtyHelper(PixmapDirtyUpdatePtr dirty, RegionPtr dirty_region); + #endif /* PIXMAP_H */ diff --git a/include/pixmapstr.h b/include/pixmapstr.h index 40af5c4a3..2a1ef9b85 100644 --- a/include/pixmapstr.h +++ b/include/pixmapstr.h @@ -50,6 +50,7 @@ SOFTWARE. #include "screenint.h" #include "regionstr.h" #include "privates.h" +#include "damage.h" typedef struct _Drawable { unsigned char type; /* DRAWABLE_<type> */ @@ -84,6 +85,13 @@ typedef struct _Pixmap { PixmapPtr master_pixmap; /* pointer to master copy of pixmap for pixmap sharing */ } PixmapRec; +typedef struct _PixmapDirtyUpdate { + PixmapPtr src, slave_dst; + int x, y; + DamagePtr damage; + struct xorg_list ent; +} PixmapDirtyUpdateRec; + static inline void PixmapBox(BoxPtr box, PixmapPtr pixmap) { diff --git a/include/scrnintstr.h b/include/scrnintstr.h index 3a738d3b0..5ef37ed9a 100644 --- a/include/scrnintstr.h +++ b/include/scrnintstr.h @@ -505,6 +505,8 @@ typedef struct _Screen { StartPixmapTrackingProcPtr StartPixmapTracking; StopPixmapTrackingProcPtr StopPixmapTracking; + + struct xorg_list pixmap_dirty_list; } ScreenRec; static inline RegionPtr |