http://bugs.winehq.org/show_bug.cgi?id=29731
Bug #: 29731 Summary: Corrupted 3d overlay graphics in Temple of Elemental Evil. Product: Wine Version: 1.3.37 Platform: x86-64 OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: directx-d3d AssignedTo: wine-bugs@winehq.org ReportedBy: i30817@gmail.com Classification: Unclassified
Some of the temple of elemental evil overlays 3d over 2D that the game uses for "advanced" effects like flames, particles and spells are misbehaving in recent wine versions.
I am using the fglrx driver: Catalyst™ Version 11.11 Driver Packaging Version 8.911-111025a-128237C-ATI 2D Driver Version 8.91.4 Catalyst™ Control Center Version 2.13 RandR Version 1.3 OpenGL Provider Advanced Micro Devices, Inc. OpenGL Renderer ATI Mobility Radeon HD 4500 Series OpenGL Version 3.3.11251 Compatibility Profile Context
You can test it in the current version by running the game; waiting a while in the menu: some flames in the scrolling background should appear. If the error exists they flicker in and out of existence - they almost can't be seen - (or the demo, i'm not sure if one exists and has a menu)
I have bisected it to:
cf421e1b3f29c0df242f43bc235dab1f7410dd6b is the first bad commit commit cf421e1b3f29c0df242f43bc235dab1f7410dd6b Author: Henri Verbeet hverbeet@codeweavers.com Date: Fri Jul 15 01:14:49 2011 +0200
wined3d: Don't set GL_MAP_UNSYNCHRONIZED_BIT for WINED3D_BUFFER_DISCARD maps.
WINED3D_BUFFER_DISCARD means the (current) buffer contents are undefined for subsequent operations. I.e., the map doesn't have to wait for any pending operations to finish, and can just return a new buffer with undefined contents. GL_MAP_UNSYNCHRONIZED_BIT means the driver doesn't wait for previous operations to finish, and just maps a buffer that's potentially in use. Proper synchronization is left to the application. Note that we set both GL_MAP_INVALIDATE_BUFFER_BIT and GL_MAP_UNSYNCHRONIZED_BIT. GL_MAP_INVALIDATE_BUFFER_BIT corresponds to WINED3D_BUFFER_DISCARD, and might cause the driver to return a new buffer, but it's not required to make that optimization.
:040000 040000 073e95d9d973196ef547deddea7652e265e5fa07 553af26c9b506e0694ad55bfb7be96e29db1cf5e M dlls
You must be aware that "before" the effect wasn't correct either; just "differently broken"; where instead of the flame disappearing almost completely there are graphical artefact's - this bisect pinpoints the "graphical artifacts" change, the earliest error (before all looked ok):
68b15bc5ffe6ddf5d08cbc13479eaf718ad5e39f is the first bad commit commit 68b15bc5ffe6ddf5d08cbc13479eaf718ad5e39f Author: Stefan Dösinger stefan@codeweavers.com Date: Tue Apr 19 21:24:26 2011 +0200
wined3d: Give GL_ARB_map_buffer_range another try.
Nvidia's 270.xx.yy driver series fix the glMapBuffer alignment issues that caused major performance problems. If the user is using an older driver we now drop the VBO instead of using doublebuffered loading, which means that we fall back to the current behavior(no dynamic VBO) as needed. Dynamic VBOs are needed on Nvidia drivers for GL_ARB_instanced_arrays.
:040000 040000 0cada15043b731febf2ef2a673aaaecc4af75f8d c474ade74a8db2a9c547674dbb4c809841087a3d M dlls
Before this bisect; the flames and spell effects were ok. After it has the graphical artifacts; And after it (on the first bisect); it has the "flashing" 3d particles/objects. I am i no way saying that the other artifacts are better than the "flashing" (they're not), only that it's not completely fixed yet.
That GL ARB regression seems a duplicate of : http://bugs.winehq.org/show_bug.cgi?id=27600 )