https://bugs.winehq.org/show_bug.cgi?id=47070
--- Comment #18 from Cameron Moore moore.cameron1111@gmail.com --- Did not fix it, but it seems to be related to something to do with a few possible things. First off, I was most likely wrong on the previous comment about xinput1_4.dll, it should probably only need xinput9_1_0.dll.
The game uses XInputGetState for a certain number of frames at the start. Adding a sleep to the XInputGetState function somehow made it call it more times. On my computer it calls it 10 to 12 times regularly. With a 5 second sleep on the function, it is able to call it around 20 times.
It seems that as soon as a thread called "AsyncOpManager" and something like "EAAudioCore Dac" are named / created, XInputGetState is never called again. RegisterRawInputDevices is also called around the time that it stops calling XInputGetState.
However, when +relay is used, it never calls XInputGetState at all. This leads me to believe that maybe there is a bug with rawinput or something to do with AsyncOpManager. This is speculation though.
Running gdb with it seems fairly unhelpful as when a SIGINT is sent to the application, every thread that is seemingly related to the issue is stopped in a seemingly unrelated place (possibly a signal handler function).
Anyway, just putting this out there for anyone else who might look into the bug as I am mentally drained from looking into it at this point. One more helpful point, disable the Origin / EA App in-game-overlay. It injects hooks into the xinput dlls that are most likely unrelated to the problem, probably to get input to the overlay.
Some helpful flags for debugging this might include "+seh,+loaddll,+hid,+hidp,+xinput,+dinput,+rawinput,+thread,+threadname".