http://bugs.winehq.org/show_bug.cgi?id=36227
Bug ID: 36227 Summary: Salammbo: invisible mouse pointer in the menus Product: Wine Version: 1.7.11 Hardware: x86 URL: http://www.4players.de/4players.php/download_info/Down loads/Download/4597/Salammbo/Demo__1.html OS: Linux Status: NEW Keywords: download, regression Severity: minor Priority: P2 Component: directx-d3d Assignee: wine-bugs@winehq.org Reporter: gyebro69@gmail.com CC: stefan@codeweavers.com Regression SHA1: adf0ab2ad889c7c6bcda484edfde9a431f829b08
Created attachment 48367 --> http://bugs.winehq.org/attachment.cgi?id=48367 terminal output
The game's custom mouse pointer doesn't show up in the menus, it is invisible.
A regression from 1.7.11:
adf0ab2ad889c7c6bcda484edfde9a431f829b08 is the first bad commit commit adf0ab2ad889c7c6bcda484edfde9a431f829b08 Author: Stefan Dösinger stefan@codeweavers.com Date: Tue Jan 14 13:59:23 2014 +0100
wined3d: Give the DIB section its own location.
:040000 040000 d47e627aba900e5bf8efc446554f5ca33af06ddf bc1f482e29904fcd5994b94e6ff63500c8f4404c M dlls
Fedora 20 Nvidia binary drivers 337.12 X.Org X Server 1.14.4
http://bugs.winehq.org/show_bug.cgi?id=36227
--- Comment #1 from Stefan Dösinger stefan@codeweavers.com --- I haven't looked at the game itself yet, but I think I can see what is going on:
err:d3d:resource_unload Resource 0x12d380 is being unloaded while mapped.
The unload is probasbly triggered by a primary surface recreation. This copies the contents to sysmem and invalidates the DIB section contents. If the game writes data into the DIB after the primary recreation that content is lost.
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.
http://bugs.winehq.org/show_bug.cgi?id=36227
Stefan Dösinger stefan@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Fixed by SHA1| |19f45af19cd0c1162f15d677950 | |6431d1cd99d8c Status|NEW |RESOLVED Resolution|--- |FIXED
--- Comment #3 from Stefan Dösinger stefan@codeweavers.com --- Should be fixed by 19f45af19cd0c1162f15d6779506431d1cd99d8c.
https://bugs.winehq.org/show_bug.cgi?id=36227
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #4 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 1.7.19.