diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-10-21 02:20:22 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-10-21 16:11:15 +0100 |
commit | e9a193e9803bb69fc4a7e712f33a36ba395b3c89 (patch) | |
tree | 42c8594905c487280efabf4a5a98491209268cf7 | |
parent | 662402e41e5c7976002a71a7f961ca97c771b1f3 (diff) |
sna: Short-circuit GetWindowPixmap() to speed-up pixmap retrieval
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/sna.h | 15 | ||||
-rw-r--r-- | src/sna/sna_accel.c | 3 |
2 files changed, 15 insertions, 3 deletions
diff --git a/src/sna/sna.h b/src/sna/sna.h index e67e2271..ec4429de 100644 --- a/src/sna/sna.h +++ b/src/sna/sna.h @@ -145,14 +145,23 @@ struct sna_pixmap { uint8_t gpu :1; }; -static inline PixmapPtr get_drawable_pixmap(DrawablePtr drawable) +extern DevPrivateKey sna_window_key; + +static inline PixmapPtr get_window_pixmap(WindowPtr window) { - ScreenPtr screen = drawable->pScreen; +#if 0 + return window->drawable.pScreen->GetWindowPixmap(window) +#else + return dixGetPrivate(&window->devPrivates, sna_window_key); +#endif +} +static inline PixmapPtr get_drawable_pixmap(DrawablePtr drawable) +{ if (drawable->type == DRAWABLE_PIXMAP) return (PixmapPtr)drawable; else - return screen->GetWindowPixmap((WindowPtr)drawable); + return get_window_pixmap((WindowPtr)drawable); } extern DevPrivateKeyRec sna_pixmap_index; diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index d818d2c0..e3d2779c 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -62,6 +62,7 @@ #define USE_SPANS 0 DevPrivateKeyRec sna_pixmap_index; +DevPrivateKey sna_window_key; static inline void region_set(RegionRec *r, const BoxRec *b) { @@ -4157,6 +4158,8 @@ Bool sna_accel_init(ScreenPtr screen, struct sna *sna) if (!sna_glyphs_init(screen)) return FALSE; + sna_window_key = fbGetWinPrivateKey(); + list_init(&sna->dirty_pixmaps); list_init(&sna->deferred_free); |