https://bugs.winehq.org/show_bug.cgi?id=57070
Bug ID: 57070 Summary: OpenGL performance regression in Wine 9.15 Product: Wine Version: 9.15 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: winex11.drv Assignee: wine-bugs@winehq.org Reporter: i.r.e.c.c.a.k.u.n+bugs.winehq.org@gmail.com Distribution: ---
In Wine 9.15, I observe a serious performance regression, presumably in OpenGL apps. DirectX stuff is fine.
Extended renderer info (GLX_MESA_query_renderer): Vendor: AMD (0x1002) Device: AMD Radeon RX 580 Series (radeonsi, polaris10, ACO, DRM 3.58, 6.11.0-rc3) (0x67df) Version: 24.1.5 Accelerated: yes Video memory: 8192MB Unified memory: no Preferred profile: core (0x1) Max core profile version: 4.6 Max compat profile version: 4.6 Max GLES1 profile version: 1.1 Max GLES[23] profile version: 3.2
Can't say much more, nothing interesting in logs. However, I have done a bisection.
849d7aa3c72df7fee0372a7fcc9e058a4b3795bf is the first bad commit commit 849d7aa3c72df7fee0372a7fcc9e058a4b3795bf Author: Rémi Bernon rbernon@codeweavers.com Date: Mon Jul 1 11:03:57 2024 +0200
winex11: Rely on win32u previous surface reuse.
dlls/winex11.drv/bitblt.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-)
Unfortunately, I don't understand what's going on with this code.
https://bugs.winehq.org/show_bug.cgi?id=57070
Hanabishi i.r.e.c.c.a.k.u.n+bugs.winehq.org@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Regression SHA1| |849d7aa3c72df7fee0372a7fcc9 | |e058a4b3795bf
https://bugs.winehq.org/show_bug.cgi?id=57070
Hanabishi i.r.e.c.c.a.k.u.n+bugs.winehq.org@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |regression
https://bugs.winehq.org/show_bug.cgi?id=57070
Rémi Bernon rbernon@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |rbernon@codeweavers.com
--- Comment #1 from Rémi Bernon rbernon@codeweavers.com --- Do you have an example of a GL application that can be used to investigate?
https://bugs.winehq.org/show_bug.cgi?id=57070
--- Comment #2 from Hanabishi i.r.e.c.c.a.k.u.n+bugs.winehq.org@gmail.com --- Well, that's a tricky question.
I use https://github.com/FunkyFr3sh/cnc-ddraw to run old 2D games. It supports multiple rendering backends.
GDI / OpenGL / Direct3D 9 renderer
Before this commit, OpenGL renderer performed perfectly fine. After this commit, OpenGL renderer performs even worse than GDI. Direct3D 9 renderer is seemingly unaffected, but it requires DXVK.
I'm not sure about other OpenGL apps. I would try to find something easier to test on. Maybe it's cnc-ddraw exclusive issue after all.
https://bugs.winehq.org/show_bug.cgi?id=57070
--- Comment #3 from Hanabishi i.r.e.c.c.a.k.u.n+bugs.winehq.org@gmail.com --- Hmm, I picked up https://sourceforge.net/projects/openglchecker/ for testing, but it does not show any regression in its benchmarks.
So looks like it's indeed a cnc-ddraw exclusive issue. Do you have ideas how it could be affected? Do I need to report in into cnc-ddraw upstream instead?
https://bugs.winehq.org/show_bug.cgi?id=57070
Hanabishi i.r.e.c.c.a.k.u.n+bugs.winehq.org@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|OpenGL performance |cnc-ddraw OpenGL |regression in Wine 9.15 |performance regression in | |Wine 9.15
https://bugs.winehq.org/show_bug.cgi?id=57070
--- Comment #4 from Hanabishi i.r.e.c.c.a.k.u.n+bugs.winehq.org@gmail.com --- Ok, created issue upstream. We'll see. https://github.com/FunkyFr3sh/cnc-ddraw/issues/344
https://bugs.winehq.org/show_bug.cgi?id=57070
--- Comment #5 from Rémi Bernon rbernon@codeweavers.com --- Could you try with https://gitlab.winehq.org/wine/wine/-/merge_requests/6233 applied on top? The MR was unrelated but I think some of its changes might help.
https://bugs.winehq.org/show_bug.cgi?id=57070
--- Comment #6 from Hanabishi i.r.e.c.c.a.k.u.n+bugs.winehq.org@gmail.com --- No, applying this MR doesn't seem to change anything.
Although, upstream dev responded with explanation:
cnc-ddraw does also have some special logic to handle the RA2 child windows, it does actually use GDI BitBlt for them and not OpenGL (There's still a opengl context being created and used for the main window though). Direct3D9 and GDI renderer also use the same BitBlt trick on the menus.
Also confirmed by setting a workaround option:
Just for a test, could you try to set "fixchilds=3" in ddraw.ini? That would hide the child windows and also disables the bitblt. This is not actually a good thing to do, but maybe it would help to find out what's wrong.
Disabling BitBlt mitigates the issue.
https://bugs.winehq.org/show_bug.cgi?id=57070
--- Comment #7 from Rémi Bernon rbernon@codeweavers.com --- Thanks for the hint, will keep looking.
https://bugs.winehq.org/show_bug.cgi?id=57070
--- Comment #8 from Rémi Bernon rbernon@codeweavers.com --- Are you using Wine virtual desktop mode? CNC windowed/fullscreen mode?
https://bugs.winehq.org/show_bug.cgi?id=57070
--- Comment #9 from Hanabishi i.r.e.c.c.a.k.u.n+bugs.winehq.org@gmail.com --- I tried different combinations. Regular windowed and fullscreen, Wine virtual desktop, launch in Gamescope to isolate from DE compositor. The same result everywhere.
https://bugs.winehq.org/show_bug.cgi?id=57070
--- Comment #10 from Rémi Bernon rbernon@codeweavers.com --- Created attachment 76942 --> https://bugs.winehq.org/attachment.cgi?id=76942 Possible fix
I think I found the issue, does this patch fixes it for you?
https://bugs.winehq.org/show_bug.cgi?id=57070
--- Comment #11 from Hanabishi i.r.e.c.c.a.k.u.n+bugs.winehq.org@gmail.com --- Yes, it works! Thank you.
https://bugs.winehq.org/show_bug.cgi?id=57070
Rémi Bernon rbernon@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |FIXED Status|UNCONFIRMED |RESOLVED Fixed by SHA1| |d9595daa1a0e2e0c5032ef0653a | |41ebbbf69a354
--- Comment #12 from Rémi Bernon rbernon@codeweavers.com --- Fixed with d9595daa1a0e2e0c5032ef0653a41ebbbf69a354.
https://bugs.winehq.org/show_bug.cgi?id=57070
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #13 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 9.16.