mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
Config: Port DisableICache setting to new config system.
This commit is contained in:
@ -74,7 +74,6 @@ private:
|
|||||||
bool bCPUThread = false;
|
bool bCPUThread = false;
|
||||||
bool bSyncGPUOnSkipIdleHack = false;
|
bool bSyncGPUOnSkipIdleHack = false;
|
||||||
bool bMMU = false;
|
bool bMMU = false;
|
||||||
bool bDisableICache = false;
|
|
||||||
bool bSyncGPU = false;
|
bool bSyncGPU = false;
|
||||||
int iSyncGpuMaxDistance = 0;
|
int iSyncGpuMaxDistance = 0;
|
||||||
int iSyncGpuMinDistance = 0;
|
int iSyncGpuMinDistance = 0;
|
||||||
@ -91,7 +90,6 @@ void ConfigCache::SaveConfig(const SConfig& config)
|
|||||||
|
|
||||||
bCPUThread = config.bCPUThread;
|
bCPUThread = config.bCPUThread;
|
||||||
bSyncGPUOnSkipIdleHack = config.bSyncGPUOnSkipIdleHack;
|
bSyncGPUOnSkipIdleHack = config.bSyncGPUOnSkipIdleHack;
|
||||||
bDisableICache = config.bDisableICache;
|
|
||||||
bMMU = config.bMMU;
|
bMMU = config.bMMU;
|
||||||
bSyncGPU = config.bSyncGPU;
|
bSyncGPU = config.bSyncGPU;
|
||||||
iSyncGpuMaxDistance = config.iSyncGpuMaxDistance;
|
iSyncGpuMaxDistance = config.iSyncGpuMaxDistance;
|
||||||
@ -120,7 +118,6 @@ void ConfigCache::RestoreConfig(SConfig* config)
|
|||||||
|
|
||||||
config->bCPUThread = bCPUThread;
|
config->bCPUThread = bCPUThread;
|
||||||
config->bSyncGPUOnSkipIdleHack = bSyncGPUOnSkipIdleHack;
|
config->bSyncGPUOnSkipIdleHack = bSyncGPUOnSkipIdleHack;
|
||||||
config->bDisableICache = bDisableICache;
|
|
||||||
config->bMMU = bMMU;
|
config->bMMU = bMMU;
|
||||||
config->bSyncGPU = bSyncGPU;
|
config->bSyncGPU = bSyncGPU;
|
||||||
config->iSyncGpuMaxDistance = iSyncGpuMaxDistance;
|
config->iSyncGpuMaxDistance = iSyncGpuMaxDistance;
|
||||||
@ -179,7 +176,6 @@ bool BootCore(std::unique_ptr<BootParameters> boot, const WindowSystemInfo& wsi)
|
|||||||
core_section->Get("CPUThread", &StartUp.bCPUThread, StartUp.bCPUThread);
|
core_section->Get("CPUThread", &StartUp.bCPUThread, StartUp.bCPUThread);
|
||||||
core_section->Get("SyncOnSkipIdle", &StartUp.bSyncGPUOnSkipIdleHack,
|
core_section->Get("SyncOnSkipIdle", &StartUp.bSyncGPUOnSkipIdleHack,
|
||||||
StartUp.bSyncGPUOnSkipIdleHack);
|
StartUp.bSyncGPUOnSkipIdleHack);
|
||||||
core_section->Get("DisableICache", &StartUp.bDisableICache, StartUp.bDisableICache);
|
|
||||||
core_section->Get("MMU", &StartUp.bMMU, StartUp.bMMU);
|
core_section->Get("MMU", &StartUp.bMMU, StartUp.bMMU);
|
||||||
core_section->Get("SyncGPU", &StartUp.bSyncGPU, StartUp.bSyncGPU);
|
core_section->Get("SyncGPU", &StartUp.bSyncGPU, StartUp.bSyncGPU);
|
||||||
core_section->Get("FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed);
|
core_section->Get("FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed);
|
||||||
@ -257,7 +253,6 @@ bool BootCore(std::unique_ptr<BootParameters> boot, const WindowSystemInfo& wsi)
|
|||||||
config_cache.bSetEXIDevice[0] = true;
|
config_cache.bSetEXIDevice[0] = true;
|
||||||
config_cache.bSetEXIDevice[1] = true;
|
config_cache.bSetEXIDevice[1] = true;
|
||||||
config_cache.bSetEXIDevice[2] = true;
|
config_cache.bSetEXIDevice[2] = true;
|
||||||
StartUp.bDisableICache = netplay_settings.m_DisableICache;
|
|
||||||
StartUp.bSyncGPUOnSkipIdleHack = netplay_settings.m_SyncOnSkipIdle;
|
StartUp.bSyncGPUOnSkipIdleHack = netplay_settings.m_SyncOnSkipIdle;
|
||||||
StartUp.bSyncGPU = netplay_settings.m_SyncGPU;
|
StartUp.bSyncGPU = netplay_settings.m_SyncGPU;
|
||||||
StartUp.iSyncGpuMaxDistance = netplay_settings.m_SyncGpuMaxDistance;
|
StartUp.iSyncGpuMaxDistance = netplay_settings.m_SyncGpuMaxDistance;
|
||||||
|
@ -100,6 +100,7 @@ bool IsSettingSaveable(const Config::Location& config_location)
|
|||||||
&Config::MAIN_EMULATION_SPEED.GetLocation(),
|
&Config::MAIN_EMULATION_SPEED.GetLocation(),
|
||||||
&Config::MAIN_PERF_MAP_DIR.GetLocation(),
|
&Config::MAIN_PERF_MAP_DIR.GetLocation(),
|
||||||
&Config::MAIN_GPU_DETERMINISM_MODE.GetLocation(),
|
&Config::MAIN_GPU_DETERMINISM_MODE.GetLocation(),
|
||||||
|
&Config::MAIN_DISABLE_ICACHE.GetLocation(),
|
||||||
|
|
||||||
// UI.General
|
// UI.General
|
||||||
|
|
||||||
|
@ -161,7 +161,6 @@ void SConfig::LoadCoreSettings(IniFile& ini)
|
|||||||
core->Get("SyncGpuMinDistance", &iSyncGpuMinDistance, -200000);
|
core->Get("SyncGpuMinDistance", &iSyncGpuMinDistance, -200000);
|
||||||
core->Get("SyncGpuOverclock", &fSyncGpuOverclock, 1.0f);
|
core->Get("SyncGpuOverclock", &fSyncGpuOverclock, 1.0f);
|
||||||
core->Get("FastDiscSpeed", &bFastDiscSpeed, false);
|
core->Get("FastDiscSpeed", &bFastDiscSpeed, false);
|
||||||
core->Get("DisableICache", &bDisableICache, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SConfig::ResetRunningGameMetadata()
|
void SConfig::ResetRunningGameMetadata()
|
||||||
@ -281,7 +280,6 @@ void SConfig::LoadDefaults()
|
|||||||
bCPUThread = false;
|
bCPUThread = false;
|
||||||
bSyncGPUOnSkipIdleHack = true;
|
bSyncGPUOnSkipIdleHack = true;
|
||||||
bFastmem = true;
|
bFastmem = true;
|
||||||
bDisableICache = false;
|
|
||||||
bMMU = false;
|
bMMU = false;
|
||||||
iBBDumpPort = -1;
|
iBBDumpPort = -1;
|
||||||
bSyncGPU = false;
|
bSyncGPU = false;
|
||||||
|
@ -64,7 +64,6 @@ struct SConfig
|
|||||||
bool bJITNoBlockLinking = false;
|
bool bJITNoBlockLinking = false;
|
||||||
|
|
||||||
bool bFastmem;
|
bool bFastmem;
|
||||||
bool bDisableICache = false;
|
|
||||||
|
|
||||||
int iTimingVariance = 40; // in milli secounds
|
int iTimingVariance = 40; // in milli secounds
|
||||||
bool bCPUThread = true;
|
bool bCPUThread = true;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
#include "Common/ChunkFile.h"
|
#include "Common/ChunkFile.h"
|
||||||
#include "Common/Swap.h"
|
#include "Common/Swap.h"
|
||||||
#include "Core/ConfigManager.h"
|
#include "Core/Config/MainSettings.h"
|
||||||
#include "Core/DolphinAnalytics.h"
|
#include "Core/DolphinAnalytics.h"
|
||||||
#include "Core/HW/Memmap.h"
|
#include "Core/HW/Memmap.h"
|
||||||
#include "Core/PowerPC/JitInterface.h"
|
#include "Core/PowerPC/JitInterface.h"
|
||||||
@ -87,6 +87,12 @@ constexpr std::array<u32, 128> s_way_from_plru = [] {
|
|||||||
}();
|
}();
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
|
InstructionCache::~InstructionCache()
|
||||||
|
{
|
||||||
|
if (m_config_callback_id)
|
||||||
|
Config::RemoveConfigChangedCallback(*m_config_callback_id);
|
||||||
|
}
|
||||||
|
|
||||||
void InstructionCache::Reset()
|
void InstructionCache::Reset()
|
||||||
{
|
{
|
||||||
valid.fill(0);
|
valid.fill(0);
|
||||||
@ -99,6 +105,10 @@ void InstructionCache::Reset()
|
|||||||
|
|
||||||
void InstructionCache::Init()
|
void InstructionCache::Init()
|
||||||
{
|
{
|
||||||
|
if (!m_config_callback_id)
|
||||||
|
m_config_callback_id = Config::AddConfigChangedCallback([this] { RefreshConfig(); });
|
||||||
|
RefreshConfig();
|
||||||
|
|
||||||
data.fill({});
|
data.fill({});
|
||||||
tags.fill({});
|
tags.fill({});
|
||||||
Reset();
|
Reset();
|
||||||
@ -106,7 +116,7 @@ void InstructionCache::Init()
|
|||||||
|
|
||||||
void InstructionCache::Invalidate(u32 addr)
|
void InstructionCache::Invalidate(u32 addr)
|
||||||
{
|
{
|
||||||
if (!HID0.ICE || SConfig::GetInstance().bDisableICache)
|
if (!HID0.ICE || m_disable_icache)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Invalidates the whole set
|
// Invalidates the whole set
|
||||||
@ -129,7 +139,7 @@ void InstructionCache::Invalidate(u32 addr)
|
|||||||
|
|
||||||
u32 InstructionCache::ReadInstruction(u32 addr)
|
u32 InstructionCache::ReadInstruction(u32 addr)
|
||||||
{
|
{
|
||||||
if (!HID0.ICE || SConfig::GetInstance().bDisableICache) // instruction cache is disabled
|
if (!HID0.ICE || m_disable_icache) // instruction cache is disabled
|
||||||
return Memory::Read_U32(addr);
|
return Memory::Read_U32(addr);
|
||||||
u32 set = (addr >> 5) & 0x7f;
|
u32 set = (addr >> 5) & 0x7f;
|
||||||
u32 tag = addr >> 12;
|
u32 tag = addr >> 12;
|
||||||
@ -202,4 +212,9 @@ void InstructionCache::DoState(PointerWrap& p)
|
|||||||
p.DoArray(lookup_table_ex);
|
p.DoArray(lookup_table_ex);
|
||||||
p.DoArray(lookup_table_vmem);
|
p.DoArray(lookup_table_vmem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InstructionCache::RefreshConfig()
|
||||||
|
{
|
||||||
|
m_disable_icache = Config::Get(Config::MAIN_DISABLE_ICACHE);
|
||||||
|
}
|
||||||
} // namespace PowerPC
|
} // namespace PowerPC
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
|
||||||
@ -30,11 +31,16 @@ struct InstructionCache
|
|||||||
std::array<u8, 1 << 21> lookup_table_ex{};
|
std::array<u8, 1 << 21> lookup_table_ex{};
|
||||||
std::array<u8, 1 << 20> lookup_table_vmem{};
|
std::array<u8, 1 << 20> lookup_table_vmem{};
|
||||||
|
|
||||||
|
bool m_disable_icache = false;
|
||||||
|
std::optional<size_t> m_config_callback_id = std::nullopt;
|
||||||
|
|
||||||
InstructionCache() = default;
|
InstructionCache() = default;
|
||||||
|
~InstructionCache();
|
||||||
u32 ReadInstruction(u32 addr);
|
u32 ReadInstruction(u32 addr);
|
||||||
void Invalidate(u32 addr);
|
void Invalidate(u32 addr);
|
||||||
void Init();
|
void Init();
|
||||||
void Reset();
|
void Reset();
|
||||||
void DoState(PointerWrap& p);
|
void DoState(PointerWrap& p);
|
||||||
|
void RefreshConfig();
|
||||||
};
|
};
|
||||||
} // namespace PowerPC
|
} // namespace PowerPC
|
||||||
|
Reference in New Issue
Block a user