summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/texstore.c
diff options
context:
space:
mode:
authorHans de Goede <[email protected]>2011-04-10 22:21:03 +0200
committerDave Airlie <[email protected]>2011-04-12 20:32:45 +1000
commite338a1b0cea94f8c57968b01eebd795c6c8ce74e (patch)
tree427bfe8e14524d297bf6fb984d2ea496849ac106 /src/mesa/main/texstore.c
parent847f991a87b9549eb89a521edb7cd149005006bb (diff)
texstore: fix regression stricter check for memcpy path for unorm88 and unorm1616
According to https://bugs.freedesktop.org/show_bug.cgi?id=34280 commit 5d1387b2da3626326410804026f8b92f1a121fdc causes the font corruption problems people have been seeing under various apps and gnome-shell on r200 cards. This commit changed (loosened) the check for using the memcpy path in the former al88 / al1616 texstore functions, which are now also used to store rg texures. This patch restores the old strict check in case of al textures. I've no idea why this fixes things, since I don't know the code in question at all. But after seeing the bisect in bfdo34280 point to this commit, I gave this fix a try and it fixes the font issues seen on r200 cards. [airlied: r200 has no native working A8, so it does an internal storage format of AL88 however srcFormat == internalFormat == ALPHA when we get to this point, so it copies, but it wants to store into an AL88 not ALPHA so fails, I'll also push a piglit test for this on r200]. Many thanks to Nicolas Kaiser who did all the hard work of tracking this down! Signed-off-by: Hans de Goede <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/mesa/main/texstore.c')
-rw-r--r--src/mesa/main/texstore.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c
index 13fae3bf98c..87cb327d2c1 100644
--- a/src/mesa/main/texstore.c
+++ b/src/mesa/main/texstore.c
@@ -2186,8 +2186,11 @@ _mesa_texstore_unorm88(TEXSTORE_PARAMS)
if (!ctx->_ImageTransferState &&
!srcPacking->SwapBytes &&
- (dstFormat == MESA_FORMAT_AL88 || dstFormat == MESA_FORMAT_RG88) &&
- baseInternalFormat == srcFormat &&
+ ((dstFormat == MESA_FORMAT_AL88 &&
+ baseInternalFormat == GL_LUMINANCE_ALPHA &&
+ srcFormat == GL_LUMINANCE_ALPHA) ||
+ (dstFormat == MESA_FORMAT_RG88 &&
+ baseInternalFormat == srcFormat)) &&
srcType == GL_UNSIGNED_BYTE &&
littleEndian) {
/* simple memcpy path */
@@ -2305,8 +2308,11 @@ _mesa_texstore_unorm1616(TEXSTORE_PARAMS)
if (!ctx->_ImageTransferState &&
!srcPacking->SwapBytes &&
- (dstFormat == MESA_FORMAT_AL1616 || dstFormat == MESA_FORMAT_RG1616) &&
- baseInternalFormat == srcFormat &&
+ ((dstFormat == MESA_FORMAT_AL1616 &&
+ baseInternalFormat == GL_LUMINANCE_ALPHA &&
+ srcFormat == GL_LUMINANCE_ALPHA) ||
+ (dstFormat == MESA_FORMAT_RG1616 &&
+ baseInternalFormat == srcFormat)) &&
srcType == GL_UNSIGNED_SHORT &&
littleEndian) {
/* simple memcpy path */