This fixes a performance regression introduced during state redesign shortly after Wine 5.0.
Some games create a great amount of lights (around 1000 and growing) and touch them quite often. That results in each light being relayed to CS thread before each draw which is taking a great amount of time (performance drop in Nosferatu: The Wrath of Malachi from ~150 fps to ~10-15 at start location; that's with another unrelated regression related to streaming buffer management sorted out).
It is also possible to use bitmasks like for other states, but then with these lights amount even iterating over the full set of lights during stateblock apply leads to noticable performance drop.
With this patchset Nosferatu reaches ~180 fps on the same place (~115 on Windows on the same machine, with the difference being probably due to SWVP).
--
v3: wined3d: Use RB tree for storing lights.
wined3d: Track per light state changes in stateblock.
wined3d: Only set changed.lights if wined3d_light_state_enable_light() changed state.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2833
Adds the tray icons implementation based on org.kde.StatusNotifierItem interface usage. Does allow restarting StatusNotifierWatcher object, but will fallback to XEMBED or internal tray, if wine gets initialized when there is no StatusNotifierWatcher object registered.
--
v14: winesni.drv: implement basic balloon notification support
explorer: add winesni.drv tray implementation support
winesni.drv: add KDE StatusNotifierItem implementation for tray
https://gitlab.winehq.org/wine/wine/-/merge_requests/2808
Fix Cafe Stella (SteamID: 1829980) Flowchart crashes once there are 2 things on it.
--
v3: gdiplus: Support playing back pen custom end line cap.
gdiplus: Support playing back pen custom start line cap.
gdiplus: Support recording pen custom end line cap.
gdiplus: Support recording pen custom start line cap.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2870
Adds the tray icons implementation based on org.kde.StatusNotifierItem interface usage. Does allow restarting StatusNotifierWatcher object, but will fallback to XEMBED or internal tray, if wine gets initialized when there is no StatusNotifierWatcher object registered.
--
v13: configure: fix winesni.drv not getting disabled
winesni.drv: implement basic balloon notification support
https://gitlab.winehq.org/wine/wine/-/merge_requests/2808
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53947
Improve performance of GdipDrawImagePointsRect by:
1. avoiding multiplication and use addition where it is possible.
2. avoid calculating `GdipInvertMatrix` if it is not used
It gives noticible speed improvement.
I divided MR to several commits, to better undestand what is going on.
--
v5: gdiplus: Improve performance of GdipDrawImagePointsRect
gdiplus: Improve performance of GdipDrawImagePointsRect
gdiplus: Improve performance of GdipDrawImagePointsRect
https://gitlab.winehq.org/wine/wine/-/merge_requests/2864