Config: Force jit off with game-specific configs.

This commit is contained in:
Unknown W. Brackets 2022-12-17 08:54:31 -08:00
parent 5c9a38d50c
commit 4404b3a5f2
2 changed files with 35 additions and 11 deletions

View File

@ -1491,12 +1491,6 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) {
g_Config.bSkipBufferEffects = false; g_Config.bSkipBufferEffects = false;
} }
// Override ppsspp.ini JIT value to prevent crashing
if (DefaultCpuCore() != (int)CPUCore::JIT && g_Config.iCpuCore == (int)CPUCore::JIT) {
jitForcedOff = true;
g_Config.iCpuCore = (int)CPUCore::IR_JIT;
}
// Automatically silence secondary instances. Could be an option I guess, but meh. // Automatically silence secondary instances. Could be an option I guess, but meh.
if (PPSSPP_ID > 1) { if (PPSSPP_ID > 1) {
g_Config.iGlobalVolume = 0; g_Config.iGlobalVolume = 0;
@ -1512,6 +1506,8 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) {
g_Config.bVSync = false; g_Config.bVSync = false;
#endif #endif
PostLoadCleanup(false);
INFO_LOG(LOADER, "Config loaded: '%s'", iniFilename_.c_str()); INFO_LOG(LOADER, "Config loaded: '%s'", iniFilename_.c_str());
} }
@ -1525,13 +1521,11 @@ bool Config::Save(const char *saveReason) {
return true; return true;
} }
if (jitForcedOff) {
// if JIT has been forced off, we don't want to screw up the user's ppsspp.ini
g_Config.iCpuCore = (int)CPUCore::JIT;
}
if (!iniFilename_.empty() && g_Config.bSaveSettings) { if (!iniFilename_.empty() && g_Config.bSaveSettings) {
saveGameConfig(gameId_, gameIdTitle_); saveGameConfig(gameId_, gameIdTitle_);
PreSaveCleanup(false);
CleanRecent(); CleanRecent();
IniFile iniFile; IniFile iniFile;
if (!iniFile.Load(iniFilename_)) { if (!iniFile.Load(iniFilename_)) {
@ -1611,15 +1605,36 @@ bool Config::Save(const char *saveReason) {
} }
INFO_LOG(LOADER, "Controller config saved: %s", controllerIniFilename_.c_str()); INFO_LOG(LOADER, "Controller config saved: %s", controllerIniFilename_.c_str());
} }
PostSaveCleanup(false);
} else { } else {
INFO_LOG(LOADER, "Not saving config"); INFO_LOG(LOADER, "Not saving config");
} }
return true;
}
void Config::PostLoadCleanup(bool gameSpecific) {
// Override ppsspp.ini JIT value to prevent crashing
if (DefaultCpuCore() != (int)CPUCore::JIT && g_Config.iCpuCore == (int)CPUCore::JIT) {
jitForcedOff = true;
g_Config.iCpuCore = (int)CPUCore::IR_JIT;
}
}
void Config::PreSaveCleanup(bool gameSpecific) {
if (jitForcedOff) {
// if JIT has been forced off, we don't want to screw up the user's ppsspp.ini
g_Config.iCpuCore = (int)CPUCore::JIT;
}
}
void Config::PostSaveCleanup(bool gameSpecific) {
if (jitForcedOff) { if (jitForcedOff) {
// force JIT off again just in case Config::Save() is called without exiting PPSSPP // force JIT off again just in case Config::Save() is called without exiting PPSSPP
if (g_Config.iCpuCore != (int)CPUCore::INTERPRETER) if (g_Config.iCpuCore != (int)CPUCore::INTERPRETER)
g_Config.iCpuCore = (int)CPUCore::IR_JIT; g_Config.iCpuCore = (int)CPUCore::IR_JIT;
} }
return true;
} }
// Use for debugging the version check without messing with the server // Use for debugging the version check without messing with the server
@ -1858,6 +1873,8 @@ bool Config::saveGameConfig(const std::string &pGameId, const std::string &title
Section *top = iniFile.GetOrCreateSection(""); Section *top = iniFile.GetOrCreateSection("");
top->AddComment(StringFromFormat("Game config for %s - %s", pGameId.c_str(), title.c_str())); top->AddComment(StringFromFormat("Game config for %s - %s", pGameId.c_str(), title.c_str()));
PreSaveCleanup(true);
IterateSettings(iniFile, [](Section *section, ConfigSetting *setting) { IterateSettings(iniFile, [](Section *section, ConfigSetting *setting) {
if (setting->perGame_) { if (setting->perGame_) {
setting->Set(section); setting->Set(section);
@ -1881,6 +1898,7 @@ bool Config::saveGameConfig(const std::string &pGameId, const std::string &title
KeyMap::SaveToIni(iniFile); KeyMap::SaveToIni(iniFile);
iniFile.Save(fullIniFilePath); iniFile.Save(fullIniFilePath);
PostSaveCleanup(true);
return true; return true;
} }
@ -1921,6 +1939,7 @@ bool Config::loadGameConfig(const std::string &pGameId, const std::string &title
}); });
KeyMap::LoadFromIni(iniFile); KeyMap::LoadFromIni(iniFile);
PostLoadCleanup(true);
return true; return true;
} }
@ -1952,6 +1971,7 @@ void Config::unloadGameConfig() {
} }
LoadStandardControllerIni(); LoadStandardControllerIni();
PostLoadCleanup(true);
} }
} }

View File

@ -575,6 +575,10 @@ protected:
void LoadStandardControllerIni(); void LoadStandardControllerIni();
void LoadLangValuesMapping(); void LoadLangValuesMapping();
void PostLoadCleanup(bool gameSpecific);
void PreSaveCleanup(bool gameSpecific);
void PostSaveCleanup(bool gameSpecific);
private: private:
bool reload_ = false; bool reload_ = false;
std::string gameId_; std::string gameId_;