From 1a867385d56022e904ef0235cbed545057fcb998 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 29 Sep 2011 09:18:20 -0600 Subject: [PATCH] st/mesa: remove some old GetTexImage() code We can use the core Mesa code for glGetTexImage() since it handles the image mapping/unmapping now. We'll keep the decompress_with_blit() path in the hope that it's faster than core Mesa's software decompression code. Fixes https://bugs.freedesktop.org/show_bug.cgi?id=41312 --- src/mesa/state_tracker/st_cb_texture.c | 36 ++++---------------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 8df753f7c16..260df09f597 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -922,8 +922,7 @@ decompress_with_blit(struct gl_context * ctx, GLenum target, GLint level, /** - * Need to map texture image into memory before copying image data, - * then unmap it. + * Called via ctx->Driver.GetTexImage() */ static void st_GetTexImage(struct gl_context * ctx, GLenum target, GLint level, @@ -931,46 +930,21 @@ st_GetTexImage(struct gl_context * ctx, GLenum target, GLint level, struct gl_texture_object *texObj, struct gl_texture_image *texImage) { - struct st_context *st = st_context(ctx); struct st_texture_image *stImage = st_texture_image(texImage); - const GLuint dstImageStride = - _mesa_image_image_stride(&ctx->Pack, texImage->Width, texImage->Height, - format, type); - GLuint depth, i; - GLubyte *dest; if (stImage->pt && util_format_is_s3tc(stImage->pt->format)) { /* Need to decompress the texture. - * We'll do this by rendering a textured quad. + * We'll do this by rendering a textured quad (which is hopefully + * faster than using the fallback code in texcompress.c. * Note that we only expect RGBA formats (no Z/depth formats). */ decompress_with_blit(ctx, target, level, format, type, pixels, texObj, texImage); - return; } - - depth = texImage->Depth; - texImage->Depth = 1; - - dest = (GLubyte *) pixels; - - for (i = 0; i < depth; i++) { - _mesa_get_teximage(ctx, target, level, format, type, dest, + else { + _mesa_get_teximage(ctx, target, level, format, type, pixels, texObj, texImage); - - if (stImage->pt && i + 1 < depth) { - /* unmap this slice */ - st_texture_image_unmap(st, stImage); - /* map next slice of 3D texture */ - texImage->Data = st_texture_image_map(st, stImage, i + 1, - PIPE_TRANSFER_READ, 0, 0, - stImage->base.Width, - stImage->base.Height); - dest += dstImageStride; - } } - - texImage->Depth = depth; } -- 2.30.2