core,common: Give memory layout setting an enum
Allows for 6GB and 8GB layouts to be selected.
This commit is contained in:
parent
ff6a5031d5
commit
127b3da0f1
4 changed files with 31 additions and 9 deletions
|
@ -153,8 +153,12 @@ struct Values {
|
||||||
|
|
||||||
// Core
|
// Core
|
||||||
SwitchableSetting<bool> use_multi_core{linkage, true, "use_multi_core", Category::Core};
|
SwitchableSetting<bool> use_multi_core{linkage, true, "use_multi_core", Category::Core};
|
||||||
SwitchableSetting<bool> use_unsafe_extended_memory_layout{
|
SwitchableSetting<MemoryLayout, true> memory_layout_mode{linkage,
|
||||||
linkage, false, "use_unsafe_extended_memory_layout", Category::Core};
|
MemoryLayout::Memory_4Gb,
|
||||||
|
MemoryLayout::Memory_4Gb,
|
||||||
|
MemoryLayout::Memory_8Gb,
|
||||||
|
"memory_layout_mode",
|
||||||
|
Category::Core};
|
||||||
SwitchableSetting<bool> use_speed_limit{
|
SwitchableSetting<bool> use_speed_limit{
|
||||||
linkage, true, "use_speed_limit", Category::Core, Specialization::Paired, false, true};
|
linkage, true, "use_speed_limit", Category::Core, Specialization::Paired, false, true};
|
||||||
SwitchableSetting<u16, true> speed_limit{linkage,
|
SwitchableSetting<u16, true> speed_limit{linkage,
|
||||||
|
|
|
@ -131,6 +131,8 @@ ENUM(GpuAccuracy, Normal, High, Extreme);
|
||||||
|
|
||||||
ENUM(CpuAccuracy, Auto, Accurate, Unsafe, Paranoid);
|
ENUM(CpuAccuracy, Auto, Accurate, Unsafe, Paranoid);
|
||||||
|
|
||||||
|
ENUM(MemoryLayout, Memory_4Gb, Memory_6Gb, Memory_8Gb);
|
||||||
|
|
||||||
ENUM(FullscreenMode, Borderless, Exclusive);
|
ENUM(FullscreenMode, Borderless, Exclusive);
|
||||||
|
|
||||||
ENUM(NvdecEmulation, Off, Cpu, Gpu);
|
ENUM(NvdecEmulation, Off, Cpu, Gpu);
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "common/microprofile.h"
|
#include "common/microprofile.h"
|
||||||
#include "common/settings.h"
|
#include "common/settings.h"
|
||||||
|
#include "common/settings_enums.h"
|
||||||
#include "common/string_util.h"
|
#include "common/string_util.h"
|
||||||
#include "core/arm/exclusive_monitor.h"
|
#include "core/arm/exclusive_monitor.h"
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
|
@ -140,7 +141,8 @@ struct System::Impl {
|
||||||
device_memory = std::make_unique<Core::DeviceMemory>();
|
device_memory = std::make_unique<Core::DeviceMemory>();
|
||||||
|
|
||||||
is_multicore = Settings::values.use_multi_core.GetValue();
|
is_multicore = Settings::values.use_multi_core.GetValue();
|
||||||
extended_memory_layout = Settings::values.use_unsafe_extended_memory_layout.GetValue();
|
extended_memory_layout =
|
||||||
|
Settings::values.memory_layout_mode.GetValue() != Settings::MemoryLayout::Memory_4Gb;
|
||||||
|
|
||||||
core_timing.SetMulticore(is_multicore);
|
core_timing.SetMulticore(is_multicore);
|
||||||
core_timing.Initialize([&system]() { system.RegisterHostThread(); });
|
core_timing.Initialize([&system]() { system.RegisterHostThread(); });
|
||||||
|
@ -168,7 +170,8 @@ struct System::Impl {
|
||||||
void ReinitializeIfNecessary(System& system) {
|
void ReinitializeIfNecessary(System& system) {
|
||||||
const bool must_reinitialize =
|
const bool must_reinitialize =
|
||||||
is_multicore != Settings::values.use_multi_core.GetValue() ||
|
is_multicore != Settings::values.use_multi_core.GetValue() ||
|
||||||
extended_memory_layout != Settings::values.use_unsafe_extended_memory_layout.GetValue();
|
extended_memory_layout != (Settings::values.memory_layout_mode.GetValue() !=
|
||||||
|
Settings::MemoryLayout::Memory_4Gb);
|
||||||
|
|
||||||
if (!must_reinitialize) {
|
if (!must_reinitialize) {
|
||||||
return;
|
return;
|
||||||
|
@ -177,7 +180,8 @@ struct System::Impl {
|
||||||
LOG_DEBUG(Kernel, "Re-initializing");
|
LOG_DEBUG(Kernel, "Re-initializing");
|
||||||
|
|
||||||
is_multicore = Settings::values.use_multi_core.GetValue();
|
is_multicore = Settings::values.use_multi_core.GetValue();
|
||||||
extended_memory_layout = Settings::values.use_unsafe_extended_memory_layout.GetValue();
|
extended_memory_layout =
|
||||||
|
Settings::values.memory_layout_mode.GetValue() != Settings::MemoryLayout::Memory_4Gb;
|
||||||
|
|
||||||
Initialize(system);
|
Initialize(system);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,13 +35,25 @@ namespace {
|
||||||
using namespace Common::Literals;
|
using namespace Common::Literals;
|
||||||
|
|
||||||
u32 GetMemorySizeForInit() {
|
u32 GetMemorySizeForInit() {
|
||||||
return Settings::values.use_unsafe_extended_memory_layout ? Smc::MemorySize_8GB
|
switch (Settings::values.memory_layout_mode.GetValue()) {
|
||||||
: Smc::MemorySize_4GB;
|
case Settings::MemoryLayout::Memory_4Gb:
|
||||||
|
return Smc::MemorySize_4GB;
|
||||||
|
case Settings::MemoryLayout::Memory_6Gb:
|
||||||
|
return Smc::MemorySize_6GB;
|
||||||
|
case Settings::MemoryLayout::Memory_8Gb:
|
||||||
|
return Smc::MemorySize_8GB;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Smc::MemoryArrangement GetMemoryArrangeForInit() {
|
Smc::MemoryArrangement GetMemoryArrangeForInit() {
|
||||||
return Settings::values.use_unsafe_extended_memory_layout ? Smc::MemoryArrangement_8GB
|
switch (Settings::values.memory_layout_mode.GetValue()) {
|
||||||
: Smc::MemoryArrangement_4GB;
|
case Settings::MemoryLayout::Memory_4Gb:
|
||||||
|
return Smc::MemoryArrangement_4GB;
|
||||||
|
case Settings::MemoryLayout::Memory_6Gb:
|
||||||
|
return Smc::MemoryArrangement_6GB;
|
||||||
|
case Settings::MemoryLayout::Memory_8Gb:
|
||||||
|
return Smc::MemoryArrangement_8GB;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue