Assetto Corsa Controller Not Detected? XOutput & Wheel Fix

Few racing simulators demand as much mechanical precision and physics integrity as Assetto Corsa. Powered by Kunos Simulazioni’s proprietary physics engine running at a relentless 333 Hz physics evaluation tick rate, the simulation computes tire contact patch deformation, suspension geometry deflection, and aerodynamic slip angles with uncompromising fidelity. However, when you launch the sim hoping to hotlap the Nürburgring Nordschleife or drift Japanese mountain passes, few things halt your progress faster than unresponsive controller inputs, unmapped analog pedals, or the notorious “directinput devices are not ready” initialization crash.

Unlike modern arcade or sim-cade racers that automatically smooth thumbstick steering into gentle virtual arc movements, Assetto Corsa was architected from the ground up for 900-degree direct-drive force feedback wheels. When interfaced with modern PC gamepads, DirectInput retro controllers, PlayStation DualShock/DualSense controllers, or generic third-party gamepads, input routing frequently breaks down between the AssettoCorsa.exe launcher UI and the actual 3D simulation executable (acs.exe).

This technical engineering guide provides an exhaustive, benchmarked resolution architecture to diagnose and resolve every controller failure mode in Assetto Corsa. We examine the exact hardware enumeration pipeline across both the vanilla Kunos launcher and modern Content Manager (CM) with Custom Shaders Patch (CSP), provide step-by-step virtual bus routing via XOutput, tune critical steering gamma and speed sensitivity physics curves, and configure cutting-edge CSP GamepadFX scripts for realistic counter-steering dynamics.

Executive Summary and Assetto Corsa Input Architecture

To diagnose why your controller fails in Assetto Corsa, you must understand the dual-process architecture of the simulator. Assetto Corsa operates as two completely distinct Win32 executables communicating through shared memory structures and configuration INI files:

  • The Launcher Process (AssettoCorsa.exe): A .NET/HTML legacy user interface responsible for menu navigation, car/track selection, and writing input mappings to documents/Assetto Corsa/cfg/controls.ini. This interface uses standard DirectInput 8 and Windows API polling.
  • The Simulation Physics Engine (acs.exe): The high-performance, multi-threaded C++ graphics and physics simulation executable launched by Steam or Content Manager. It reads the pre-compiled controller bindings directly from controls.ini and binds directly to hardware devices upon initialization.

This bifurcation creates severe input synchronization failure points. A gamepad may appear fully functional in the launcher menu, but the moment acs.exe initializes the 3D track environment, the controller becomes completely unresponsive. This occurs because acs.exe re-enumerates hardware devices directly at the kernel driver boundary. If your controller uses a non-standard DirectInput HID descriptor, if its vendor ID (VID) and product ID (PID) are unrecognized, or if Windows has assigned it a higher device index than the primary input slot, acs.exe fails to acquire the device context and drops all inputs.

Input API Subsystem Target Controller Hardware Engine Polling Interface Common Failure Mode in AC
Native XInput Xbox Wireless Controller, Xbox 360, GameSir, 8BitDo Direct polling via XInput DLL Steam Input hooking conflicts, ghost controller slots
DirectInput 8 (DInput) PS4/PS5, generic USB gamepads, vintage steering wheels Legacy DirectInput COM interface “directinput devices are not ready” initialization abort
Virtual XInput (XOutput) Any DInput pad converted via ViGEmBus driver Low-latency virtual Xbox 360 bridge Double input ghosting if physical device is uncloaked
DirectInput FFB Logitech G923/G29, Thrustmaster T300, Fanatec DD Vendor driver FFB torque API Vendor driver daemon desync, missing 32-bit runtime hooks

By establishing an emulated virtual XInput Xbox 360 controller via XOutput and the ViGEmBus kernel driver, you bridge the legacy DirectInput gap, ensuring that acs.exe identifies your hardware as an official Microsoft gamepad with standardized analog trigger and steering thumbstick channels.

Resolving the DirectInput Devices Are Not Ready Initialization Error

The single most pervasive input crash in Assetto Corsa is the modal error message: “directinput devices are not ready”. This error typically halts game initialization during the track loading sequence or freezes Content Manager immediately after clicking “Go!”.

At the software architecture level, this crash occurs within the dinput8.dll subsystem when acs.exe executes the IDirectInput8::CreateDevice or IDirectInputDevice8::SetCooperativeLevel method calls. If any connected USB peripheral fails to return a valid device capabilities structure within the expected timeout window (typically 500 milliseconds), the entire DirectInput enumeration loop aborts with a fatal exception.

Root Causes of DirectInput Initialization Failures:
  • Orphaned Virtual Device GUIDs: Uninstalled emulator drivers (legacy vJoy, PPJoy, old MotioninJoy, or uncleaned VDX drivers) leaving corrupted entries in the Windows Registry under HKCU\System\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM.
  • DirectInput Cooperative Level Conflicts: Background utilities (Discord overlay, GeForce Experience, Rivatuner Statistics Server, or anti-cheat daemons) seizing exclusive foreground focus on DirectInput hooks.
  • USB Selective Suspend Power Cutting: Windows power management shutting off USB root hub power during sim loading, causing the controller’s HID interface to disconnect transiently.
  • Multi-Device Index Collision: Simultaneous connection of flight sticks, throttles, rudder pedals, stream decks, and gamepads exceeding Assetto Corsa’s internal device buffer limit.

Step-by-Step Triage to Clear the Error

  1. Disconnect Superfluous USB Peripherals: Unplug flight simulator yokes, HOTAS throttles, rudder pedals, USB graphic tablets, and secondary numeric keypads. Assetto Corsa enumerates all connected game controllers in a sequential array; extraneous devices can corrupt the device pointer index.
  2. Purge Legacy Registry Joystick GUIDs: Press Win + R, type regedit, and navigate to:
    HKEY_CURRENT_USER\System\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM
    Inspect the OEM keys. If you see remnants of uninstalled software such as VID_045E&PID_028E_OEM mapped to third-party virtual drivers that no longer exist, delete the orphaned entries.
  3. Disable USB Selective Suspend in Windows Power Plan: Open Windows Control Panel → Power Options → Change plan settings → Change advanced power settings. Expand USB settings → USB selective suspend setting, and set it to Disabled. This ensures Windows never drops USB voltage during CPU-intensive asset loading.
  4. Disable Discord and MSI Afterburner Overlays: In Discord settings, navigate to Game Overlay and toggle it off. In RivaTuner Statistics Server (RTSS), set the Application Detection Level for acs.exe to None. These hooks frequently intercept dinput8.dll calls before the Kunos engine can claim them.

Content Manager and Custom Shaders Patch Controller Configuration

If you play Assetto Corsa in 2026, you are almost certainly running Content Manager (CM) alongside Ilja Jusupov’s Custom Shaders Patch (CSP). Content Manager completely supersedes the buggy legacy AssettoCorsa.exe launcher, providing direct access to low-level engine parameters, custom physics extensions, and modernized input mapping.

However, Content Manager introduces its own input configuration layer that must be properly synchronized with your physical hardware or XOutput virtual device.

Navigating the Content Manager Input Matrix

To properly configure your controller inside Content Manager, open Content Manager and navigate to:
Settings → Assetto Corsa → Controls.

At the top of the Controls interface, you will see input category tabs: Wheel, Gamepad, and Keyboard. It is critical to select the correct top-level input paradigm:

  • Select “Gamepad” Tab: If you are using a standard Xbox controller, PlayStation controller, or an XOutput virtual Xbox 360 controller. When “Gamepad” is active, Assetto Corsa activates internal thumbstick filtering, speed sensitivity scaling, and auto-clutch routines.
  • Do NOT Select “Wheel” for Gamepads: If you select “Wheel” while holding a standard gamepad, the sim assumes you possess a 900-degree physical steering wheel with direct 1:1 steering rack travel. The car will be completely uncontrollable, whipping from lock to lock with a 2-millimeter stick deflection.

