https://bugs.winehq.org/show_bug.cgi?id=47491
Bug ID: 47491 Summary: dinput event queue is overflowing and stalling the whole game/wineserver Product: Wine Version: 4.2 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: directx-dinput Assignee: wine-bugs@winehq.org Reporter: stefan.riesenberger@gmail.com Distribution: ---
Created attachment 64873 --> https://bugs.winehq.org/attachment.cgi?id=64873 Achive with a +dinput log of 125hz and 1000hz pollrate mouse movement
The game tested was Borderlands 1 Enhanced Edition via Proton (not a Proton issue though), because it is one of the most severe examples of this issue. The game completely freezes when moving the mouse with the pollrate set to 1000Hz. It only unfreezes when the mouse isn't moving anymore. This issue occurs in multiple games resulting in huge framedrops when moving the mouse. A temporary workaround is to set the mouse pollrate to 125Hz, but it's not a real solution to the problem.
As already mentioned in the title the event queue of dinput is constantly overflowing which blocks anything else running on the wineserver. I attached 2 logs with +dinput. Both were recorded for the same amount of time, one containing the overflow with 1000Hz and one recorded at 125Hz.
My guess is that this problem occurs due to the single threaded nature of wineserver and the huge amount of input data that arrives from the mouse. The most elegant solution would probably be to move the input processing and handling as much as possible outside of wineserver (glancing at esync), but I am no expert in that regard.
kind regards, Riesi