On 11/30/2011 01:35 PM, Eric Anholt wrote: > Since the MapTextureImage changes on Intel, nwn had corruption in the > scrollbar at the load game menu, and corrupted ground textures in the > starting zone. > > The issue was this code now seeing dstRowStride aligned to hardware > requirements instead of a temporary buffer that gets uploaded to > hardware later. The existing code was just trying to memcpy > srcRowStride * height / bh, while the glCompressedTexSubImage2D() > storage code nearby did the correct walking by blockheight rows at a > time. Just reuse the subimage upload instead of duplicating that > logic. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=41451 > --- > > (a piglit test is in progress for this, but not finished yet > because I really want to cover all the compressed formats at once) > > src/mesa/main/texstore.c | 32 ++++++-------------------------- > 1 files changed, 6 insertions(+), 26 deletions(-) > > diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c > index 0079590..424e258 100644 > --- a/src/mesa/main/texstore.c > +++ b/src/mesa/main/texstore.c > @@ -5015,9 +5015,6 @@ _mesa_store_compressed_teximage2d(struct gl_context > *ctx, > struct gl_texture_object *texObj, > struct gl_texture_image *texImage) > { > - GLubyte *dstMap; > - GLint dstRowStride; > - > /* This is pretty simple, basically just do a memcpy without worrying > * about the usual image unpacking or image transfer operations. > */ > @@ -5034,29 +5031,12 @@ _mesa_store_compressed_teximage2d(struct gl_context > *ctx, > return; > } > > - data = _mesa_validate_pbo_compressed_teximage(ctx, imageSize, data, > - &ctx->Unpack, > - "glCompressedTexImage2D"); > - if (!data) > - return; > - > - > - /* Map dest texture buffer (write to whole region) */ > - ctx->Driver.MapTextureImage(ctx, texImage, 0, > - 0, 0, width, height, > - GL_MAP_WRITE_BIT, > - &dstMap, &dstRowStride); > - if (dstMap) { > - /* copy the data */ > - memcpy(dstMap, data, imageSize); > - > - ctx->Driver.UnmapTextureImage(ctx, texImage, 0); > - } > - else { > - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2D"); > - } > - > - _mesa_unmap_teximage_pbo(ctx, &ctx->Unpack); > + _mesa_store_compressed_texsubimage2d(ctx, target, level, > + 0, 0, > + width, height, > + texImage->TexFormat, > + imageSize, data, > + texObj, texImage); > }
Looks good to me. Kudos for finding this! Reviewed-by: Kenneth Graunke <kenn...@whitecape.org> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev