[PATCH v2 weston 1/6] xwm: fix render format look up

Kristian Høgsberg hoegsberg at gmail.com
Mon Jul 16 08:47:10 PDT 2012


On Mon, Jul 16, 2012 at 05:32:22PM +0300, Tiago Vignatti wrote:
> we were using wrong iterator for xcb_render_pictforminfo_t type, the

We're just using the wrong length.  The xcb iterators aren't really
worth the trouble in my opinion, a regular for loop through the array
is a lot more straight forward.

> formats_reply->length; valgrind was shouting it loudly. Another issue this
> patch addresses is that now find_depth returns the first util and valid format
> that matches the desired depth; it doesn't continue through the loop until the
> end.
> 
> This reverts part of commit 5ea11b69.
> 
> Signed-off-by: Tiago Vignatti <tiago.vignatti at intel.com>
> ---
>  src/xwayland/window-manager.c |   49 +++++++++++++++++++++++++++--------------
>  1 file changed, 32 insertions(+), 17 deletions(-)
> 
> diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c
> index 6e032ea..b922e9b 100644
> --- a/src/xwayland/window-manager.c
> +++ b/src/xwayland/window-manager.c
> @@ -963,6 +963,37 @@ weston_wm_handle_event(int fd, uint32_t mask, void *data)
>  	return count;
>  }
>  
> +static xcb_render_pictforminfo_t *
> +find_depth (xcb_connection_t *c, int depth)
> +{
> +	xcb_render_query_pict_formats_reply_t *formats;
> +	xcb_render_query_pict_formats_cookie_t cookie;
> +	xcb_render_pictforminfo_iterator_t i;
> +
> +	cookie = xcb_render_query_pict_formats (c);
> +	xcb_flush (c);
> +
> +	formats = xcb_render_query_pict_formats_reply (c, cookie, 0);
> +	if (formats == NULL)
> +		return NULL;
> +
> +	for (i = xcb_render_query_pict_formats_formats_iterator (formats);
> +	     i.rem;
> +	     xcb_render_pictforminfo_next (&i))
> +	{
> +		if (XCB_RENDER_PICT_TYPE_DIRECT != i.data->type)
> +			continue;
> +
> +		if (depth != i.data->depth)
> +			continue;
> +
> +		return i.data;
> +	}
> +
> +	free (formats);
> +	return NULL;
> +}
> +
>  static void
>  wxs_wm_get_resources(struct weston_wm *wm)
>  {
> @@ -1024,15 +1055,10 @@ wxs_wm_get_resources(struct weston_wm *wm)
>  	xcb_xfixes_query_version_reply_t *xfixes_reply;
>  	xcb_intern_atom_cookie_t cookies[ARRAY_LENGTH(atoms)];
>  	xcb_intern_atom_reply_t *reply;
> -	xcb_render_query_pict_formats_reply_t *formats_reply;
> -	xcb_render_query_pict_formats_cookie_t formats_cookie;
> -	xcb_render_pictforminfo_t *formats;
>  	uint32_t i;
>  
>  	xcb_prefetch_extension_data (wm->conn, &xcb_xfixes_id);
>  
> -	formats_cookie = xcb_render_query_pict_formats(wm->conn);
> -
>  	for (i = 0; i < ARRAY_LENGTH(atoms); i++)
>  		cookies[i] = xcb_intern_atom (wm->conn, 0,
>  					      strlen(atoms[i].name),
> @@ -1059,18 +1085,7 @@ wxs_wm_get_resources(struct weston_wm *wm)
>  
>  	free(xfixes_reply);
>  
> -	formats_reply = xcb_render_query_pict_formats_reply(wm->conn,
> -							    formats_cookie, 0);
> -	if (formats_reply == NULL)
> -		return;
> -
> -	formats = xcb_render_query_pict_formats_formats(formats_reply);
> -	for (i = 0; i < formats_reply->length; i++)
> -		if (formats[i].type == XCB_RENDER_PICT_TYPE_DIRECT &&
> -		    formats[i].depth == 24)
> -			wm->render_format = formats[i];
> -
> -	free(formats_reply);
> +	wm->render_format = *(find_depth(wm->conn, 24));
>  }

We send out the request earlier in the function so that all the
queries (atoms, extension versions and render formats) become just one
roundtrip.  I'll just push a commit to fix the length and also look
for the 32 depth format and then put the rest of your patches on top.

Kristian

>  static void
> -- 
> 1.7.9.5
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list