[Mesa-dev] [PATCH] glx: fix glGetTexLevelParameteriv for indirect rendering

Ian Romanick idr at freedesktop.org
Mon Feb 18 20:26:06 PST 2013


On 02/18/2013 10:16 AM, Brian Paul wrote:
> From: Stefan Brüns <Stefan.Bruens at rwth-aachen.de>
>
> A single element in a GLX reply is contained in the header itself.
> The number of elements is denoted in the "n" field of the reply.
> If "n" is 1, the length of additional data is 0.
> The XXX_data_length() function of xcb does not return the length of
> the (optional, n>1) data but the number of elements.
>
> Fixes http://bugs.freedesktop.org/show_bug.cgi?id=59876
>
> Note: This is a candidate for the stable branches.
>
> Signed-off-by: Stefan Brüns <stefan.bruens at rwth-aachen.de>
> Signed-off-by: Brian Paul <brianp at vmware.com>

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

Sorry for the lag.  I missed the first patch while I was out with the 
FOSDEM flu.  If nobody beats me to it, I'll commit it to master tomorrow 
morning.

> ---
>   src/mapi/glapi/gen/glX_proto_send.py |    4 +++-
>   1 files changed, 3 insertions(+), 1 deletions(-)
>
> diff --git a/src/mapi/glapi/gen/glX_proto_send.py b/src/mapi/glapi/gen/glX_proto_send.py
> index fbc0dd3..f4d519f 100644
> --- a/src/mapi/glapi/gen/glX_proto_send.py
> +++ b/src/mapi/glapi/gen/glX_proto_send.py
> @@ -700,7 +700,9 @@ generic_%u_byte( GLint rop, const void * ptr )
>                           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 '        /* the XXX_data_length() xcb function name is misleading, it returns the number */'
> +                            print '        /* of elements, not the length of the data part. A single element is embedded. */'
> +                            print '        if (%s_data_length(reply) == 1)' % (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())
>



More information about the mesa-dev mailing list