This code wasn't handling the 7-width/GL_RED/GL_BYTE case where GL_PACK_ALIGNMENT was set to 4. This fixes it to iterate on a row by row basis over the image instead, and avoids accessing uninitialised memory.
Signed-off-by: Dave Airlie <airl...@redhat.com> --- src/mesa/main/texgetimage.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c index f62553d..872274e 100644 --- a/src/mesa/main/texgetimage.c +++ b/src/mesa/main/texgetimage.c @@ -561,11 +561,18 @@ get_tex_rgba_uncompressed(struct gl_context *ctx, GLuint dimensions, GLint swapSize = _mesa_sizeof_packed_type(type); if (swapSize == 2 || swapSize == 4) { int swapsPerPixel = _mesa_bytes_per_pixel(format, type) / swapSize; + int stride = _mesa_image_row_stride(&ctx->Pack, width, format, type); + int row; + const uint8_t *dstrow; assert(_mesa_bytes_per_pixel(format, type) % swapSize == 0); - if (swapSize == 2) - _mesa_swap2((GLushort *) dest, width * height * swapsPerPixel); - else if (swapSize == 4) - _mesa_swap4((GLuint *) dest, width * height * swapsPerPixel); + dstrow = dest; + for (row = 0; row < height; row++) { + if (swapSize == 2) + _mesa_swap2((GLushort *) dstrow, width * swapsPerPixel); + else if (swapSize == 4) + _mesa_swap4((GLuint *) dstrow, width * swapsPerPixel); + dstrow += stride; + } } } -- 2.4.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev