summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-01-03 12:46:40 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-01-03 21:35:03 +0000
commitbd7aa1754dcf9d58d7deb92d99da9b78c91a0eb2 (patch)
tree135c1f92a95749d46bd27deeefedc0f9ed84352b
parent294c8791c435acf5933109fbcab85623a55b2c6c (diff)
sna: Avoid unnecessary call overhead for read-only move-to-cpu
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/sna.h12
-rw-r--r--src/sna/sna_accel.c4
2 files changed, 13 insertions, 3 deletions
diff --git a/src/sna/sna.h b/src/sna/sna.h
index feba5b50..f23e6e53 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -433,7 +433,17 @@ struct kgem_bo *sna_pixmap_change_tiling(PixmapPtr pixmap, uint32_t tiling);
#define MOVE_WRITE 0x1
#define MOVE_READ 0x2
-bool must_check sna_pixmap_move_to_cpu(PixmapPtr pixmap, unsigned flags);
+bool must_check _sna_pixmap_move_to_cpu(PixmapPtr pixmap, unsigned flags);
+static inline bool must_check sna_pixmap_move_to_cpu(PixmapPtr pixmap, unsigned flags)
+{
+ if (flags == MOVE_READ) {
+ struct sna_pixmap *priv = sna_pixmap(pixmap);
+ if (priv == NULL || priv->gpu_damage == NULL)
+ return true;
+ }
+
+ return _sna_pixmap_move_to_cpu(pixmap, flags);
+}
bool must_check sna_drawable_move_region_to_cpu(DrawablePtr drawable,
RegionPtr region,
unsigned flags);
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 7a1dc466..e2e90c1e 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -658,7 +658,7 @@ static inline bool pixmap_inplace(struct sna *sna,
}
bool
-sna_pixmap_move_to_cpu(PixmapPtr pixmap, unsigned int flags)
+_sna_pixmap_move_to_cpu(PixmapPtr pixmap, unsigned int flags)
{
struct sna *sna = to_sna_from_pixmap(pixmap);
struct sna_pixmap *priv;
@@ -885,7 +885,7 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
DBG(("%s: region subsumes drawable\n", __FUNCTION__));
if (dx | dy)
RegionTranslate(region, -dx, -dy);
- return sna_pixmap_move_to_cpu(pixmap, flags);
+ return _sna_pixmap_move_to_cpu(pixmap, flags);
}
if ((flags & MOVE_READ) == 0) {