Crucial Tip for Content Manager Preset Sync

Content Manager stores controller presets in documents/Assetto Corsa/cfg/controllers/presets/. Whenever you alter controller bindings in Content Manager, always click Save Preset at the bottom of the screen and name it (e.g., XOutput_Gamepad_2026). If you do not save the preset, Content Manager may revert to the default keyboard profile upon executing a session via custom server links or trackday mods.

Configuring XOutput for Analog Steering and Progressive Throttle Modulation

For players using generic DirectInput gamepads, retro game controllers, or controllers that drop inputs during Assetto Corsa sessions, XOutput provides the ultimate low-latency translation pipeline. By utilizing the ViGEmBus (Virtual Gamepad Emulation Bus) kernel driver, XOutput captures raw HID input packets from your physical controller and synthesizes a compliant Microsoft Xbox 360 controller at the Windows kernel level.

Racing simulations require continuous, 16-bit analog axis resolution for steering, throttle, and braking. Digital binary switching (on/off buttons) will cause immediate tire lockup during braking and instant snap-oversteer during corner exit throttle application.

  1. Install Kernel Prerequisites: Download and install the ViGEmBus 1.22.0 driver and .NET 7.0 Desktop Runtime (x64) from our official download center. Restart your PC to allow the kernel bus driver to initialize properly.
  2. Launch XOutput and Add Controller: Open XOutput as Administrator. Under the Game Controllers list, locate your physical controller and click Add Controller.
  3. Map Steering Thumbstick to Left X Axis: Click Edit on your virtual controller. In the configuration matrix, navigate to Left Thumb X. Click Configure, then push your physical left thumbstick fully to the left and right. XOutput will automatically assign the appropriate hardware axis (typically Axis 1 or X Rotation).
  4. Map Independent Analog Triggers for Gas and Brake: In modern racing, throttle and brake must operate on separate analog channels to enable trail braking (applying slight brake pressure while simultaneously blending in throttle to balance chassis pitch).
    • Navigate to Left Trigger (LT) → Click Configure → Fully depress your physical Brake trigger/pedal.
    • Navigate to Right Trigger (RT) → Click Configure → Fully depress your physical Gas trigger/pedal.
    Ensure neither axis is mapped under digital “Buttons”. Both must register under the Axes column with smooth 0 to 100% travel bars.
  5. Validate Axis Calibration in joy.cpl: Press Win + R, execute joy.cpl. Select the Xbox 360 Controller for Windows generated by XOutput, click Properties, and verify that moving the left stick and pulling both triggers yields smooth, unjittered crosshair and bar movement.

Gamepad Steering Physics Tuning for Gamma Filter and Speed Sensitivity

The single biggest complaint from players driving Assetto Corsa on a gamepad is: “The steering feels violently twitchy at high speed, and I spin out on the slightest corner entry.”

This is not an emulator or controller defect; it is a fundamental consequence of vehicle dynamics. A physical racing car has roughly 450 to 900 degrees of steering wheel rotation. An analog thumbstick on a gamepad has an angular deflection range of only 25 to 30 degrees. If you apply a linear steering ratio, moving your thumbstick by 2 millimeters commands 45 degrees of wheel lock at 150 MPH, instantly overloading the front tire slip angles and triggering massive understeer or catastrophic snap oversteer.

To achieve competitive, butter-smooth vehicle control in Assetto Corsa, you must configure the internal steering math inside Content Manager → Settings → Assetto Corsa → Controls → Gamepad:

Gamepad Physics Parameter Recommended Benchmark Value Mathematical Function and In-Game Impact
Speed Sensitivity 65% – 75% Dynamically scales down the maximum allowable steering angle as vehicle velocity increases. At 150 MPH, full stick deflection limits wheel lock to prevent scrubbing tires.
Steering Gamma 2.4 – 2.8 Applies an exponential curve to stick deflection. Tiny thumbstick movements near the center produce ultra-fine, microscopic steering adjustments; full stick lock is only engaged at extreme deflection.
Steering Filter 60% – 80% Introduces a low-pass temporal smoothing filter across raw input frames, eliminating human thumb twitching and hardware potentiometer electrical noise.
Deadzone 4% – 8% Eliminates center stick drift on worn potentiometers, ensuring the car tracks perfectly straight on long straights without phantom wandering.
Steering Speed 40% – 50% Controls the rate of change (slew rate) at which the virtual steering rack traverses across steering locks. Lower values prevent violent chassis weight transfer upsets.

