[Mesa-users] glGetTexImage with GL_TEXTURE_3D

Markus Müller mueller at imfusion.de
Tue Aug 30 07:51:15 UTC 2016


Am 30.08.2016 um 01:47 schrieb Brian Paul:
> On 08/29/2016 11:20 AM, Brian Paul wrote:
>> On 08/29/2016 01:43 AM, Markus Müller wrote:
>>> Hello,
>>>
>>> I'm using the Gallium llvmpipe software renderer on Windows and have 
>>> the
>>> problem that when downloading 3D textures with glGetTexImage, only the
>>> first slice is copied to the provided buffer. I attached a small 
>>> example
>>> that works with the default nvidia driver and Mesa 10.3.1 but fails 
>>> with
>>> Mesa 10.6.9 (also 11 and 12).
>>>
>>> The following patch seems to fix this but I'm not sure if it breaks
>>> something else:
>>>
>>> diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c
>>> index f97d0ef..83bf122 100644
>>> --- a/src/mesa/main/texgetimage.c
>>> +++ b/src/mesa/main/texgetimage.c
>>> @@ -509,14 +509,16 @@ get_tex_rgba_uncompressed(struct gl_context *ctx,
>>> GLuint dimensions,
>>>             */
>>>            if (format == rgba_format) {
>>>               rgba = dest;
>>> -         } else if (rgba == NULL) { /* Allocate the RGBA buffer only
>>> once */
>>> +         } else {
>>>               need_convert = true;
>>> -            rgba = malloc(height * rgba_stride);
>>> -            if (!rgba) {
>>> -               _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGetTexImage()");
>>> -               ctx->Driver.UnmapTextureImage(ctx, texImage, img);
>>> -               return;
>>> -            }
>>> +                       if (rgba == NULL) { /* Allocate the RGBA buffer
>>> only once */
>>> +                               rgba = malloc(height * rgba_stride);
>>> +                               if (!rgba) {
>>> +                                       _mesa_error(ctx,
>>> GL_OUT_OF_MEMORY, "glGetTexImage()");
>>> + ctx->Driver.UnmapTextureImage(ctx, texImage, img);
>>> +                                       return;
>>> +                               }
>>> +                       }
>>>            }
>>>            _mesa_format_convert(rgba, rgba_format, rgba_stride,
>>>
>>
>> Thanks.  Yeah, we need to set the need_convert flag on each loop
>> iteration, not just when the rgba pointer is null.  I'll clean up your
>> patch and post it for review.
>
> Patch committed to master branch.
>
>>
>> I've also written a new piglit test which exercises this code path.
>
> Still out for review.
>
> -Brian
>
Great, thank you!

Regards,
Markus


More information about the mesa-users mailing list