diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-01-03 12:46:40 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-01-03 21:35:03 +0000 |
commit | bd7aa1754dcf9d58d7deb92d99da9b78c91a0eb2 (patch) | |
tree | 135c1f92a95749d46bd27deeefedc0f9ed84352b | |
parent | 294c8791c435acf5933109fbcab85623a55b2c6c (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.h | 12 | ||||
-rw-r--r-- | src/sna/sna_accel.c | 4 |
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) { |