Replace stock XInput path with SDL Gamepad API

from what i’ve seen in various Unreal Engine-based games: they often use XInput (come out of the box in Unreal), but if they wanna say…implement Motion Sensors specifically for Gyro Aiming: they’d need to use one of the plugins available…but the majority will use between WinDualShock or Steamworks SDK for it, the former is far more likely to be used by triple-a game studios as they’d plan to ship it on PlayStation platforms…but not all devs will be able to do so.

As of this writing, the best way to expand the engine’s existing controller support is to use GameInput API, but it’s considered a plugin, and I’m certain not everyone will be familiar with it.


So, i’m thinking of a potential alternative, one that could replace the defaulted XInput path with an open-source equivalent but can support more features than XInput could ever do.

and it’s actually been on Linux versions of Unreal Engine for a long time, but not on Windows OS…but that should change!

Simple DirectMedia Layer is a hardware abstraction layer that does many things, one of them is the Gamepad portion. You probably seen it in action in newer emulators, sourceports and some mods like Sonic Adventure 2 Input Controls Mod, [Haste: Broken Worlds] Hasty Controls and [FEAR 1] EchoPatch and Godot Engine starting in Version 4.5. Unreal Engine already uses SDL2’s subsystems for Linux, but for game developers using UE5: Rivals of Aether 2 upgraded their entire Input System to rely on SDL3’s Gamepad API

SDL Gamepad API aims to abstract all HID Game Controller to “speak” Xbox, no need to implement two different input APIs when you can let one do all the heavy lifting. This will enable support for sooooo many controllers (yes, including Xbox controllers) on the market without the need to adjust each controller’s internal mappings, as it’ll provide an internal controller database. This can be enhanced even further with a community-driven database.

Implementing SDL Gamepad API will allow additional controller features that XInput doesn’t have, such as:

  • Gamepad Icon Type detection via SDL_GamepadGetType (comes with Steam Virutal Gamepad / Steam Input helper function support)
  • Motion Sensors (will allow restoring SIXAXIS features from the PS3 version, while exploring the possibility for Gyro Aiming support down in the line!)
  • Trigger Rumbles/Impulse Triggers
  • Paddle/Misc Buttons
  • Touchpad
  • Lightbar/RGB
  • DualSene’s Adaptive Triggers*

*technically, you’d need to use SDL_SendGamepadEffect first, then make the trigger effects. Thankfully, there’s already reverse-engineered source code for it.

coincidentally, this makes it a lot easier to support Steam Controller (2nd Generation) on Unreal Editor and Commercial without the need for Steam Input or third-party software

the idea would be to eventually replace XInput in favor of SDL Gamepad API to better futureproof Controller Support across the board, while being easier for game developers across all PC/Mobile Operating Systems to closely mirror console versions’ controller support, without the need for special licensed SDKs, plugins, or straight-up modifying the entire input stack. Of course: developers can still use WinDualShock (for PlayStation controllers only), GameInput or alternatives if they want Audio-based Haptic Feedback or need Racing Wheel support.

in the advent of Unreal Engine 6: now’s the right time to upgrade the pre-existing XInput path.

XInput was great for its time, but controllers have evolved far beyond what it can handle. SDL Gamepad API seems like a logical next step: one open system with better device support, gyro, touchpads, adaptive triggers, and fewer custom integrations.

The biggest hurdle is adoption and compatibility, not the idea itself. A gradual SDL backend alongside XInput would probably be the safest route, especially for Unreal Engine 6. Moving toward a more flexible controller layer would make PC support much closer to consoles.