http://bugs.winehq.org/show_bug.cgi?id=36227
--- Comment #2 from Stefan Dösinger stefan@codeweavers.com --- I tested the demo and could reproduce the bug. The problem is that the game modifies the backbuffer contents without mapping it. Before doing that it uses surface_getdc to draw some text. After the silent modification it flips the surface.
The getdc write stays in WINED3D_LOCATION_DIB after the releasedc call. When Flip is called, wined3d copies the DIB data to the screen because it happens to be the most up to date copy. Thus it ignores the drawing operation that the game did without properly warning us.
The best (but still terrible) solution is to copy the DIB back to sysmem if SFLAG_PIN_MEMORY is set and invalidate the dib copy in releasedc for such surfaces. This more or less restores the behavior before adf0ab2a.
Alternatively we can tell users to use the gdi renderer for broken applications like this or create a DIB section for all SFLAG_PIN_MEMORY surfaces even if we're using GL. This has its own set of problems though.