Hm, thanks Supersmo, that's interesting. It should support 4 XInput controllers, 8 Direct Input controllers and keyboard, but it seems like XInput controllers after the 4th aren't just being considered DirectInput like I had assumed. I'll see if I can disable XInput entirely because I don't need any of that functionality.
The thing with these controllers is that all 8 controllers are accessible via DirectInput and 4 of them are also accessible via XInput at the same time. So it is technically possible for 4 of them to be accessed via XInput and the rest via DirectInput. The problem is that it is not easy to know which 4 controllers to skip via DirectInput since the enumeration order can differ and I don't think XInput exposes a unique ID of the controller so all frameworks I have dug into that support both DirectInput and XInput at the same time skip all of the XInput controllers on the DirectInput side when XInput is "activated". I've seen these approaches to dealing with supporting more than 4 XInput controllers in games:
- Only use DirectInput
- Have an option to disable XInput to allow for more than 4 XInput devices.
- Automatically switch to DirectInput if more than 4 XInput controllers are connected. (not so common)
The reason some games have XInput as the default and an option to disable it is that some weird controller issues reported by a smaller set of users "disappear" when accessed via XInput. Also XBox360 controllers via DirectInput don't have rumble effect and triggers are on the same axis so holding both triggers is detected as none of them being pressed. This is due to the XBox360 driver being poorly implemented.