From a579e6ba7763749d51d16e3a54941e06939df07a Mon Sep 17 00:00:00 2001 From: Ian Scott Date: Thu, 21 May 2015 16:13:12 -0700 Subject: [PATCH] Xephyr: Paint with subimage for non-Glamor & non-XSHM case This improves the case for when we paint an area without SHM. xcb_image_subimage() is used to create a subimage for the damaged area, which is converted to native format if necessary. Signed-off-by: Ian Scott Reviewed-by: Chris Wilson --- hw/kdrive/ephyr/hostx.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c index 5406938bc..3991c51dc 100644 --- a/hw/kdrive/ephyr/hostx.c +++ b/hw/kdrive/ephyr/hostx.c @@ -1047,11 +1047,13 @@ hostx_paint_rect(KdScreenInfo *screen, sx, sy, dx, dy, width, height, FALSE); } else { - /* This is slow and could be done better */ - xcb_image_t *img = xcb_image_native (HostX.conn, scrpriv->ximg, 1); - xcb_image_put(HostX.conn, scrpriv->win, HostX.gc, img, 0, 0, 0); - if (scrpriv->ximg != img) + xcb_image_t *subimg = xcb_image_subimage(scrpriv->ximg, sx, sy, + width, height, 0, 0, 0); + xcb_image_t *img = xcb_image_native(HostX.conn, subimg, 1); + xcb_image_put(HostX.conn, scrpriv->win, HostX.gc, img, dx, dy, 0); + if (subimg != img) xcb_image_destroy(img); + xcb_image_destroy(subimg); } xcb_aux_sync(HostX.conn);