From 32d584a0f5f58ff80ab9ad95ff3d1b10e30d108f Mon Sep 17 00:00:00 2001 From: iwubcode Date: Sat, 27 Feb 2021 16:41:50 -0600 Subject: InputCommon: reduce number of image loads and texture cache invalidations by only running dynamic input textures once for all controllers --- Source/Core/InputCommon/InputConfig.cpp | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) (limited to 'Source/Core/InputCommon/InputConfig.cpp') diff --git a/Source/Core/InputCommon/InputConfig.cpp b/Source/Core/InputCommon/InputConfig.cpp index 03d2874332..72b28b6d16 100644 --- a/Source/Core/InputCommon/InputConfig.cpp +++ b/Source/Core/InputCommon/InputConfig.cpp @@ -4,6 +4,7 @@ #include +#include "Common/Config/Config.h" #include "Common/FileUtil.h" #include "Common/IniFile.h" #include "Common/MsgHandler.h" @@ -101,6 +102,8 @@ bool InputConfig::LoadConfig(bool isGC) !inifile.GetSections().empty()) { int n = 0; + + std::vector controller_names; for (auto& controller : m_controllers) { IniFile::Section config; @@ -113,9 +116,8 @@ bool InputConfig::LoadConfig(bool isGC) controller->GetName() + "'", 6000); - IniFile profile_ini; - profile_ini.Load(profile[n]); - config = *profile_ini.GetOrCreateSection("Profile"); + inifile.Load(profile[n]); + config = *inifile.GetOrCreateSection("Profile"); } else { @@ -133,10 +135,13 @@ bool InputConfig::LoadConfig(bool isGC) controller->LoadConfig(&config); // Update refs controller->UpdateReferences(g_controller_interface); + controller_names.push_back(controller->GetName()); // Next profile n++; } + + m_dynamic_input_tex_config_manager.GenerateTextures(inifile, controller_names); return true; } else @@ -154,8 +159,14 @@ void InputConfig::SaveConfig() IniFile inifile; inifile.Load(ini_filename); + std::vector controller_names; for (auto& controller : m_controllers) + { controller->SaveConfig(inifile.GetOrCreateSection(controller->GetName())); + controller_names.push_back(controller->GetName()); + } + + m_dynamic_input_tex_config_manager.GenerateTextures(inifile, controller_names); inifile.Save(ini_filename); } @@ -195,11 +206,6 @@ void InputConfig::UnregisterHotplugCallback() g_controller_interface.UnregisterDevicesChangedCallback(m_hotplug_callback_handle); } -void InputConfig::OnControllerCreated(ControllerEmu::EmulatedController& controller) -{ - controller.SetDynamicInputTextureManager(&m_dynamic_input_tex_config_manager); -} - bool InputConfig::IsControllerControlledByGamepadDevice(int index) const { if (static_cast(index) >= m_controllers.size()) @@ -215,3 +221,14 @@ bool InputConfig::IsControllerControlledByGamepadDevice(int index) const || (controller.source == "DInput" && controller.name == "Keyboard Mouse")); // Windows Keyboard/Mouse } + +void InputConfig::GenerateControllerTextures(const IniFile& file) +{ + std::vector controller_names; + for (auto& controller : m_controllers) + { + controller_names.push_back(controller->GetName()); + } + + m_dynamic_input_tex_config_manager.GenerateTextures(file, controller_names); +} -- cgit v1.2.3