The Physics Formula of Steering Gamma

Mathematically, linear input is expressed as \( y = x \). When you set Steering Gamma to \( \gamma = 2.5 \), the steering calculation transforms to:
\[ y = ext{sign}(x) \cdot |x|^{2.5} \]
When you deflect your thumbstick by 20% (\( x = 0.2 \)), a linear controller commands 20% rack lock. With Gamma set to 2.5, the engine computes:
\[ y = (0.2)^{2.5} pprox 0.0179 \quad (1.79\% ext{ rack lock}) \]
This grants you more than 10 times greater precision for subtle track positioning and mid-corner apex corrections, completely eliminating high-speed twitchiness while still allowing 100% full steering lock when catching a slide!

Enabling CSP GamepadFX for Advanced Counter-Steering Dynamics

While standard Assetto Corsa gamepad settings improve drivability, Custom Shaders Patch (CSP) includes an revolutionary module engineered specifically for controller drivers: GamepadFX.

In vanilla Assetto Corsa, when the rear tires lose traction and the car begins to oversteer, a gamepad player must manually guess the exact counter-steering angle. Because gamepads lack force feedback aligning torque (the physical force that naturally spins a real steering wheel into the direction of a slide), catching high-speed drifts on a controller in vanilla AC is notoriously difficult.

GamepadFX executes dynamic vehicle slip angle telemetry in real-time and applies automated caster self-aligning physics directly to the gamepad input pipeline, mimicking the physical behavior of a real steering rack.

How to Activate and Configure GamepadFX in Content Manager

  1. Ensure you have a recent version of Custom Shaders Patch installed (version 0.1.79 or newer recommended).
  2. Navigate to Settings → Custom Shaders Patch → Gamepad FX.
  3. Check the Active toggle box at the top of the page.
  4. Select your preferred script from the Script dropdown menu:
    • Advanced Gamepad Assist (by Ilja): The official baseline script offering dynamic counter-steering assistance, high-speed damping, and intuitive drift control.
    • A3DR Gamepad Script: Highly popular within the Assetto Corsa drifting and Touge community, providing ultra-responsive steering snap-back for drifting transitions.
    • NeckFX Integration: Allows your in-game cockpit camera to look naturally into the apex of corners based on vehicle slip angle and steering input.
  5. Adjust Steering assistance to approximately 80% – 100% to allow the virtual rack to naturally counter-steer when the rear tires break traction.

Eliminating Device Duplication and Menu Glitches with HidHide

When using XOutput to bridge a DirectInput controller into an emulated Xbox 360 gamepad, Windows exposes two active controller instances simultaneously:

  • Instance 1: The raw, physical DirectInput USB device (e.g., Generic USB Joystick, DualSense Wireless Controller).
  • Instance 2: The virtual Xbox 360 controller synthesized by ViGEmBus.

Because Assetto Corsa’s engine scans both DirectInput and XInput interfaces, it frequently captures input frames from both instances at the exact same millisecond. This creates severe game-breaking bugs:

  • Menu Double-Skipping: Pressing D-Pad Down once skips two menu lines down in Content Manager or track pause screens.
  • Input Cancellation: The raw DirectInput device reports neutral axes while the virtual XInput device reports deflected axes, causing the car’s steering wheel in-game to flicker wildly between center and full lock.
  • Button Re-binding Chaos: Attempting to map shifting paddles registers conflicting button IDs (e.g., Joy1 and Button A simultaneously).

Deploying Nefarius HidHide to Cloak the Physical Device

