[Mesa-dev] [PATCH] meta: Add pixel store/pack operations in decompress_texture_image

Brian Paul brianp at vmware.com
Mon Feb 13 11:01:07 PST 2012


On 02/13/2012 11:33 AM, Anuj Phogat wrote:
> This patch adds the pixel store operations in decompress_texture_image().
> decompress_texture_image() is used in glGetTexImage() for compressed
> textures with unsigned, normalized values.
>
> It also fixes the failures in intel oglconform pxstore-gettex due to
> following sub test cases:
>
>   - Test all mipmaps with byte swapping enabled
>   - Test all small mipmaps with all allowable alignment values
>   - Test subimage packing for all mipmap levels
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=40864
>
> Note: This is a candidate for stable branches
>
> Signed-off-by: Anuj Phogat<anuj.phogat at gmail.com>
> ---
> Please ignore my prvious email. I sent the wrong patch by mistake.
> This is an updated patch as per Brian's comments.
>
>   src/mesa/drivers/common/meta.c |    8 +++-----
>   1 files changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
> index 0cf1028..f3f5d85 100644
> --- a/src/mesa/drivers/common/meta.c
> +++ b/src/mesa/drivers/common/meta.c
> @@ -3244,7 +3244,7 @@ decompress_texture_image(struct gl_context *ctx,
>                            struct gl_texture_image *texImage,
>                            GLuint slice,
>                            GLenum destFormat, GLenum destType,
> -                         GLvoid *dest, GLint destRowLength)
> +                         GLvoid *dest)
>   {
>      struct decompress_state *decompress =&ctx->Meta->Decompress;
>      struct gl_texture_object *texObj = texImage->TexObject;
> @@ -3274,7 +3274,7 @@ decompress_texture_image(struct gl_context *ctx,
>      fboDrawSave = ctx->DrawBuffer->Name;
>      fboReadSave = ctx->ReadBuffer->Name;
>
> -   _mesa_meta_begin(ctx, MESA_META_ALL);
> +   _mesa_meta_begin(ctx, MESA_META_ALL&&  ~MESA_META_PIXEL_STORE);

That should be a bitwise &.

>
>      /* Create/bind FBO/renderbuffer */
>      if (decompress->FBO == 0) {
> @@ -3409,7 +3409,6 @@ decompress_texture_image(struct gl_context *ctx,
>            _mesa_PixelTransferf(GL_BLUE_SCALE, 0.0f);
>         }
>
> -      ctx->Pack.RowLength = destRowLength;
>         _mesa_ReadPixels(0, 0, width, height, destFormat, destType, dest);
>      }
>
> @@ -3450,8 +3449,7 @@ _mesa_meta_GetTexImage(struct gl_context *ctx,
>         const GLuint slice = 0; /* only 2D compressed textures for now */
>         /* Need to unlock the texture here to prevent deadlock... */
>         _mesa_unlock_texture(ctx, texObj);
> -      decompress_texture_image(ctx, texImage, slice, format, type, pixels,
> -                               ctx->Pack.RowLength);
> +      decompress_texture_image(ctx, texImage, slice, format, type, pixels);
>         /* ... and relock it */
>         _mesa_lock_texture(ctx, texObj);
>      }

Other than the above, Reviewed-by: Brian Paul <brianp at vmware.com>


More information about the mesa-dev mailing list