So here are my findings based on your suggestions.
HID
- Device reservation doesn’t seem to work correctly when both joysticks are enabled. If only one is enabled, I am able assign the settings. However, if both are enabled, the setting for player reservation will not assign. The UI seems to hang for a moment, then display incorrectly (floating text over text), then shows as unassigned.
- Encoders still swap in most games, with player two becoming player one most of the time.
MFI
- Button assignment still seems totally random in both the menus and games. But they are consistent in their ‘random’ assignment, like the bindings just never take effect.
SDL2
- This more or less confirms my theory that MacOS Sequoia has a joystick / SDL2 bug. As soon as this driver is enabled, RetroArch crashes like all my other emulators.
The two joystick controllers are the same make, model, etc. I don’t know how RetroArch tracks which is which as they both just display as Generic USB Joystick (#N) with N being 1 or 2 depending on which devices was enabled first.
Now here is the real kicker… I noticed that more often than not, the joystick that is intended to be player two, ends up registering as player one in most games. So I figured that maybe there is a SN on the controller that either RetroArch or MacOS was using to set a priority. So I went through the time consuming process of ripping apart my control deck, and swapping the encoders around. And even after that the controllers still swap when launching a game, with the new encoder two still wanting to take over as player one.
The only difference between my player one setup and my player two setup is that player one wires in 2 additional buttons. But I can’t for the life of me think of any reason that would matter to the order in which the encoders are assigned.
The only way I have been able to consistently get encoder one to assign to player one is to launch RetroArch with only player one’s encoder enabled. Then launch a game. Then enable encoder two for player two.