Created attachment 52026 [details]
Screenshot of login screen (bad)
EVE Online (which worked fairly well) started to have severe graphical glitches on r600g (HD4870) over wine. It's unplayable. I bisected this down to:
linker: Use gl_shader_program::AttributeBindings for attrib locations
Actually it seems that all triangles (I guess) are malformed, jump around and aren't textured as they should.
Gentoo on vanilla kernel linux-3.1.0-rc8
Mesa from git, r600g driver
GPU: Radeon HD4870 (x2, only one used), CPU: Intel Core i7-965, MB: ASUS P6T Deluxe
libdrm from git, xf86-video-ati from git, wine-1.3.29, xorg-server-1.11.1
Created attachment 52027 [details]
Screenshot of login screen (good, commit 015d4f61ef9116c9e844299ab9f2b15c653c0450)
Adding author of bisected commit to CC.
*** Bug 41508 has been marked as a duplicate of this bug. ***
Does the application produce any error logging or other debug output?
No, there is no crash, so the application itself probably doesn't even notice something is wrong.
I also checked /var/log/Xorg.0.log and /var/log/messages and couldn't see anything abnormal. Wine also didn't print anything unusual in the terminal.
If I should look somewhere else or should try to run some debug mode, I'd be happy to do so.
By the way ... the performance also seemed to suffer (framerate seems worse with the bug).
Created attachment 52140 [details] [review]
The basic issue seems to be that in _mesa_BindAttribLocationARB() "name" is used for the hashtable key. This is unsafe because that memory is owned by the application and may go away / get overwritten / etc. The attached hack makes at least the Wine d3d tests pass again for me, but obviously introduces a memory leak instead.
It's perhaps also worth pointing out that with the way hash_table_replace() works the key can be in use even after the (original) corresponding data is no longer in the table. This may be undesirable in cases where the lifetime of the key is tied to that of the data.
Actually, ignore that. I just noticed Ian already fixed this at http://lists.freedesktop.org/archives/mesa-dev/2011-October/013075.html.
Fixed on master by the commit below. The bug was a regression in master, so there's no need to cherry pick the patch to a stable branch.
Author: Ian Romanick <firstname.lastname@example.org>
Date: Fri Oct 7 14:29:51 2011 -0700
hash_table: Make string_to_uint_map make a copy of the name
The hash table needs a copy of the key that it can keep for
comparisons during searches.
Signed-off-by: Ian Romanick <email@example.com>
Cc: Stéphane Marchesin <firstname.lastname@example.org>
Tested-by: Luzipher <email@example.com>
Tested-by: Michał Lipski <firstname.lastname@example.org>
Reviewed-by: Kenneth Graunke <email@example.com>