diff options
author | Morph <39850852+Morph1984@users.noreply.github.com> | 2021-07-14 06:52:17 +0200 |
---|---|---|
committer | Morph <39850852+Morph1984@users.noreply.github.com> | 2021-07-14 08:09:14 +0200 |
commit | c6d7da88c7ab125279ea4ccad0e3e839632b2f7a (patch) | |
tree | 8591def7815ce7cc9156d87e0d62567584db1a23 /src/core/hle/service/apm/apm_controller.h | |
parent | applets: Append applet_ prefix to backend applets (diff) | |
download | yuzu-c6d7da88c7ab125279ea4ccad0e3e839632b2f7a.tar yuzu-c6d7da88c7ab125279ea4ccad0e3e839632b2f7a.tar.gz yuzu-c6d7da88c7ab125279ea4ccad0e3e839632b2f7a.tar.bz2 yuzu-c6d7da88c7ab125279ea4ccad0e3e839632b2f7a.tar.lz yuzu-c6d7da88c7ab125279ea4ccad0e3e839632b2f7a.tar.xz yuzu-c6d7da88c7ab125279ea4ccad0e3e839632b2f7a.tar.zst yuzu-c6d7da88c7ab125279ea4ccad0e3e839632b2f7a.zip |
Diffstat (limited to 'src/core/hle/service/apm/apm_controller.h')
-rw-r--r-- | src/core/hle/service/apm/apm_controller.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/core/hle/service/apm/apm_controller.h b/src/core/hle/service/apm/apm_controller.h new file mode 100644 index 000000000..8d48e0104 --- /dev/null +++ b/src/core/hle/service/apm/apm_controller.h @@ -0,0 +1,70 @@ +// Copyright 2019 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <map> +#include "common/common_types.h" + +namespace Core::Timing { +class CoreTiming; +} + +namespace Service::APM { + +enum class PerformanceConfiguration : u32 { + Config1 = 0x00010000, + Config2 = 0x00010001, + Config3 = 0x00010002, + Config4 = 0x00020000, + Config5 = 0x00020001, + Config6 = 0x00020002, + Config7 = 0x00020003, + Config8 = 0x00020004, + Config9 = 0x00020005, + Config10 = 0x00020006, + Config11 = 0x92220007, + Config12 = 0x92220008, + Config13 = 0x92220009, + Config14 = 0x9222000A, + Config15 = 0x9222000B, + Config16 = 0x9222000C, +}; + +enum class CpuBoostMode : u32 { + Disabled = 0, + Full = 1, // CPU + GPU -> Config 13, 14, 15, or 16 + Partial = 2, // GPU Only -> Config 15 or 16 +}; + +enum class PerformanceMode : u8 { + Handheld = 0, + Docked = 1, +}; + +// Class to manage the state and change of the emulated system performance. +// Specifically, this deals with PerformanceMode, which corresponds to the system being docked or +// undocked, and PerformanceConfig which specifies the exact CPU, GPU, and Memory clocks to operate +// at. Additionally, this manages 'Boost Mode', which allows games to temporarily overclock the +// system during times of high load -- this simply maps to different PerformanceConfigs to use. +class Controller { +public: + explicit Controller(Core::Timing::CoreTiming& core_timing_); + ~Controller(); + + void SetPerformanceConfiguration(PerformanceMode mode, PerformanceConfiguration config); + void SetFromCpuBoostMode(CpuBoostMode mode); + + PerformanceMode GetCurrentPerformanceMode() const; + PerformanceConfiguration GetCurrentPerformanceConfiguration(PerformanceMode mode); + +private: + void SetClockSpeed(u32 mhz); + + [[maybe_unused]] Core::Timing::CoreTiming& core_timing; + + std::map<PerformanceMode, PerformanceConfiguration> configs; +}; + +} // namespace Service::APM |