[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