[PATCH] Xephyr: Paint with subimage for non-Glamor & non-XSHM case

Chris Wilson chris at chris-wilson.co.uk
Mon Jun 22 12:59:40 PDT 2015


On Thu, May 21, 2015 at 04:13:12PM -0700, Ian Scott wrote:
> This improves the case for when we paint an area without SHM.

Improves? Xephyr is very much broken since

commit a2b73da78de4e627965213d24a6c33f243a60eb6
Author: Julien Cristau <jcristau at debian.org>
Date:   Sun Jun 20 00:05:40 2010 +0100

> 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 <ian.scott at arteris.com>
> ---
>  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 dc265d5..3914f73 100644
> --- a/hw/kdrive/ephyr/hostx.c
> +++ b/hw/kdrive/ephyr/hostx.c
> @@ -1039,11 +1039,13 @@ hostx_paint_rect(KdScreenInfo *screen,
>                            sx, sy, dx, dy, width, height, FALSE);
>      }
>      else {
> -        /* This is slow and could be done better */

This comment is still valid. :(

xcb_image_subimage() does a very slow (get_pixel/put_pixel) copy even
when it could just create a view in the native case.

> -        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);

Nevertheless,
Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the xorg-devel mailing list