From e456bef163c1b667ff5a045a4bda66b30326ae90 Mon Sep 17 00:00:00 2001 From: Filoppi Date: Wed, 24 May 2023 22:58:30 +0300 Subject: Input: Improve Controller Interface devices threading This specific issue was already addressed by https://github.com/dolphin-emu/dolphin/pull/11635 though I felt like there was something more we could do, and wasn't too happy with the likelihood of devices update calls being skipped (due to `m_devices_population_mutex` being locked). --- Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp | 4 +++- Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.h | 2 +- .../InputCommon/ControllerInterface/DInput/DInputKeyboardMouse.cpp | 4 +++- .../Core/InputCommon/ControllerInterface/DInput/DInputKeyboardMouse.h | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) (limited to 'Source/Core/InputCommon/ControllerInterface/DInput') diff --git a/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp b/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp index eb60721b2f..f095818287 100644 --- a/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp +++ b/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp @@ -222,7 +222,7 @@ bool Joystick::IsValid() const return SUCCEEDED(m_device->Acquire()); } -void Joystick::UpdateInput() +Core::DeviceRemoval Joystick::UpdateInput() { HRESULT hr = 0; @@ -261,6 +261,8 @@ void Joystick::UpdateInput() // try reacquire if input lost if (DIERR_INPUTLOST == hr || DIERR_NOTACQUIRED == hr) m_device->Acquire(); + + return Core::DeviceRemoval::Keep; } // get name diff --git a/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.h b/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.h index f69b95293c..cb73f373f8 100644 --- a/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.h +++ b/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.h @@ -57,7 +57,7 @@ private: }; public: - void UpdateInput() override; + Core::DeviceRemoval UpdateInput() override; Joystick(const LPDIRECTINPUTDEVICE8 device); ~Joystick(); diff --git a/Source/Core/InputCommon/ControllerInterface/DInput/DInputKeyboardMouse.cpp b/Source/Core/InputCommon/ControllerInterface/DInput/DInputKeyboardMouse.cpp index 551afde423..3c6a82dcd8 100644 --- a/Source/Core/InputCommon/ControllerInterface/DInput/DInputKeyboardMouse.cpp +++ b/Source/Core/InputCommon/ControllerInterface/DInput/DInputKeyboardMouse.cpp @@ -205,7 +205,7 @@ void KeyboardMouse::UpdateCursorInput() m_state_in.cursor.y = (ControlState(point.y) / win_height * 2 - 1) * window_scale.y; } -void KeyboardMouse::UpdateInput() +Core::DeviceRemoval KeyboardMouse::UpdateInput() { UpdateCursorInput(); @@ -254,6 +254,8 @@ void KeyboardMouse::UpdateInput() else INFO_LOG_FMT(CONTROLLERINTERFACE, "Keyboard device failed to re-acquire, we'll retry later"); } + + return Core::DeviceRemoval::Keep; } std::string KeyboardMouse::GetName() const diff --git a/Source/Core/InputCommon/ControllerInterface/DInput/DInputKeyboardMouse.h b/Source/Core/InputCommon/ControllerInterface/DInput/DInputKeyboardMouse.h index eba4c8ab93..e7187849f6 100644 --- a/Source/Core/InputCommon/ControllerInterface/DInput/DInputKeyboardMouse.h +++ b/Source/Core/InputCommon/ControllerInterface/DInput/DInputKeyboardMouse.h @@ -94,7 +94,7 @@ private: }; public: - void UpdateInput() override; + Core::DeviceRemoval UpdateInput() override; KeyboardMouse(const LPDIRECTINPUTDEVICE8 kb_device, const LPDIRECTINPUTDEVICE8 mo_device); ~KeyboardMouse(); -- cgit v1.2.3