https://bugs.winehq.org/show_bug.cgi?id=52841
Bug ID: 52841 Summary: leverless arcade controller SOCD cleaning regression Product: Wine Version: 7.0 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: namtsui@gmail.com Distribution: ---
Created attachment 72236 --> https://bugs.winehq.org/attachment.cgi?id=72236 fix
downstream bug: https://github.com/ValveSoftware/Proton/issues/5527
There is a regression in wine SDL. I tested wine 7.0 using Linux 5.17.2. I think this is the commit to blame: https://github.com/wine-mirror/wine/commit/9cf1e8353cf05af1009e3e5d40b62f0e7...
See the file: wine-7.0/dlls/winebus.sys/bus_sdl.c https://github.com/wine-mirror/wine/blob/6d4ec1255acceec7152ed98764ee29991ac...
Leverless arcade controllers have all-buttons. One such controller is the hitbox controller from the company hitbox. It has four directional buttons mapped to DPAD. It has simultaneous opposite cardinal direction (SOCD) cleaning. If you hold down + up, it should output up. If you hold left + right, it should output nothing at all (neutral).
I added print statements. See the attached fix.
In clip 1, I demonstrate SDL2 events when down and up are held simultaneously during a jump for a while:
hold down (DOWN press event) hold up (DOWN release event. UP press event.) hold both for a while release all (UP release event. DOWN release event.)
[1] https://clips.twitch.tv/PlausibleSparklingButterJonCarnage-1nJQjUmS_kATb5Y6
In clip 2 the actual bug is shown.
hold down (DOWN press event) press up (DOWN release event. UP press event.) steps 1 to 2 were demonstrated in clip 1. release up (DOWN press event. UP release event.) keep holding down
[2] https://clips.twitch.tv/FunnyPlayfulClintmullinsArgieB8-p3pUOVQuS-eA8oqi
The UP release event at the end in step 3 causes the axis to be reset to 0. This ignores the DOWN press event immediately preceding it.
Clip 3 shows after the proposed fix is applied.
[3] https://clips.twitch.tv/RacyNeighborlyCookiePeteZaroll-2wwLnflwjAa3ZlFz
https://bugs.winehq.org/show_bug.cgi?id=52841
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |hardware, patch, regression CC| |rbernon@codeweavers.com Regression SHA1| |9cf1e8353cf05af1009e3e5d40b | |62f0e70761f3f
https://bugs.winehq.org/show_bug.cgi?id=52841
Gijs Vermeulen gijsvrm@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|-unknown |hid Summary|leverless arcade controller |Leverless arcade controller |SOCD cleaning regression |SOCD cleaning does not work
--- Comment #1 from Gijs Vermeulen gijsvrm@gmail.com --- Could you try with wine-7.9 to make sure the regression in still present?
https://bugs.winehq.org/show_bug.cgi?id=52841
--- Comment #2 from Nam Nguyen namtsui@gmail.com --- I tested wine 7.10, and the regression is still present. I attached a fresh proposed fix that applies cleanly to 7.10.
One detail I forgot to include was that there are at least two forms of SOCD cleaning. Horizontal axis: Last input wins and left + right = neutral. Vertical axis: down + up = up
With last input wins: hold left then hold right. the controller will output right, even though both left and right are held. hold right then hold left. the controller will output left, even though ""
With left + right = neutral: hold left then hold right. neutral is output. hold right then hold left. neutral is output.
My hitbox controller has left + right = neutral style. My hitbox controller also has down + up = up. I don't have a way to test for last input wins, but my patch attempts to account for all these variants. The patch makes sure that release event on a button does not just reset to 0 without checking the opposite direction first.
https://bugs.winehq.org/show_bug.cgi?id=52841
--- Comment #3 from Nam Nguyen namtsui@gmail.com --- Created attachment 72557 --> https://bugs.winehq.org/attachment.cgi?id=72557 fix 7.10
https://bugs.winehq.org/show_bug.cgi?id=52841
--- Comment #4 from Rémi Bernon rbernon@codeweavers.com --- Created attachment 72558 --> https://bugs.winehq.org/attachment.cgi?id=72558 Alternative fix.
Hi, thanks for the report and the patch, and sorry for the delay. Would something like the attached patch work too? I think it'd be a bit simpler.
https://bugs.winehq.org/show_bug.cgi?id=52841
--- Comment #5 from Nam Nguyen namtsui@gmail.com --- (In reply to Rémi Bernon from comment #4)
Created attachment 72558 [details] Alternative fix.
Hi, thanks for the report and the patch, and sorry for the delay. Would something like the attached patch work too? I think it'd be a bit simpler.
No worries on the delay. Thank you for the fix. Your fix resolves the issue. I have tested it on my controller which does down+up = up and left+right = neutral on wine 7.10. I am not able to test last input wins, but it sounds like it could work.
https://bugs.winehq.org/show_bug.cgi?id=52841
Rémi Bernon rbernon@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |FIXED Fixed by SHA1| |e2936702a47247f806478f16d46 | |31516ca2c3e9f Status|UNCONFIRMED |RESOLVED
--- Comment #6 from Rémi Bernon rbernon@codeweavers.com --- I believe this is fixed after e2936702a47247f806478f16d4631516ca2c3e9f.
https://bugs.winehq.org/show_bug.cgi?id=52841
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #7 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 7.11.
https://bugs.winehq.org/show_bug.cgi?id=52841
Michael Stefaniuc mstefani@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |7.0.x
https://bugs.winehq.org/show_bug.cgi?id=52841
Michael Stefaniuc mstefani@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|7.0.x |---
--- Comment #8 from Michael Stefaniuc mstefani@winehq.org --- Removing the 7.0.x milestone from bug fixes included in 7.0.2.