Skip to content

Steam and Chromium rumble gaps for PlayStation and Switch Pro virtual gamepads #80

Description

@ReenigneArcher

Environment

  • Host OS: Windows and Linux
  • Virtual controller provider: libvirtualhid through Sunshine
  • Affected profiles: DualShock 4, DualSense, Nintendo Switch Pro
  • Consumers: Steam controller tester and Chromium Gamepad API
  • Comparison consumer: SDL/HIDAPI

Observed behavior

  • Steam identifies the affected virtual controllers through HIDAPI, but its controller tester does not produce a libvirtualhid output callback for DualShock 4, DualSense, or Switch Pro.
  • Chrome can rumble the virtual DualShock 4 and Switch Pro on Windows.
  • Chromium does not expose a vibration actuator for DualSense on Windows.
  • Switch Pro is not recognized by the Chromium Gamepad API on the tested Linux system.

libvirtualhid validation

The native libvirtualhid output path is working for the affected profiles:

  • On Windows, SDL3's native HIDAPI drivers can open virtual DualShock 4, DualSense, and Switch Pro controllers through the installed VHF driver. SDL rumble reaches the public GamepadOutput callback for all three profiles.
  • Native Windows tests verify the PlayStation feature-report handshake and output-report routing.
  • Linux consumer tests cover SDL and direct HID output for the native PlayStation profiles.

This exercises real consumer and installed-driver/kernel paths rather than only calling the report parser with synthetic packets. No missing libvirtualhid descriptor, feature reply, output route, or accepted rumble packet shape has been demonstrated.

Steam investigation

Steam recognizes and opens the controllers, but the tested controller-rumble action does not send an output report for libvirtualhid to parse. A similar current report exists for a physical DualSense on Linux, where Steam does not dispatch a write or force-feedback operation:

This is separate from Chromium's DualSense behavior.

Chromium DualSense investigation

On Windows, Chromium currently enables IgnorePS5GamepadsInWgi by default and excludes DualSense and DualSense Edge from its Windows Gaming Input fetcher:

The controller then uses Chromium's Raw Input path. That path exposes vibration only for its dedicated DualShock 4 handler and a small HID-haptics allowlist; it has no DualSense haptic handler:

Therefore Chromium reports no Gamepad API vibration actuator before it can send an output report to libvirtualhid. This selection is based on the real Sony VID/PID and affects physical DualSense controllers as well as faithful virtual ones. Chromium documents --disable-features=IgnorePS5GamepadsInWgi as a diagnostic override:

Changing libvirtualhid's VID/PID to evade Chromium's filter would stop the profile from faithfully identifying as a DualSense and is not an appropriate workaround.

Remaining work

  • Track the Steam behavior upstream and retest when Steam begins dispatching an output operation for these controllers.
  • Track or report Chromium's missing Raw Input DualSense haptics/fetcher-selection behavior upstream.
  • If a consumer produces an output report that reaches libvirtualhid but is not normalized, capture that exact report and add parser/backend regression coverage.

Based on the current evidence, the remaining failures are consumer-side compatibility gaps rather than a demonstrated libvirtualhid output-path defect.

Metadata

Metadata

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions