diff options
-rw-r--r-- | src/mesa/main/formats.c | 10 | ||||
-rw-r--r-- | src/mesa/main/formats.h | 3 | ||||
-rw-r--r-- | src/mesa/main/readpix.c | 3 | ||||
-rw-r--r-- | src/mesa/swrast/s_drawpix.c | 3 |
4 files changed, 12 insertions, 7 deletions
diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c index 834d4c81ffb..f35239527b5 100644 --- a/src/mesa/main/formats.c +++ b/src/mesa/main/formats.c @@ -2516,14 +2516,16 @@ _mesa_format_to_type_and_comps(gl_format format, /** * Check if a gl_format exactly matches a GL formaat/type combination * such that we can use memcpy() from one to the other. - * - * Note: this matching assumes that GL_PACK/UNPACK_SWAP_BYTES is unset. - * + * \param gl_format a MESA_FORMAT_x value + * \param format the user-specified image format + * \param type the user-specified image datatype + * \param swapBytes typically the current pixel pack/unpack byteswap state * \return GL_TRUE if the formats match, GL_FALSE otherwise. */ GLboolean _mesa_format_matches_format_and_type(gl_format gl_format, - GLenum format, GLenum type) + GLenum format, GLenum type, + GLboolean swapBytes) { const GLboolean littleEndian = _mesa_little_endian(); diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h index 9609343387f..3a694a813de 100644 --- a/src/mesa/main/formats.h +++ b/src/mesa/main/formats.h @@ -343,7 +343,8 @@ _mesa_format_num_components(gl_format format); GLboolean _mesa_format_matches_format_and_type(gl_format gl_format, - GLenum format, GLenum type); + GLenum format, GLenum type, + GLboolean swapBytes); #ifdef __cplusplus diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c index 84b5224c858..71de0b31298 100644 --- a/src/mesa/main/readpix.c +++ b/src/mesa/main/readpix.c @@ -209,7 +209,8 @@ fast_read_rgba_pixels_memcpy( struct gl_context *ctx, GLubyte *dst, *map; int dstStride, stride, j, texelBytes; - if (!_mesa_format_matches_format_and_type(rb->Format, format, type)) + if (!_mesa_format_matches_format_and_type(rb->Format, format, type, + ctx->Pack.SwapBytes)) return GL_FALSE; /* check for things we can't handle here */ diff --git a/src/mesa/swrast/s_drawpix.c b/src/mesa/swrast/s_drawpix.c index c5466ddbd72..c19808bd432 100644 --- a/src/mesa/swrast/s_drawpix.c +++ b/src/mesa/swrast/s_drawpix.c @@ -239,7 +239,8 @@ fast_draw_rgba_pixels(struct gl_context *ctx, GLint x, GLint y, return GL_TRUE; } - if (_mesa_format_matches_format_and_type(rb->Format, format, type)) { + if (_mesa_format_matches_format_and_type(rb->Format, format, type, + ctx->Unpack.SwapBytes)) { fast_draw_generic_pixels(ctx, rb, x, y, width, height, format, type, &unpack, pixels); return GL_TRUE; |