ConfigManager: Drop SkipIdle option.
This option is safe + deterministic, so let's always enable it.
This commit is contained in:
parent
6bff97ea30
commit
0c67297ea0
|
@ -193,7 +193,6 @@ void DolphinAnalytics::MakePerGameBuilder()
|
|||
builder.AddData("cfg-dsp-jit", SConfig::GetInstance().m_DSPEnableJIT);
|
||||
builder.AddData("cfg-dsp-thread", SConfig::GetInstance().bDSPThread);
|
||||
builder.AddData("cfg-cpu-thread", SConfig::GetInstance().bCPUThread);
|
||||
builder.AddData("cfg-idle-skip", SConfig::GetInstance().bSkipIdle);
|
||||
builder.AddData("cfg-fastmem", SConfig::GetInstance().bFastmem);
|
||||
builder.AddData("cfg-syncgpu", SConfig::GetInstance().bSyncGPU);
|
||||
builder.AddData("cfg-audio-backend", SConfig::GetInstance().sBackend);
|
||||
|
|
|
@ -302,7 +302,7 @@ bool CBoot::BootUp()
|
|||
}
|
||||
|
||||
// Scan for common HLE functions
|
||||
if (_StartupPara.bSkipIdle && _StartupPara.bHLE_BS2 && !_StartupPara.bEnableDebugging)
|
||||
if (_StartupPara.bHLE_BS2 && !_StartupPara.bEnableDebugging)
|
||||
{
|
||||
PPCAnalyst::FindFunctions(0x80004000, 0x811fffff, &g_symbolDB);
|
||||
SignatureDB db;
|
||||
|
|
|
@ -65,7 +65,6 @@ private:
|
|||
bool valid;
|
||||
bool bCPUThread;
|
||||
bool bEnableCheats;
|
||||
bool bSkipIdle;
|
||||
bool bSyncGPUOnSkipIdleHack;
|
||||
bool bFPRF;
|
||||
bool bAccurateNaNs;
|
||||
|
@ -97,7 +96,6 @@ void ConfigCache::SaveConfig(const SConfig& config)
|
|||
|
||||
bCPUThread = config.bCPUThread;
|
||||
bEnableCheats = config.bEnableCheats;
|
||||
bSkipIdle = config.bSkipIdle;
|
||||
bSyncGPUOnSkipIdleHack = config.bSyncGPUOnSkipIdleHack;
|
||||
bFPRF = config.bFPRF;
|
||||
bAccurateNaNs = config.bAccurateNaNs;
|
||||
|
@ -140,7 +138,6 @@ void ConfigCache::RestoreConfig(SConfig* config)
|
|||
|
||||
config->bCPUThread = bCPUThread;
|
||||
config->bEnableCheats = bEnableCheats;
|
||||
config->bSkipIdle = bSkipIdle;
|
||||
config->bSyncGPUOnSkipIdleHack = bSyncGPUOnSkipIdleHack;
|
||||
config->bFPRF = bFPRF;
|
||||
config->bAccurateNaNs = bAccurateNaNs;
|
||||
|
@ -250,7 +247,6 @@ bool BootCore(const std::string& _rFilename)
|
|||
|
||||
core_section->Get("CPUThread", &StartUp.bCPUThread, StartUp.bCPUThread);
|
||||
core_section->Get("EnableCheats", &StartUp.bEnableCheats, StartUp.bEnableCheats);
|
||||
core_section->Get("SkipIdle", &StartUp.bSkipIdle, StartUp.bSkipIdle);
|
||||
core_section->Get("SyncOnSkipIdle", &StartUp.bSyncGPUOnSkipIdleHack,
|
||||
StartUp.bSyncGPUOnSkipIdleHack);
|
||||
core_section->Get("FPRF", &StartUp.bFPRF, StartUp.bFPRF);
|
||||
|
@ -330,7 +326,6 @@ bool BootCore(const std::string& _rFilename)
|
|||
if (Movie::IsPlayingInput() && Movie::IsConfigSaved())
|
||||
{
|
||||
StartUp.bCPUThread = Movie::IsDualCore();
|
||||
StartUp.bSkipIdle = Movie::IsSkipIdle();
|
||||
StartUp.bDSPHLE = Movie::IsDSPHLE();
|
||||
StartUp.bProgressive = Movie::IsProgressive();
|
||||
StartUp.bPAL60 = Movie::IsPAL60();
|
||||
|
|
|
@ -220,7 +220,6 @@ void SConfig::SaveCoreSettings(IniFile& ini)
|
|||
core->Set("Fastmem", bFastmem);
|
||||
core->Set("CPUThread", bCPUThread);
|
||||
core->Set("DSPHLE", bDSPHLE);
|
||||
core->Set("SkipIdle", bSkipIdle);
|
||||
core->Set("SyncOnSkipIdle", bSyncGPUOnSkipIdleHack);
|
||||
core->Set("SyncGPU", bSyncGPU);
|
||||
core->Set("SyncGpuMaxDistance", iSyncGpuMaxDistance);
|
||||
|
@ -493,7 +492,6 @@ void SConfig::LoadCoreSettings(IniFile& ini)
|
|||
core->Get("DSPHLE", &bDSPHLE, true);
|
||||
core->Get("TimingVariance", &iTimingVariance, 40);
|
||||
core->Get("CPUThread", &bCPUThread, true);
|
||||
core->Get("SkipIdle", &bSkipIdle, true);
|
||||
core->Get("SyncOnSkipIdle", &bSyncGPUOnSkipIdleHack, true);
|
||||
core->Get("DefaultISO", &m_strDefaultISO);
|
||||
core->Get("DVDRoot", &m_strDVDRoot);
|
||||
|
@ -644,7 +642,6 @@ void SConfig::LoadDefaults()
|
|||
iCPUCore = PowerPC::CORE_JIT64;
|
||||
iTimingVariance = 40;
|
||||
bCPUThread = false;
|
||||
bSkipIdle = false;
|
||||
bSyncGPUOnSkipIdleHack = true;
|
||||
bRunCompareServer = false;
|
||||
bDSPHLE = true;
|
||||
|
|
|
@ -92,7 +92,6 @@ struct SConfig : NonCopyable
|
|||
bool bCPUThread = true;
|
||||
bool bDSPThread = false;
|
||||
bool bDSPHLE = true;
|
||||
bool bSkipIdle = true;
|
||||
bool bSyncGPUOnSkipIdleHack = true;
|
||||
bool bNTSC = false;
|
||||
bool bForceNTSCJ = false;
|
||||
|
|
|
@ -924,11 +924,9 @@ void UpdateTitle()
|
|||
float TicksPercentage =
|
||||
(float)diff / (float)(SystemTimers::GetTicksPerSecond() / 1000000) * 100;
|
||||
|
||||
SFPS +=
|
||||
StringFromFormat(" | CPU: %s%i MHz [Real: %i + IdleSkip: %i] / %i MHz (%s%3.0f%%)",
|
||||
_CoreParameter.bSkipIdle ? "~" : "", (int)(diff), (int)(diff - idleDiff),
|
||||
(int)(idleDiff), SystemTimers::GetTicksPerSecond() / 1000000,
|
||||
_CoreParameter.bSkipIdle ? "~" : "", TicksPercentage);
|
||||
SFPS += StringFromFormat(" | CPU: ~%i MHz [Real: %i + IdleSkip: %i] / %i MHz (~%3.0f%%)",
|
||||
(int)(diff), (int)(diff - idleDiff), (int)(idleDiff),
|
||||
SystemTimers::GetTicksPerSecond() / 1000000, TicksPercentage);
|
||||
}
|
||||
}
|
||||
// This is our final "frame counter" string
|
||||
|
|
|
@ -67,7 +67,7 @@ static u64 s_totalLagCount = 0; // just stats
|
|||
static u64 s_currentInputCount = 0, s_totalInputCount = 0; // just stats
|
||||
static u64 s_totalTickCount = 0, s_tickCountAtLastInput = 0; // just stats
|
||||
static u64 s_recordingStartTime; // seconds since 1970 that recording started
|
||||
static bool s_bSaveConfig = false, s_bSkipIdle = false, s_bDualCore = false;
|
||||
static bool s_bSaveConfig = false, s_bDualCore = false;
|
||||
static bool s_bProgressive = false, s_bPAL60 = false;
|
||||
static bool s_bDSPHLE = false, s_bFastDiscSpeed = false;
|
||||
static bool s_bSyncGPU = false, s_bNetPlay = false;
|
||||
|
@ -477,11 +477,6 @@ bool IsPAL60()
|
|||
return s_bPAL60;
|
||||
}
|
||||
|
||||
bool IsSkipIdle()
|
||||
{
|
||||
return s_bSkipIdle;
|
||||
}
|
||||
|
||||
bool IsDSPHLE()
|
||||
{
|
||||
return s_bDSPHLE;
|
||||
|
@ -952,7 +947,6 @@ void ReadHeader()
|
|||
if (tmpHeader.bSaveConfig)
|
||||
{
|
||||
s_bSaveConfig = true;
|
||||
s_bSkipIdle = tmpHeader.bSkipIdle;
|
||||
s_bDualCore = tmpHeader.bDualCore;
|
||||
s_bProgressive = tmpHeader.bProgressive;
|
||||
s_bPAL60 = tmpHeader.bPAL60;
|
||||
|
@ -1432,7 +1426,7 @@ void SaveRecording(const std::string& filename)
|
|||
header.recordingStartTime = s_recordingStartTime;
|
||||
|
||||
header.bSaveConfig = true;
|
||||
header.bSkipIdle = s_bSkipIdle;
|
||||
header.bSkipIdle = true;
|
||||
header.bDualCore = s_bDualCore;
|
||||
header.bProgressive = s_bProgressive;
|
||||
header.bPAL60 = s_bPAL60;
|
||||
|
@ -1518,7 +1512,6 @@ void SetGraphicsConfig()
|
|||
void GetSettings()
|
||||
{
|
||||
s_bSaveConfig = true;
|
||||
s_bSkipIdle = SConfig::GetInstance().bSkipIdle;
|
||||
s_bDualCore = SConfig::GetInstance().bCPUThread;
|
||||
s_bProgressive = SConfig::GetInstance().bProgressive;
|
||||
s_bPAL60 = SConfig::GetInstance().bPAL60;
|
||||
|
|
|
@ -22,7 +22,7 @@ void Interpreter::bx(UGeckoInstruction _inst)
|
|||
|
||||
m_EndBlock = true;
|
||||
|
||||
if (NPC == PC && SConfig::GetInstance().bSkipIdle)
|
||||
if (NPC == PC)
|
||||
{
|
||||
CoreTiming::Idle();
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ void Interpreter::bcx(UGeckoInstruction _inst)
|
|||
// lwz r0, XXXX(r13)
|
||||
// cmpXwi r0,0
|
||||
// beq -8
|
||||
if (NPC == PC - 8 && _inst.hex == 0x4182fff8 /* beq */ && SConfig::GetInstance().bSkipIdle)
|
||||
if (NPC == PC - 8 && _inst.hex == 0x4182fff8 /* beq */)
|
||||
{
|
||||
if (PowerPC::HostRead_U32(PC - 8) >> 16 == 0x800D /* lwz */)
|
||||
{
|
||||
|
|
|
@ -125,8 +125,8 @@ void Jit64::lXXx(UGeckoInstruction inst)
|
|||
// ... maybe the throttle one already do that :p
|
||||
// TODO: We shouldn't use a debug read here. It should be possible to get
|
||||
// the following instructions out of the JIT state.
|
||||
if (SConfig::GetInstance().bSkipIdle && CPU::GetState() != CPU::CPU_STEPPING && inst.OPCD == 32 &&
|
||||
MergeAllowedNextInstructions(2) && (inst.hex & 0xFFFF0000) == 0x800D0000 &&
|
||||
if (CPU::GetState() != CPU::CPU_STEPPING && inst.OPCD == 32 && MergeAllowedNextInstructions(2) &&
|
||||
(inst.hex & 0xFFFF0000) == 0x800D0000 &&
|
||||
(js.op[1].inst.hex == 0x28000000 ||
|
||||
(SConfig::GetInstance().bWii && js.op[1].inst.hex == 0x2C000000)) &&
|
||||
js.op[2].inst.hex == 0x4182fff8)
|
||||
|
|
|
@ -430,7 +430,7 @@ void JitArm64::lXX(UGeckoInstruction inst)
|
|||
SafeLoadToReg(d, update ? a : (a ? a : -1), offsetReg, flags, offset, update);
|
||||
|
||||
// LWZ idle skipping
|
||||
if (SConfig::GetInstance().bSkipIdle && inst.OPCD == 32 && MergeAllowedNextInstructions(2) &&
|
||||
if (inst.OPCD == 32 && MergeAllowedNextInstructions(2) &&
|
||||
(inst.hex & 0xFFFF0000) == 0x800D0000 && // lwz r0, XXXX(r13)
|
||||
(js.op[1].inst.hex == 0x28000000 ||
|
||||
(SConfig::GetInstance().bWii && js.op[1].inst.hex == 0x2C000000)) && // cmpXwi r0,0
|
||||
|
|
|
@ -145,7 +145,7 @@ void JitILBase::bcx(UGeckoInstruction inst)
|
|||
// If idle skipping is enabled, then this branch will only be reached when the branch is not
|
||||
// taken.
|
||||
// TODO: We shouldn't use debug reads here.
|
||||
if (SConfig::GetInstance().bSkipIdle && inst.hex == 0x4182fff8 &&
|
||||
if (inst.hex == 0x4182fff8 &&
|
||||
(PowerPC::HostRead_U32(js.compilerPC - 8) & 0xFFFF0000) == 0x800D0000 &&
|
||||
(PowerPC::HostRead_U32(js.compilerPC - 4) == 0x28000000 ||
|
||||
(SConfig::GetInstance().bWii && PowerPC::HostRead_U32(js.compilerPC - 4) == 0x2C000000)))
|
||||
|
|
|
@ -57,8 +57,7 @@ void JitILBase::lXz(UGeckoInstruction inst)
|
|||
// TODO: This really should be done somewhere else. Either lower in the IR
|
||||
// or higher in PPCAnalyst
|
||||
// TODO: We shouldn't use debug reads here.
|
||||
if (SConfig::GetInstance().bSkipIdle && CPU::GetState() != CPU::CPU_STEPPING &&
|
||||
inst.OPCD == 32 && // Lwx
|
||||
if (CPU::GetState() != CPU::CPU_STEPPING && inst.OPCD == 32 && // Lwx
|
||||
(inst.hex & 0xFFFF0000) == 0x800D0000 &&
|
||||
(PowerPC::HostRead_U32(js.compilerPC + 4) == 0x28000000 ||
|
||||
(SConfig::GetInstance().bWii && PowerPC::HostRead_U32(js.compilerPC + 4) == 0x2C000000)) &&
|
||||
|
|
|
@ -54,7 +54,6 @@ void GeneralConfigPane::InitializeGUI()
|
|||
m_cpu_engine_array_string.Add(cpu_core.name);
|
||||
|
||||
m_dual_core_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable Dual Core (speedup)"));
|
||||
m_idle_skip_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable Idle Skipping (speedup)"));
|
||||
m_cheats_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable Cheats"));
|
||||
m_force_ntscj_checkbox = new wxCheckBox(this, wxID_ANY, _("Force Console as NTSC-J"));
|
||||
m_analytics_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable Usage Statistics Reporting"));
|
||||
|
@ -73,8 +72,6 @@ void GeneralConfigPane::InitializeGUI()
|
|||
m_dual_core_checkbox->SetToolTip(
|
||||
_("Splits the CPU and GPU threads so they can be run on separate cores.\nProvides major "
|
||||
"speed improvements on most modern PCs, but can cause occasional crashes/glitches."));
|
||||
m_idle_skip_checkbox->SetToolTip(
|
||||
_("Attempt to detect and skip wait-loops.\nIf unsure, leave this checked."));
|
||||
m_cheats_checkbox->SetToolTip(_("Enables the use of Action Replay and Gecko cheats."));
|
||||
m_force_ntscj_checkbox->SetToolTip(
|
||||
_("Forces NTSC-J mode for using the Japanese ROM font.\nIf left unchecked, Dolphin defaults "
|
||||
|
@ -92,7 +89,6 @@ void GeneralConfigPane::InitializeGUI()
|
|||
"or lower the audio pitch to prevent audio from stuttering."));
|
||||
|
||||
m_dual_core_checkbox->Bind(wxEVT_CHECKBOX, &GeneralConfigPane::OnDualCoreCheckBoxChanged, this);
|
||||
m_idle_skip_checkbox->Bind(wxEVT_CHECKBOX, &GeneralConfigPane::OnIdleSkipCheckBoxChanged, this);
|
||||
m_cheats_checkbox->Bind(wxEVT_CHECKBOX, &GeneralConfigPane::OnCheatCheckBoxChanged, this);
|
||||
m_force_ntscj_checkbox->Bind(wxEVT_CHECKBOX, &GeneralConfigPane::OnForceNTSCJCheckBoxChanged,
|
||||
this);
|
||||
|
@ -116,8 +112,6 @@ void GeneralConfigPane::InitializeGUI()
|
|||
basic_settings_sizer->AddSpacer(space5);
|
||||
basic_settings_sizer->Add(m_dual_core_checkbox, 0, wxLEFT | wxRIGHT, space5);
|
||||
basic_settings_sizer->AddSpacer(space5);
|
||||
basic_settings_sizer->Add(m_idle_skip_checkbox, 0, wxLEFT | wxRIGHT, space5);
|
||||
basic_settings_sizer->AddSpacer(space5);
|
||||
basic_settings_sizer->Add(m_cheats_checkbox, 0, wxLEFT | wxRIGHT, space5);
|
||||
basic_settings_sizer->AddSpacer(space5);
|
||||
basic_settings_sizer->Add(throttler_sizer);
|
||||
|
@ -155,7 +149,6 @@ void GeneralConfigPane::LoadGUIValues()
|
|||
const SConfig& startup_params = SConfig::GetInstance();
|
||||
|
||||
m_dual_core_checkbox->SetValue(startup_params.bCPUThread);
|
||||
m_idle_skip_checkbox->SetValue(startup_params.bSkipIdle);
|
||||
m_cheats_checkbox->SetValue(startup_params.bEnableCheats);
|
||||
m_force_ntscj_checkbox->SetValue(startup_params.bForceNTSCJ);
|
||||
m_analytics_checkbox->SetValue(startup_params.m_analytics_enabled);
|
||||
|
@ -175,7 +168,6 @@ void GeneralConfigPane::RefreshGUI()
|
|||
if (Core::IsRunning())
|
||||
{
|
||||
m_dual_core_checkbox->Disable();
|
||||
m_idle_skip_checkbox->Disable();
|
||||
m_cheats_checkbox->Disable();
|
||||
m_force_ntscj_checkbox->Disable();
|
||||
m_cpu_engine_radiobox->Disable();
|
||||
|
@ -190,11 +182,6 @@ void GeneralConfigPane::OnDualCoreCheckBoxChanged(wxCommandEvent& event)
|
|||
SConfig::GetInstance().bCPUThread = m_dual_core_checkbox->IsChecked();
|
||||
}
|
||||
|
||||
void GeneralConfigPane::OnIdleSkipCheckBoxChanged(wxCommandEvent& event)
|
||||
{
|
||||
SConfig::GetInstance().bSkipIdle = m_idle_skip_checkbox->IsChecked();
|
||||
}
|
||||
|
||||
void GeneralConfigPane::OnCheatCheckBoxChanged(wxCommandEvent& event)
|
||||
{
|
||||
SConfig::GetInstance().bEnableCheats = m_cheats_checkbox->IsChecked();
|
||||
|
|
|
@ -29,7 +29,6 @@ private:
|
|||
void RefreshGUI();
|
||||
|
||||
void OnDualCoreCheckBoxChanged(wxCommandEvent&);
|
||||
void OnIdleSkipCheckBoxChanged(wxCommandEvent&);
|
||||
void OnCheatCheckBoxChanged(wxCommandEvent&);
|
||||
void OnForceNTSCJCheckBoxChanged(wxCommandEvent&);
|
||||
void OnThrottlerChoiceChanged(wxCommandEvent&);
|
||||
|
@ -41,7 +40,6 @@ private:
|
|||
wxArrayString m_cpu_engine_array_string;
|
||||
|
||||
wxCheckBox* m_dual_core_checkbox;
|
||||
wxCheckBox* m_idle_skip_checkbox;
|
||||
wxCheckBox* m_cheats_checkbox;
|
||||
wxCheckBox* m_force_ntscj_checkbox;
|
||||
|
||||
|
|
|
@ -288,7 +288,6 @@ EVT_MENU(IDM_FIFOPLAYER, CFrame::OnFifoPlayer)
|
|||
|
||||
EVT_MENU(IDM_TOGGLE_FULLSCREEN, CFrame::OnToggleFullscreen)
|
||||
EVT_MENU(IDM_TOGGLE_DUAL_CORE, CFrame::OnToggleDualCore)
|
||||
EVT_MENU(IDM_TOGGLE_SKIP_IDLE, CFrame::OnToggleSkipIdle)
|
||||
EVT_MENU(IDM_TOGGLE_TOOLBAR, CFrame::OnToggleToolbar)
|
||||
EVT_MENU(IDM_TOGGLE_STATUSBAR, CFrame::OnToggleStatusbar)
|
||||
EVT_MENU_RANGE(IDM_LOG_WINDOW, IDM_VIDEO_WINDOW, CFrame::OnToggleWindow)
|
||||
|
|
|
@ -294,7 +294,6 @@ private:
|
|||
|
||||
void OnToggleFullscreen(wxCommandEvent& event);
|
||||
void OnToggleDualCore(wxCommandEvent& event);
|
||||
void OnToggleSkipIdle(wxCommandEvent& event);
|
||||
void OnManagerResize(wxAuiManagerEvent& event);
|
||||
void OnMove(wxMoveEvent& event);
|
||||
void OnResize(wxSizeEvent& event);
|
||||
|
|
|
@ -1571,12 +1571,6 @@ void CFrame::OnToggleDualCore(wxCommandEvent& WXUNUSED(event))
|
|||
SConfig::GetInstance().SaveSettings();
|
||||
}
|
||||
|
||||
void CFrame::OnToggleSkipIdle(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
SConfig::GetInstance().bSkipIdle = !SConfig::GetInstance().bSkipIdle;
|
||||
SConfig::GetInstance().SaveSettings();
|
||||
}
|
||||
|
||||
void CFrame::OnLoadStateFromFile(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
wxString path =
|
||||
|
|
|
@ -288,7 +288,6 @@ enum
|
|||
// --------------------------------------------------------------
|
||||
|
||||
IDM_TOGGLE_DUAL_CORE, // Other
|
||||
IDM_TOGGLE_SKIP_IDLE,
|
||||
IDM_TOGGLE_TOOLBAR,
|
||||
IDM_TOGGLE_STATUSBAR,
|
||||
IDM_NOTIFY_MAP_LOADED,
|
||||
|
|
Loading…
Reference in New Issue