http://bugs.winehq.org/show_bug.cgi?id=14121
--- Comment #7 from Tobias Jakobi liquid.acid@gmx.net 2008-09-06 20:22:40 --- OK, the bug still seems to be there.
New information I gathered with help from Henri Verbeet and Alexander Dorofeyev:
Alexander adviced to play around with the select_fragment_implementation code in directx.c - I stripped it down to always return ffp_fragment_pipeline and voila: the visual errors return.
So it's really a problem originating from using ffp_fragment_pipeline.
Henri Verbeet adviced to enable the frame dumping code in drawPrimitive (drawprim.c) and to match the trace with the backbuffer dumps.
While figuring out how to activate the code we also check the result with texture dumping. However it looks like the textures are not corrupted themself, but somehow wrongly applied.
I created a savegame from a spot where the problem can de reproduced every time. Tracing with +d3d,+d3d8,+d3d_draw and matching turned up this:
Subframe history: #2648: screen is cleared (cyan color) #2649: first geometry drawn on screen #2665: first visual error on screen (weapon model) #2669: last part of weapon model is drawn #2670: more correct geometry is drawn #2700: frame is finished #2701: screen is cleared again (cyan color)
Number of subframes used for full frame: 53 (2700 - 2648 + 1) Frame 17: weapon draw begins
Some tests reveal that at least from this ingame position it always takes these 53 subframes to complete a full frame and it's always frame 17 where the weapon is drawn. The weapon is also the very first geometry that has the textures wrongly applied.
I'm going to attach an excerpt of the trace that contains subframe #2649 to #2669. Like I already said the errors first appear with frame 2665. Maybe someone can figure out what is going wrong there. I'm still looking at the traces and I have began to comment it a bit, with what i think the calls are doing (I'm a d3d newbie, so I might be totally wrong here).
What someone could also test on a nvidia or ATI card: Patching select_fragment_implementation like I did and then also run a test. I'm going to upload my savegame so you don't have to search for a place where the bug appears.
Greets, Tobias