The definitive, industrial solution is Nefarius HidHide, a kernel-level filter driver that hides the physical hardware from all applications except XOutput:

  1. Download and install HidHide from Nefarius’s official GitHub repository or our software hub. Restart your PC to initialize the filter driver.
  2. Open the HidHide Configuration Client as Administrator.
  3. Under the Applications tab, click + (Add) and add XOutput.exe. Check the box next to XOutput to grant it an explicit exemption. This allows XOutput to continue reading your physical controller.
  4. Under the Devices tab, locate your physical controller (e.g., “Generic USB Joystick” or “Sony Interactive Entertainment Wireless Controller”).
  5. Check the box next to your physical controller to apply the red cloaking padlock icon.
  6. Check Enable device hiding at the bottom of the client.
  7. Re-open joy.cpl. You should now see only one single controller listed: the virtual Xbox 360 Controller for Windows. Your physical DirectInput device is completely invisible to Assetto Corsa, permanently eliminating double inputs!

Force Feedback Wheels Versus Gamepad Emulation Diagnostics

A frequent point of confusion among sim racers is whether XOutput can be used to fix unsupported or vintage racing wheels (e.g., old Logitech WingMan Formula Force, Microsoft SideWinder Force Feedback Wheel, or retro Act-Labs wheels).

It is crucial to understand the fundamental architectural divergence between Gamepad Emulation and True DirectInput Force Feedback (FFB):

Feature Specification XInput Gamepad Emulation (XOutput) Native DirectInput Racing Wheel
Steering Range Virtual Thumbstick (0 to 32,767 integer range) Physical Rotation (270°, 900°, or 1080° optical/magnetic encoder)
Haptic Feedback Protocol Dual-Motor Eccentric Rotating Mass (ERM) Vibration DirectInput Constant, Periodic, Damper, Friction, and Spring Force Vectors
Torque Calculation None (simple low/high frequency rumble motors) Real-time physics tire self-aligning torque computed in \( ext{N}\cdot ext{m} \)
Pedal Interfaces Combined or split 8-bit/16-bit analog trigger axes Dedicated 10-bit/16-bit Hall sensor / Load Cell pedal channels
Diagnostic Rule for Steering Wheels:
If you own a dedicated force feedback racing wheel (Logitech G29, G920, G923, Thrustmaster T150, T300RS, Fanatec, or Moza), do NOT run XOutput. XOutput will emulate an Xbox 360 gamepad, which completely strips away genuine force feedback torque, leaving you with only basic controller vibration. For racing wheels encountering “directinput devices are not ready”, the fix is always installing the manufacturer’s official software suite (Logitech G HUB, Thrustmaster Control Panel, Fanatec FanaLab) and ensuring the wheel is connected directly to a native USB 2.0/3.0 motherboard port rather than an unpowered USB hub.

Upgrading to High-Precision Sim Racing Hardware for Ultimate Immersion

While software emulation via XOutput and fine-tuned GamepadFX scripts will dramatically improve your lap times and vehicle control on a controller, Assetto Corsa’s laser-scanned tracks and tire physics algorithms are built to communicate dynamic tire load through physical hardware feedback.

If you are struggling with worn-out thumbstick potentiometers that induce phantom steering drift, or if you are ready to graduate from thumbstick steering to authentic sim racing force feedback, investing in verified, high-performance hardware completely transforms the Assetto Corsa experience.

Top Sim Racing Wheel Pick: Logitech G923 TRUEFORCE Racing Wheel and Pedals

The Logitech G923 is universally celebrated as the premier entry-to-intermediate force feedback racing wheel for PC sim racers. Featuring proprietary TRUEFORCE high-definition force feedback technology, the G923 connects directly to Assetto Corsa’s 333 Hz physics engine to deliver tactile engine rumble, tire slip vibrations, and terrain feedback directly through the hand-stitched leather rim.

  • TRUEFORCE Haptic System: Real-time physics-integrated haptics computing tire grip and road surface textures at 4,000 samples per second.
  • Progressive Brake Pedal Spring: Simulates a pressure-sensitive hydraulic braking system for muscle-memory trail braking into chicanes.
  • 900-Degree Hand-Over-Hand Lock: Authentic sports car steering rotation matching real GT3 and road car steering racks.
  • Built-In Rev Indicator LEDs: Integrated color-coded RPM lights for optimal upshift timing without relying on screen overlays.
  • Native DirectInput & G HUB Support: Zero emulator required; recognized natively by Assetto Corsa and Content Manager on first plug-in.

