[Mesa-dev] [PATCH 2/2] glapi/glx: call __glEmptyImage if USE_XCB, not memcpy directly (#52059)

Ian Romanick idr at freedesktop.org
Thu Jul 19 09:39:09 PDT 2012


On 07/19/2012 07:46 AM, Julien Cristau wrote:
> From: Julien Cristau <julien.cristau at logilab.fr>
>
> We were stomping on the caller's buffer by ignoring their alignment
> requests.  This patch makes the USE_XCB path match the older one more
> closely.
>
> Signed-off-by: Julien Cristau <julien.cristau at logilab.fr>

Say

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=52059

here instead of mentioning the bug in the subject.

> ---
>   src/mapi/glapi/gen/glX_proto_send.py |   36 ++++++++++++++++++++++++---------
>   1 files changed, 26 insertions(+), 10 deletions(-)
>
> diff --git a/src/mapi/glapi/gen/glX_proto_send.py b/src/mapi/glapi/gen/glX_proto_send.py
> index 9068a61..40cb05d 100644
> --- a/src/mapi/glapi/gen/glX_proto_send.py
> +++ b/src/mapi/glapi/gen/glX_proto_send.py
> @@ -673,16 +673,32 @@ generic_%u_byte( GLint rop, const void * ptr )
>
>   			if f.needs_reply():
>   				print '        %s_reply_t *reply = %s_reply(c, %s, NULL);' % (xcb_name, xcb_name, xcb_request)
> -				if output and f.reply_always_array:
> -					print '        (void)memcpy(%s, %s_data(reply), %s_data_length(reply) * sizeof(%s));' % (output.name, xcb_name, xcb_name, output.get_base_type_string())
> -
> -				elif output and not f.reply_always_array:
> -					if not output.is_image():
> -						print '        if (%s_data_length(reply) == 0)' % (xcb_name)
> -						print '            (void)memcpy(%s, &reply->datum, sizeof(reply->datum));' % (output.name)
> -						print '        else'
> -					print '        (void)memcpy(%s, %s_data(reply), %s_data_length(reply) * sizeof(%s));' % (output.name, xcb_name, xcb_name, output.get_base_type_string())
> -
> +				if output:
> +					if output.is_image():
> +						[dim, w, h, d, junk] = output.get_dimensions()
> +						if f.dimensions_in_reply:
> +							w = "reply->width"
> +							h = "reply->height"
> +							d = "reply->depth"
> +							if dim < 2:
> +								h = "1"
> +							else:
> +								print '        if (%s == 0) { %s = 1; }' % (h, h)
> +							if dim < 3:
> +								d = "1"
> +							else:
> +								print '        if (%s == 0) { %s = 1; }' % (d, d)
> +
> +						print '        __glEmptyImage(gc, 3, %s, %s, %s, %s, %s, %s_data(reply), %s);' % (w, h, d, output.img_format, output.img_type, xcb_name, output.name)

I was going to comment that 'dim' should be the second parameter to 
__glEmptyImage instead of hardcoding 3, but it looks like the dim 
parameter isn't used in __glEmptyImage.  I think I can recommend a 
follow-on patch. :)

> +					else:
> +						s = output.size() / output.get_element_count()

I don't see where this variable is used.

> +						if f.reply_always_array:
> +							print '        (void)memcpy(%s, %s_data(reply), %s_data_length(reply) * sizeof(%s));' % (output.name, xcb_name, xcb_name, output.get_base_type_string())
> +						else:
> +							print '        if (%s_data_length(reply) == 0)' % (xcb_name)
> +							print '            (void)memcpy(%s, &reply->datum, sizeof(reply->datum));' % (output.name)
> +							print '        else'
> +							print '            (void)memcpy(%s, %s_data(reply), %s_data_length(reply) * sizeof(%s));' % (output.name, xcb_name, xcb_name, output.get_base_type_string())
>
>   				if f.return_type != 'void':
>   					print '        retval = reply->ret_val;'
>


More information about the mesa-dev mailing list