Proton Version: 10.0
In Windows, XInput is a user-mode library implemented on top of the XUSB driver. In Windows, it is possible to skip XInput and read directly from the XUSB driver. You can see an example of how this is done in the following gist: https://gist.github.com/mmozeiko/b8ccc54037a5eaf35432396feabbe435
However, Proton does not appear to emulate this at all. SetupDiGetClassDevsW does not see any controllers with the XBox GUID, nor do you recieve WM_DEVICECHANGE messages from Xbox devices. It instead seems to be faking the controller input some other way. This means you need XInput to read XBox controllers. I wanted to avoid this because of the well-documented stutter when no controllers are connected issue that XInput has. I cannot use the HID device Proton exposes either because it emulates the issue where both triggers are mapped to the same axis, which would be fine, if XUSB worked.
Proton Version: 10.0
In Windows, XInput is a user-mode library implemented on top of the XUSB driver. In Windows, it is possible to skip XInput and read directly from the XUSB driver. You can see an example of how this is done in the following gist:
https://gist.github.com/mmozeiko/b8ccc54037a5eaf35432396feabbe435
However, Proton does not appear to emulate this at all. SetupDiGetClassDevsW does not see any controllers with the XBox GUID, nor do you recieve WM_DEVICECHANGE messages from Xbox devices. It instead seems to be faking the controller input some other way. This means you need XInput to read XBox controllers. I wanted to avoid this because of the well-documented stutter when no controllers are connected issue that XInput has. I cannot use the HID device Proton exposes either because it emulates the issue where both triggers are mapped to the same axis, which would be fine, if XUSB worked.