Top Precision Gamepad Pick: GameSir G7 SE Hall Effect Controller

For drivers who prefer the portability, ergonomics, and comfort of a handheld controller, the GameSir G7 SE represents the pinnacle of modern gamepad engineering. Featuring contactless Hall Effect magnetic sensor thumbsticks and triggers, it permanently eliminates potentiometer wear and stick drift, providing the microscopic steering precision required to master Assetto Corsa’s high-speed corners.

  • Hall Effect Contactless Joysticks: Magnetic field sensing ensures zero physical friction, zero deadzone requirements, and zero stick drift over millions of racing laps.
  • Precision Hall Analog Triggers: 256 levels of smooth, ultra-linear resistance for millimeter-accurate throttle modulation and lockup-free braking.
  • 1000Hz Ultra-Low Latency USB Polling: Delivers sub-millisecond input response time, seamlessly synchronizing with Assetto Corsa’s physics loop.
  • Native Hardware XInput Architecture: Officially licensed Xbox architecture; recognized instantly by Assetto Corsa without requiring third-party emulators.
  • Ergonomic Quick-Latch Back Buttons: Map manual clutch or gear shifting to tactile underside paddles for lightning-fast gear changes.
FTC Affiliate Disclosure: When you purchase sim racing hardware through links on our site, we may earn an affiliate commission at no additional cost to you. We only recommend hardware rigorously benchmarked in our testing laboratory for input latency, build quality, and telemetry fidelity.

Frequently Asked Questions

Why does Assetto Corsa display the directinput devices are not ready error?

This error occurs when Kunos Simulazioni’s physics engine binary (acs.exe) attempts to poll legacy DirectInput 8 interfaces and encounters an uninitialized USB device descriptor, ghost registry GUID, or missing DirectInput driver hooks. Emulating a clean XInput Xbox 360 device via XOutput bypasses DirectInput initialization entirely.

Can XOutput give my old racing wheel genuine force feedback in Assetto Corsa?

No. XOutput is an XInput gamepad emulator that translates controller inputs into standard Xbox 360 gamepad telemetry, which only supports dual-motor rumble vibration. True Force Feedback requires directional torque motor commands transmitted via native DirectInput manufacturer drivers (Logitech G HUB, Thrustmaster Control Panel, Fanatec FanaLab).

Why is gamepad steering so twitchy and uncontrollable at high speeds?

Assetto Corsa uses a 1:1 steering rack simulation designed for 900-degree racing wheels. On an analog gamepad with a physical thumbstick travel of barely 15 millimeters, high-speed twitching occurs if Steering Gamma is linear (1.0). Setting Steering Gamma to 2.4 to 2.8 and Speed Sensitivity to 65% to 75% creates an exponential curve that damps center-stick sensitivity while preserving full steering lock.

How do I configure throttle and brake pedals on separate analog axes in XOutput?

In XOutput’s configuration menu, map Left Trigger (LT) to the brake axis and Right Trigger (RT) to the throttle axis under the dedicated Trigger/Axis sections. Ensure both axes are recognized as independent analog channels (0-255) rather than a combined single Z-axis, which would prevent trail braking and simultaneous throttle-brake modulation.

Should I use Steam Input or Content Manager native input routing for Assetto Corsa?

You should disable Steam Input in Assetto Corsa’s Steam properties. Content Manager and Custom Shaders Patch have their own direct controller reading pipelines. When Steam Input runs simultaneously, it hooks acs.exe and intercepts raw XInput calls, often resetting steering calibration or causing ghost device inputs.

Similar Posts