https://bugs.winehq.org/show_bug.cgi?id=37424
Bug ID: 37424 Summary: Path of Exile: Graphical Glitches with GLSL Disabled Product: Wine Version: 1.7.29 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: teddy5978@gmail.com Distribution: ---
Created attachment 49774 --> https://bugs.winehq.org/attachment.cgi?id=49774 One example of the problem
Since 1.7.1, every version of Wine including the latest as of this writing 1.7.29 (32 or 64 bit) has graphical glitches throughout the Path of Exile in-game user interface with the settings required to make the load and play without frame drops. (Wine will load Path of Exile on my test systems with Offscreen Renderer set to 'Backbuffer,' and GLSL set to 'Disabled', which is required to fix the frame drop issue reported in bug 34011.)
Examples of Glitches from largest to smallest -
- GUI menus and status screens on the left-hand side, such as the waypoint menu, the social screen, options screen, etc., when opened, can cause blackout of most of the gameplay area (see attached screenshot), occasionally only manifesting when mouse cursor is moved into a certain area when the menu is open -- not 100% consistent but will do this 'most of the time,' particularly when entering a new area
- Textured border designs on GUI menus and status screens randomly do not display, instead showing a flickering transparent area
- Corners of border design missing from logon screen
Glitches consistently reproduced on different systems. Example: Ubuntu Linux 14.04 LTS 64-bit Intel Core i7-4790 8 GB DDR3 RAM Fast SSD hard drive Video Card: Nvidia GeForce GTX 750 Ti with 2GB memory Nvidia proprietary driver 337.25 (all versions including latest beta tested, no difference) Screen Resolution: 1920x1080 (1080p), Path of Exile runs in full screen mode typically, glitches show in windowed mode / virtual desktop too
https://bugs.winehq.org/show_bug.cgi?id=37424
Wylda wylda@volny.cz changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Version|1.7.29 |1.7.1 URL| |https://www.pathofexile.com | |/downloads/PathOfExileInsta | |ller.msi Keywords| |download, regression Component|-unknown |directx-d3d CC| |hverbeet@gmail.com, | |wylda@volny.cz Ever confirmed|0 |1 Regression SHA1| |37d1e8b79cfc2c4ca7b94758957 | |4179470a06c42
--- Comment #1 from Wylda wylda@volny.cz --- Confirming. Please always describe most reliable and easiest to reproduce issue. In this case, it is games's login menu (missing upper-left & upper-right corners). Or even better - initial "Loading..." screen should display 3 cogwheel. When this problem is present, they are missing and you can only see the "Loading...".
Introduced by commit wine-1.7.0-51-g37d1e8b:
commit 37d1e8b79cfc2c4ca7b947589574179470a06c42 Author: Henri Verbeet hverbeet@codeweavers.com Date: Fri Aug 16 09:12:30 2013 +0200
wined3d: Try to avoid redundant constant updates.
This gives a minor performance improvement. For example, in 3DMark03 Game Test 1 this gives about a 4% improvement, in the Counter Strike: Source stress test it's about 1%. (NVIDIA GF9600M, Intel T9550, 1024x768).
Revert makes this problem go away.
This is reproducible only if "UseGLSL"="disabled". Please note the console line:
err:winediag:wined3d_dll_init The GLSL shader backend has been disabled. You get to keep all the pieces if it breaks.
https://bugs.winehq.org/show_bug.cgi?id=37424
--- Comment #2 from Wylda wylda@volny.cz --- Created attachment 49827 --> https://bugs.winehq.org/attachment.cgi?id=49827 comparison: good vs. bad
https://bugs.winehq.org/show_bug.cgi?id=37424
--- Comment #3 from Sovyn teddy5978@gmail.com --- @ Wylda
Thanks for the info.
I spent most of today trying trying to revert commit 37d1e8b79cfc2c4ca7b947589574179470a06c42
.. but the best I could do was revert it in Wine 1.7.1. For Path of Exile, we need a recent version of wine so that the slowdown on mana use bug does not rear its ugly head (See the "1.2.2 update fps drop" comment on the Path of Exile WineHQ page): https://appdb.winehq.org/objectManager.php?sClass=version&iId=25078 (basically, I go from 250 FPS to ~30 when using a skill that costs mana in-game, and when mana globe is full again, back to 250)
When trying to revert against 1.7.28, unfortunately it seems to indicate that there are too many changes since this commit to revert it.
Anyone come up with a patch to fix this that would apply against the latest wine? I'd be grateful.
What version of wine were you using to test the revert, Wylda?
https://bugs.winehq.org/show_bug.cgi?id=37424
--- Comment #4 from Wylda wylda@volny.cz --- I revert it on top of wine-1.7.0-51. It effectivly means wine-1.7.0-50 was the reverted version.
The commit covers several files and is more then 1year old, so rather than revert, you should wait for Henri if he finds some time. In the mean time, i would stick to wine-1.7.0 for playing this game.
https://bugs.winehq.org/show_bug.cgi?id=37424
Henri Verbeet hverbeet@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |stefan@codeweavers.com Resolution|--- |INVALID
--- Comment #5 from Henri Verbeet hverbeet@gmail.com --- (In reply to Wylda from comment #1)
This is reproducible only if "UseGLSL"="disabled". Please note the console line:
err:winediag:wined3d_dll_init The GLSL shader backend has been disabled. You get to keep all the pieces if it breaks.
I'm afraid that's also what makes this bug automatically INVALID.
We keep the ARB program shader backend around because the code already exists and some people find it useful, and we try not to break it on purpose, but it's essentially up to the people using it to keep it working. That said, perhaps Stefan (CC'd) is interested in this one.
https://bugs.winehq.org/show_bug.cgi?id=37424
Wylda wylda@volny.cz changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #6 from Wylda wylda@volny.cz --- OK, closing.
https://bugs.winehq.org/show_bug.cgi?id=37424
Sovyn teddy5978@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|CLOSED |REOPENED Resolution|INVALID |---
--- Comment #7 from Sovyn teddy5978@gmail.com --- (In reply to Henri Verbeet from comment #5)
(In reply to Wylda from comment #1)
This is reproducible only if "UseGLSL"="disabled". Please note the console line:
err:winediag:wined3d_dll_init The GLSL shader backend has been disabled. You get to keep all the pieces if it breaks.
I'm afraid that's also what makes this bug automatically INVALID.
We keep the ARB program shader backend around because the code already exists and some people find it useful, and we try not to break it on purpose, but it's essentially up to the people using it to keep it working. That said, perhaps Stefan (CC'd) is interested in this one.
Henri, If you are going to change the code that many users still rely upon, the code that used to work fine, can we please give a somewhat coding-ignorant person like me some idea of where the problem might be so I can make a patch to fix it?
There are a LOT of Wine users that play Path of Exile and we all MUST disable GLSL in order to play end-game as the current Wine GLSL support is simply too slow to keep up even on the best desktop systems.
Or perhaps the individual you mentioned, Stefan, can help?
Re-opening this as it effects hundreds if not thousands of users.
https://bugs.winehq.org/show_bug.cgi?id=37424
--- Comment #8 from Stefan Dösinger stefan@codeweavers.com --- I haven't looked at the details yet, but my guess is that the game switches between fixed function fragment processing and pixel shaders without changing any pixel shader constants at the same time. In the GLSL ffp replacement shader bump map constants are separated from pixel shader constants. In ARB they share the same global constant "namespace".
Henri's patch probably doesn't trigger a constant update in this case since it is not needed in GLSL. If my theory is right the solution may be to trigger a constant reload in shader_arb_select if the previous draw did not use a pixel shader, but the current one does, or vice versa. I believe such a reload is already triggered somewhere, but I can't find it right now.
https://bugs.winehq.org/show_bug.cgi?id=37424
--- Comment #9 from Sovyn teddy5978@gmail.com --- (In reply to Stefan Dösinger from comment #8)
I haven't looked at the details yet, but my guess is that the game switches between fixed function fragment processing and pixel shaders without changing any pixel shader constants at the same time. In the GLSL ffp replacement shader bump map constants are separated from pixel shader constants. In ARB they share the same global constant "namespace".
Henri's patch probably doesn't trigger a constant update in this case since it is not needed in GLSL. If my theory is right the solution may be to trigger a constant reload in shader_arb_select if the previous draw did not use a pixel shader, but the current one does, or vice versa. I believe such a reload is already triggered somewhere, but I can't find it right now.
I really appreciate your response Stefan and hope you have a little time to help out the Path of Exile on Wine community by taking a further look at the details. If I can help in any way, please let me know.
I have also attached a short log file above (file name: log_d3d_fixme). I'm not certain the problem shows up as output in the log, but it was happening on screen four times during the log so hopefully. I did remove most of the duplicate lines and sections for easier read.
https://bugs.winehq.org/show_bug.cgi?id=37424
--- Comment #10 from Sovyn teddy5978@gmail.com --- Created attachment 49872 --> https://bugs.winehq.org/attachment.cgi?id=49872 log file with d3d fixme errors
https://bugs.winehq.org/show_bug.cgi?id=37424
--- Comment #11 from Stefan Dösinger stefan@codeweavers.com --- Nothing ARB shader related in that log. If the bug is what I suspect it is I don't expect it to show up in a FIXME log.
You may be able to see it in a +d3d,+d3d_shader,+d3d_draw,d3d_constants log. Check for wined3d_device_set_pixel_shader(NULL), followed by wined3d_device_set_pixel_shader(shader != NULL) calls that are not followed by "Loading constants" before the "done all GL drawing" line.
https://bugs.winehq.org/show_bug.cgi?id=37424
--- Comment #12 from Sovyn teddy5978@gmail.com --- (In reply to Stefan Dösinger from comment #11)
Nothing ARB shader related in that log. If the bug is what I suspect it is I don't expect it to show up in a FIXME log.
You may be able to see it in a +d3d,+d3d_shader,+d3d_draw,d3d_constants log. Check for wined3d_device_set_pixel_shader(NULL), followed by wined3d_device_set_pixel_shader(shader != NULL) calls that are not followed by "Loading constants" before the "done all GL drawing" line.
Stefan, thank you for the clues. I did a log file with the switches you suggested. The output is very verbose at around 50MB output per second. There are 33000 instances of the "wined3d_device_set_pixel_shader". I did not see anything offhand with the not equal to (!=) pattern. I did look for a while but nothing is apparent as the output is very extensive as mentioned. I'm probably just too new at this.
Looking at the various sections in between the "Done all gl drawing" lines, I do see some variation. Most sections do have the constants you mentioned.
Could you elaborate on what the "wined3d_device_set_pixel_shader(shader != NULL)" call line would look like in an actual log? For example, the "wined3d_device_set_pixel_shader(NULL)" line you mentioned is actually expressed thus in the log:
trace:d3d:wined3d_device_set_pixel_shader device 0x19a698, shader (nil).
All additional guidance is welcome and appreciated.
https://bugs.winehq.org/show_bug.cgi?id=37424
--- Comment #13 from Stefan Dösinger stefan@codeweavers.com --- It would looks something like
trace:d3d:wined3d_device_set_pixel_shader device 0x19a698, shader 0xdeadbeef.
I.e., the shader that is set is not NULL.
https://bugs.winehq.org/show_bug.cgi?id=37424
--- Comment #14 from Sovyn teddy5978@gmail.com --- Created attachment 49880 --> https://bugs.winehq.org/attachment.cgi?id=49880 Section of a log
@Stefan - here is a section from my log file -
On line 3 -
trace:d3d:wined3d_device_set_pixel_shader device 0x19a698, shader (nil).
Line 126 - trace:d3d:wined3d_device_set_pixel_shader device 0x19a698, shader 0x193740.
But line 210... trace:d3d_shader:shader_arb_ps_local_constants Load bumpmap consts call ok
.. is that OK? Or should I keep looking. :)
Wish I could somehow get a log of just the bug. Feels like fishing right now.
https://bugs.winehq.org/show_bug.cgi?id=37424
Roland Haeder roland@mxchange.org changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |roland@mxchange.org
https://bugs.winehq.org/show_bug.cgi?id=37424
--- Comment #15 from Sovyn teddy5978@gmail.com --- Created attachment 49884 --> https://bugs.winehq.org/attachment.cgi?id=49884 Transparent life bar
Another way this bug manifests itself is that when you are in a party with another player, you often cannot see their life bar to see if they are dead or alive or somewhere in between. It tends to fake some people out and they think the player is dead when in fact this is simply a graphical bug in beta versions of Wine. (Latest stable 1.6.2 is unaffected)
https://bugs.winehq.org/show_bug.cgi?id=37424
--- Comment #16 from Stefan Dösinger stefan@codeweavers.com --- Created attachment 49974 --> https://bugs.winehq.org/attachment.cgi?id=49974 wined3d: Update fragment program constants when switching from arb ffp draws.
Can you give this patch a try? It fixes the corners on the login screen for me.
https://bugs.winehq.org/show_bug.cgi?id=37424
Sovyn teddy5978@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|REOPENED |RESOLVED Resolution|--- |FIXED
--- Comment #17 from Sovyn teddy5978@gmail.com --- Stefan, You're the best! It's fixed. Changing status of this bug to resolved.
Notes for others - I applied Stefan's patch against 1.7.31 and compiled then removed old wine version from system with Synaptic then installed the patched 1.7.31 ('sudo make install' from compile directory). Fix did not work with old wine installed on system and trying to use patched version under PlayOnLinux, for example. But you can use with PlayOnLinux just choose 'System' as wine version to use.
Hopefully this patch makes it into the next version of Wine.
https://bugs.winehq.org/show_bug.cgi?id=37424
Michael Stefaniuc mstefani@redhat.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED CC| |mstefani@redhat.com Resolution|FIXED |---
--- Comment #18 from Michael Stefaniuc mstefani@redhat.com --- Reopening the bug as it should be marked resolved only after the patch makes it in.
https://bugs.winehq.org/show_bug.cgi?id=37424
Sovyn teddy5978@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|REOPENED |RESOLVED Resolution|--- |FIXED
--- Comment #19 from Sovyn teddy5978@gmail.com --- Fixed in Wine 1.7.32
Thanks Stefan!
Marking Resolved - fixed.
https://bugs.winehq.org/show_bug.cgi?id=37424
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Fixed by SHA1| |7b5bf3d4d65935cd8d4deb2ddff | |ff10e7f4358bf
https://bugs.winehq.org/show_bug.cgi?id=37424
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #20 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 1.7.33.