diff options
author | flodavid <fl.david.53@gmail.com> | 2023-11-03 15:41:16 +0100 |
---|---|---|
committer | flodavid <fl.david.53@gmail.com> | 2023-11-25 19:30:37 +0100 |
commit | 40644d43f700cb0075db0eea288078bda7cf4527 (patch) | |
tree | 876d26a64a803d2b1509e71a13fe822f1e851c00 /src/common | |
parent | yuzu: integrate gamemode support on linux (diff) | |
download | yuzu-40644d43f700cb0075db0eea288078bda7cf4527.tar yuzu-40644d43f700cb0075db0eea288078bda7cf4527.tar.gz yuzu-40644d43f700cb0075db0eea288078bda7cf4527.tar.bz2 yuzu-40644d43f700cb0075db0eea288078bda7cf4527.tar.lz yuzu-40644d43f700cb0075db0eea288078bda7cf4527.tar.xz yuzu-40644d43f700cb0075db0eea288078bda7cf4527.tar.zst yuzu-40644d43f700cb0075db0eea288078bda7cf4527.zip |
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/CMakeLists.txt | 9 | ||||
-rw-r--r-- | src/common/linux/gamemode.cpp | 39 | ||||
-rw-r--r-- | src/common/linux/gamemode.h | 24 | ||||
-rw-r--r-- | src/common/settings.cpp | 2 | ||||
-rw-r--r-- | src/common/settings.h | 5 | ||||
-rw-r--r-- | src/common/settings_common.h | 1 |
6 files changed, 78 insertions, 2 deletions
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index e216eb3de..57cbb9d07 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -174,6 +174,15 @@ if(ANDROID) ) endif() +if (UNIX) + target_sources(common PRIVATE + linux/gamemode.cpp + linux/gamemode.h + ) + + target_link_libraries(common PRIVATE gamemode) +endif() + if(ARCHITECTURE_x86_64) target_sources(common PRIVATE diff --git a/src/common/linux/gamemode.cpp b/src/common/linux/gamemode.cpp new file mode 100644 index 000000000..8876d8dc4 --- /dev/null +++ b/src/common/linux/gamemode.cpp @@ -0,0 +1,39 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include <gamemode_client.h> + +#include "common/linux/gamemode.h" +#include "common/settings.h" + +namespace Common::Linux { + +void StartGamemode() { + if (Settings::values.enable_gamemode) { + if (gamemode_request_start() < 0) { + LOG_WARNING(Frontend, "Failed to start gamemode: {}", gamemode_error_string()); + } else { + LOG_INFO(Frontend, "Started gamemode"); + } + } +} + +void StopGamemode() { + if (Settings::values.enable_gamemode) { + if (gamemode_request_end() < 0) { + LOG_WARNING(Frontend, "Failed to stop gamemode: {}", gamemode_error_string()); + } else { + LOG_INFO(Frontend, "Stopped gamemode"); + } + } +} + +void SetGamemodeState(bool state) { + if (state) { + StartGamemode(); + } else { + StopGamemode(); + } +} + +} // namespace Common::Linux diff --git a/src/common/linux/gamemode.h b/src/common/linux/gamemode.h new file mode 100644 index 000000000..b80646ae2 --- /dev/null +++ b/src/common/linux/gamemode.h @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +namespace Common::Linux { + +/** + * Start the (Feral Interactive) Linux gamemode if it is installed and it is activated + */ +void StartGamemode(); + +/** + * Stop the (Feral Interactive) Linux gamemode if it is installed and it is activated + */ +void StopGamemode(); + +/** + * Start or stop the (Feral Interactive) Linux gamemode if it is installed and it is activated + * @param state The new state the gamemode should have + */ +void SetGamemodeState(bool state); + +} // namespace Common::Linux diff --git a/src/common/settings.cpp b/src/common/settings.cpp index a10131eb2..3e829253f 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -219,6 +219,8 @@ const char* TranslateCategory(Category category) { return "Services"; case Category::Paths: return "Paths"; + case Category::Linux: + return "Linux"; case Category::MaxEnum: break; } diff --git a/src/common/settings.h b/src/common/settings.h index 788020bde..491f0d3e0 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -178,8 +178,6 @@ struct Values { true, &use_speed_limit}; - Setting<bool> enable_gamemode{linkage, false, "enable_gamemode", Category::Core}; - // Cpu SwitchableSetting<CpuAccuracy, true> cpu_accuracy{linkage, CpuAccuracy::Auto, CpuAccuracy::Auto, CpuAccuracy::Paranoid, @@ -429,6 +427,9 @@ struct Values { true, true}; + // Linux + SwitchableSetting<bool> enable_gamemode{linkage, true, "enable_gamemode", Category::Linux}; + // Controls InputSetting<std::array<PlayerInput, 10>> players; diff --git a/src/common/settings_common.h b/src/common/settings_common.h index 7943223eb..344c04439 100644 --- a/src/common/settings_common.h +++ b/src/common/settings_common.h @@ -41,6 +41,7 @@ enum class Category : u32 { Multiplayer, Services, Paths, + Linux, MaxEnum, }; |