[Mesa-users] glGetTexImage with GL_TEXTURE_3D

Brian Paul brianp at vmware.com
Mon Aug 29 17:20:34 UTC 2016


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.

I've also written a new piglit test which exercises this code path.

-Brian



More information about the mesa-users mailing list