summaryrefslogtreecommitdiff
path: root/src/cairo-xlib-fallback-compositor.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-08-17 20:57:04 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2012-08-17 23:20:01 +0100
commitbc38108947a684fb6e7af99a48ebc8f79d05856a (patch)
tree90a4964699a955902f7616dfd158f09679f86f12 /src/cairo-xlib-fallback-compositor.c
parent4af7a1c8637f3008a2265e063ab990eec07e02dd (diff)
downloadcairo-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.c14
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;