http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #5 from christofi.cos@gmail.com 2011-11-28 19:20:19 CST --- Good news: I know where the problem is. Bad news: I think it's in fglrx, so I can't fix it. :(
Specifically: In wined3d/drawprim.c there's a function send_attribute(..) that calls another function glVertexAttrib4hvNV(..).
If I do an evil:
printf("%d\n", GL_EXTCALL(glVertexAttrib4hvNV));
the printed result is 0. Zero.
In other words, this is the cause of the null function in the backtrace I attached earlier. To make matters worse, all this happens inside a critical section, which is what causes the game to freeze but not crash and presumably what gave the RtlpWaitForCriticalSection error when I tried to kill the process.
I see nothing suspicious about how glVertexAttrib4hvNV is brought into the code, since all other functions brought in the same way appear to work. Therefore, the problem must be on the driver side...
If you look at the code, an alternative to glVertexAttrib4hvNV is provided that uses the function glVertexAttrib4fARB. I can't find any documentation that describes what these functions actually do, but if I assume they are the same and use that code instead (NB: hack), the game DOES appear to progress a bit.
The loading dragon disappears instead of freezing and I'm presented with... a black screen and new ambient sounds! But the screen stays black and nothing happens -- the Bethesda logo should normally appear. I don't know if this is a new and unrelated problem or if it's something caused by the modification I made. I will look into it if I can find the time.