Mesa (9.1): meta: handle 2D texture arrays in decompress_texture_image()
Carl Worth
cworth at kemper.freedesktop.org
Wed Jul 31 05:45:20 UTC 2013
Module: Mesa
Branch: 9.1
Commit: c94e507616166e3173cd654c62f45d9103de930e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c94e507616166e3173cd654c62f45d9103de930e
Author: Brian Paul <brianp at vmware.com>
Date: Tue Jul 16 06:27:33 2013 -0600
meta: handle 2D texture arrays in decompress_texture_image()
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=66850
NOTE: This is a candidate for the 9.x branches.
Cc: mesa-stable at lists.freedesktop.org
Reviewed-by: José Fonseca <jfonseca at vmware.com>
(cherry picked from commit 484fa879847fdc7c9ef22231315f78a4c342e85d)
---
src/mesa/drivers/common/meta.c | 23 +++++++++++++++++++++--
1 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index 486db25..1c36042 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -4052,10 +4052,29 @@ _mesa_meta_GetTexImage(struct gl_context *ctx,
_mesa_get_format_datatype(texImage->TexFormat)
== GL_UNSIGNED_NORMALIZED) {
struct gl_texture_object *texObj = texImage->TexObject;
- const GLuint slice = 0; /* only 2D compressed textures for now */
+ GLuint slice;
/* Need to unlock the texture here to prevent deadlock... */
_mesa_unlock_texture(ctx, texObj);
- decompress_texture_image(ctx, texImage, slice, format, type, pixels);
+ for (slice = 0; slice < texImage->Depth; slice++) {
+ void *dst;
+ if (texImage->TexObject->Target == GL_TEXTURE_2D_ARRAY) {
+ /* Setup pixel packing. SkipPixels and SkipRows will be applied
+ * in the decompress_texture_image() function's call to
+ * glReadPixels but we need to compute the dest slice's address
+ * here (according to SkipImages and ImageHeight).
+ */
+ struct gl_pixelstore_attrib packing = ctx->Pack;
+ packing.SkipPixels = 0;
+ packing.SkipRows = 0;
+ dst = _mesa_image_address3d(&packing, pixels, texImage->Width,
+ texImage->Height, format, type,
+ slice, 0, 0);
+ }
+ else {
+ dst = pixels;
+ }
+ decompress_texture_image(ctx, texImage, slice, format, type, dst);
+ }
/* ... and relock it */
_mesa_lock_texture(ctx, texObj);
}
More information about the mesa-commit
mailing list