From ffd97d20aaa1cf7fa683d25deb0391f24ff14589 Mon Sep 17 00:00:00 2001 From: Felix Kuehling Date: Mon, 16 May 2005 23:01:09 +0000 Subject: [PATCH] Don't use _mesa_swizzle_ubyte_image if all three texture formats involved in _mesa_textore_argb/rgba8888 (source, base-internal, destination) differ. _mesa_swizzle_ubyte_image knows only about two of the formats and can't handle the case that all three are different correctly. Fixes https://bugs.freedesktop.org/show_bug.cgi?id=3111. --- src/mesa/main/texstore.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c index e4c3f6651d6..d46b23c803a 100644 --- a/src/mesa/main/texstore.c +++ b/src/mesa/main/texstore.c @@ -1079,6 +1079,12 @@ _mesa_texstore_rgba8888(STORE_PARAMS) srcType == GL_UNSIGNED_BYTE && dstFormat == &_mesa_texformat_rgba8888 && littleEndian && + /* Three texture formats involved: srcFormat, + * baseInternalFormat and destFormat (GL_RGBA). Only two + * may differ. _mesa_swizzle_ubyte_image can't handle two + * propagations at once correctly. */ + (srcFormat == baseInternalFormat || + baseInternalFormat == GL_RGBA) && can_swizzle(srcFormat)) { GLubyte dstmap[4]; @@ -1252,6 +1258,12 @@ _mesa_texstore_argb8888(STORE_PARAMS) dstFormat == &_mesa_texformat_argb8888 && srcType == GL_UNSIGNED_BYTE && littleEndian && + /* Three texture formats involved: srcFormat, + * baseInternalFormat and destFormat (GL_RGBA). Only two + * may differ. _mesa_swizzle_ubyte_image can't handle two + * propagations at once correctly. */ + (srcFormat == baseInternalFormat || + baseInternalFormat == GL_RGBA) && can_swizzle(srcFormat)) { GLubyte dstmap[4]; -- 2.30.2