diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-08-17 20:57:04 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-08-17 23:20:01 +0100 |
commit | bc38108947a684fb6e7af99a48ebc8f79d05856a (patch) | |
tree | 90a4964699a955902f7616dfd158f09679f86f12 /src/cairo-xlib-fallback-compositor.c | |
parent | 4af7a1c8637f3008a2265e063ab990eec07e02dd (diff) | |
download | cairo-bc38108947a684fb6e7af99a48ebc8f79d05856a.tar.gz |
xlib/shm: Limit use of the impromptu fallback pixmap for uploads
We want to avoid unnecessary readback and so only want to use the
ShmPixmap when uploading the complete surface.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-xlib-fallback-compositor.c')
-rw-r--r-- | src/cairo-xlib-fallback-compositor.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/cairo-xlib-fallback-compositor.c b/src/cairo-xlib-fallback-compositor.c index d573276fd..ed2845db5 100644 --- a/src/cairo-xlib-fallback-compositor.c +++ b/src/cairo-xlib-fallback-compositor.c @@ -74,10 +74,14 @@ _cairo_xlib_shm_compositor_paint (const cairo_compositor_t *_compositor, cairo_xlib_surface_t *xlib = (cairo_xlib_surface_t *)extents->surface; cairo_int_status_t status; cairo_surface_t *shm; + cairo_bool_t overwrite; TRACE ((stderr, "%s\n", __FUNCTION__)); - shm = _cairo_xlib_surface_get_shm (xlib); + overwrite = + extents->op <= CAIRO_OPERATOR_SOURCE && unclipped (xlib, extents->clip); + + shm = _cairo_xlib_surface_get_shm (xlib, overwrite); if (shm == NULL) return CAIRO_INT_STATUS_UNSUPPORTED; @@ -105,7 +109,7 @@ _cairo_xlib_shm_compositor_mask (const cairo_compositor_t *_compositor, TRACE ((stderr, "%s\n", __FUNCTION__)); - shm = _cairo_xlib_surface_get_shm (xlib); + shm = _cairo_xlib_surface_get_shm (xlib, FALSE); if (shm == NULL) return CAIRO_INT_STATUS_UNSUPPORTED; @@ -139,7 +143,7 @@ _cairo_xlib_shm_compositor_stroke (const cairo_compositor_t *_compositor, TRACE ((stderr, "%s\n", __FUNCTION__)); - shm = _cairo_xlib_surface_get_shm (xlib); + shm = _cairo_xlib_surface_get_shm (xlib, FALSE); if (shm == NULL) return CAIRO_INT_STATUS_UNSUPPORTED; @@ -174,7 +178,7 @@ _cairo_xlib_shm_compositor_fill (const cairo_compositor_t *_compositor, TRACE ((stderr, "%s\n", __FUNCTION__)); - shm = _cairo_xlib_surface_get_shm (xlib); + shm = _cairo_xlib_surface_get_shm (xlib, FALSE); if (shm == NULL) return CAIRO_INT_STATUS_UNSUPPORTED; @@ -207,7 +211,7 @@ _cairo_xlib_shm_compositor_glyphs (const cairo_compositor_t *_compositor, TRACE ((stderr, "%s\n", __FUNCTION__)); - shm = _cairo_xlib_surface_get_shm (xlib); + shm = _cairo_xlib_surface_get_shm (xlib, FALSE); if (shm == NULL) return CAIRO_INT_STATUS_UNSUPPORTED; |