summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-10-21 02:20:22 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2011-10-21 16:11:15 +0100
commite9a193e9803bb69fc4a7e712f33a36ba395b3c89 (patch)
tree42c8594905c487280efabf4a5a98491209268cf7
parent662402e41e5c7976002a71a7f961ca97c771b1f3 (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.h15
-rw-r--r--src/sna/sna_accel.c3
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);