There is a description of this problem on Wine's Bugzilla, I'll refer to that first:
I did some tests and I am now inclined to believe this is a Mesa bug:
After making an apitrace and replaying it, I only see incorrect rendering when using hardware rendering (Mesa, Gallium3D, radeonsi). When the same apitrace is replayed in software mode, the rendering is correct and looks like it is supposed to.
Another user reported the exact same problem with nouveau, but it works fine with the nvidia binary driver.
Can this be reproduced on i965?
i965 seems to be fine, at least matches LIBGL_ALWAYS_SOFTWARE.
Then it must be a DRI state tracker bug.
(In reply to Grazvydas Ignotas from comment #2)
> i965 seems to be fine, at least matches LIBGL_ALWAYS_SOFTWARE.
Actually, what exactly did you see? You need to run the trace with a low frame rate to be able to see it. The bug is that the cursor animation stops when the cursor stops moving.
The cursor is animating, I even tried the game itself (there is a link to free demo in wine bug) and the cursor does animate properly even when inputs are not touched. FWIW I'm using DRI3 on X.Org 1.18.1 on Skylake GPU.
I've put my HD 5770 in and can confirm r600g suffers from this too.
When you open the trace with qapitrace, you'll see that appears as one single big frame. This is a big clue as to what's going on. Somehow, the game/Wine doesn't trigger the usual swap buffers logic, which means screen refreshes don't happen reliably. Seems most likely to be a Wine bug, to be honest.
(In reply to Nicolai Hähnle from comment #7)
> When you open the trace with qapitrace, you'll see that appears as one
> single big frame. This is a big clue as to what's going on. Somehow, the
> game/Wine doesn't trigger the usual swap buffers logic, which means screen
> refreshes don't happen reliably. Seems most likely to be a Wine bug, to be
Doesn't that mean frontbuffer rendering?
This hack fixes the bug:
diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c
index a983d64..806ca60 100644
@@ -194,8 +194,6 @@ st_framebuffer_validate(struct st_framebuffer *stfb,
new_stamp = p_atomic_read(&stfb->iface->stamp);
- if (stfb->iface_stamp == new_stamp)
/* validate the fb */
These stamps are like black magic to me.
Gabriel Knight 3 is another Wine direct draw game with a similar problem.
When restoring a saved game the screen stops refreshing, but the game still runs.
Applying the suggested patch or using LIBGL_ALWAYS_SOFTWARE works around the problem.
Problem is gone with Mesa 17.2.4 and Wine 2.21. I haven't done any reliable testing and therefore I am not sure what fixed or hid it, or when it happened.
Resolving per comment 11, thanks for the report and followup.