Merge pull request #1437 from skidau/Remove-DSP-thread-option

Removed the DSP LLE on separate thread option.
This commit is contained in:
skidau 2014-12-06 10:54:53 +11:00
commit f7a16eca84
7 changed files with 30 additions and 20 deletions

View File

@ -125,7 +125,6 @@ bool BootCore(const std::string& _rFilename)
config_cache.strBackend = StartUp.m_strVideoBackend; config_cache.strBackend = StartUp.m_strVideoBackend;
config_cache.m_strGPUDeterminismMode = StartUp.m_strGPUDeterminismMode; config_cache.m_strGPUDeterminismMode = StartUp.m_strGPUDeterminismMode;
config_cache.m_EnableJIT = SConfig::GetInstance().m_DSPEnableJIT; config_cache.m_EnableJIT = SConfig::GetInstance().m_DSPEnableJIT;
config_cache.bDSPThread = StartUp.bDSPThread;
config_cache.Volume = SConfig::GetInstance().m_Volume; config_cache.Volume = SConfig::GetInstance().m_Volume;
config_cache.sBackend = SConfig::GetInstance().sBackend; config_cache.sBackend = SConfig::GetInstance().sBackend;
config_cache.framelimit = SConfig::GetInstance().m_Framelimit; config_cache.framelimit = SConfig::GetInstance().m_Framelimit;
@ -165,7 +164,6 @@ bool BootCore(const std::string& _rFilename)
core_section->Get("FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed); core_section->Get("FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed);
core_section->Get("BlockMerging", &StartUp.bMergeBlocks, StartUp.bMergeBlocks); core_section->Get("BlockMerging", &StartUp.bMergeBlocks, StartUp.bMergeBlocks);
core_section->Get("DSPHLE", &StartUp.bDSPHLE, StartUp.bDSPHLE); core_section->Get("DSPHLE", &StartUp.bDSPHLE, StartUp.bDSPHLE);
core_section->Get("DSPThread", &StartUp.bDSPThread, StartUp.bDSPThread);
core_section->Get("GFXBackend", &StartUp.m_strVideoBackend, StartUp.m_strVideoBackend); core_section->Get("GFXBackend", &StartUp.m_strVideoBackend, StartUp.m_strVideoBackend);
core_section->Get("CPUCore", &StartUp.iCPUCore, StartUp.iCPUCore); core_section->Get("CPUCore", &StartUp.iCPUCore, StartUp.iCPUCore);
core_section->Get("HLE_BS2", &StartUp.bHLE_BS2, StartUp.bHLE_BS2); core_section->Get("HLE_BS2", &StartUp.bHLE_BS2, StartUp.bHLE_BS2);
@ -293,7 +291,6 @@ void Stop()
StartUp.bFastDiscSpeed = config_cache.bFastDiscSpeed; StartUp.bFastDiscSpeed = config_cache.bFastDiscSpeed;
StartUp.bMergeBlocks = config_cache.bMergeBlocks; StartUp.bMergeBlocks = config_cache.bMergeBlocks;
StartUp.bDSPHLE = config_cache.bDSPHLE; StartUp.bDSPHLE = config_cache.bDSPHLE;
StartUp.bDSPThread = config_cache.bDSPThread;
StartUp.m_strVideoBackend = config_cache.strBackend; StartUp.m_strVideoBackend = config_cache.strBackend;
StartUp.m_strGPUDeterminismMode = config_cache.m_strGPUDeterminismMode; StartUp.m_strGPUDeterminismMode = config_cache.m_strGPUDeterminismMode;
VideoBackend::ActivateBackend(StartUp.m_strVideoBackend); VideoBackend::ActivateBackend(StartUp.m_strVideoBackend);

View File

@ -312,7 +312,6 @@ void SConfig::SaveCoreSettings(IniFile& ini)
core->Set("CPUCore", m_LocalCoreStartupParameter.iCPUCore); core->Set("CPUCore", m_LocalCoreStartupParameter.iCPUCore);
core->Set("Fastmem", m_LocalCoreStartupParameter.bFastmem); core->Set("Fastmem", m_LocalCoreStartupParameter.bFastmem);
core->Set("CPUThread", m_LocalCoreStartupParameter.bCPUThread); core->Set("CPUThread", m_LocalCoreStartupParameter.bCPUThread);
core->Set("DSPThread", m_LocalCoreStartupParameter.bDSPThread);
core->Set("DSPHLE", m_LocalCoreStartupParameter.bDSPHLE); core->Set("DSPHLE", m_LocalCoreStartupParameter.bDSPHLE);
core->Set("SkipIdle", m_LocalCoreStartupParameter.bSkipIdle); core->Set("SkipIdle", m_LocalCoreStartupParameter.bSkipIdle);
core->Set("DefaultISO", m_LocalCoreStartupParameter.m_strDefaultISO); core->Set("DefaultISO", m_LocalCoreStartupParameter.m_strDefaultISO);
@ -537,7 +536,6 @@ void SConfig::LoadCoreSettings(IniFile& ini)
core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, SCoreStartupParameter::CORE_INTERPRETER); core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, SCoreStartupParameter::CORE_INTERPRETER);
#endif #endif
core->Get("Fastmem", &m_LocalCoreStartupParameter.bFastmem, true); core->Get("Fastmem", &m_LocalCoreStartupParameter.bFastmem, true);
core->Get("DSPThread", &m_LocalCoreStartupParameter.bDSPThread, false);
core->Get("DSPHLE", &m_LocalCoreStartupParameter.bDSPHLE, true); core->Get("DSPHLE", &m_LocalCoreStartupParameter.bDSPHLE, true);
core->Get("CPUThread", &m_LocalCoreStartupParameter.bCPUThread, true); core->Get("CPUThread", &m_LocalCoreStartupParameter.bCPUThread, true);
core->Get("SkipIdle", &m_LocalCoreStartupParameter.bSkipIdle, true); core->Get("SkipIdle", &m_LocalCoreStartupParameter.bSkipIdle, true);

View File

@ -344,6 +344,11 @@ void EmuThread()
OSD::AddMessage("Dolphin " + g_video_backend->GetName() + " Video Backend.", 5000); OSD::AddMessage("Dolphin " + g_video_backend->GetName() + " Video Backend.", 5000);
if (cpu_info.HTT)
SConfig::GetInstance().m_LocalCoreStartupParameter.bDSPThread = cpu_info.num_cores > 4;
else
SConfig::GetInstance().m_LocalCoreStartupParameter.bDSPThread = cpu_info.num_cores > 2;
if (!DSP::GetDSPEmulator()->Initialize(core_parameter.bWii, core_parameter.bDSPThread)) if (!DSP::GetDSPEmulator()->Initialize(core_parameter.bWii, core_parameter.bDSPThread))
{ {
HW::Shutdown(); HW::Shutdown();

View File

@ -71,7 +71,6 @@ void SCoreStartupParameter::LoadDefaults()
bSkipIdle = false; bSkipIdle = false;
bRunCompareServer = false; bRunCompareServer = false;
bDSPHLE = true; bDSPHLE = true;
bDSPThread = true;
bFastmem = true; bFastmem = true;
bFPRF = false; bFPRF = false;
bBAT = false; bBAT = false;

View File

@ -17,6 +17,8 @@
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
#include "Core/Core.h" #include "Core/Core.h"
#include "Core/Host.h" #include "Core/Host.h"
#include "Core/Movie.h"
#include "Core/NetPlayProto.h"
#include "Core/DSP/DSPCaptureLogger.h" #include "Core/DSP/DSPCaptureLogger.h"
#include "Core/DSP/DSPCore.h" #include "Core/DSP/DSPCore.h"
#include "Core/DSP/DSPDisassembler.h" #include "Core/DSP/DSPDisassembler.h"
@ -31,7 +33,6 @@
#include "Core/HW/DSPLLE/DSPLLEGlobals.h" #include "Core/HW/DSPLLE/DSPLLEGlobals.h"
#include "Core/HW/DSPLLE/DSPSymbols.h" #include "Core/HW/DSPLLE/DSPSymbols.h"
DSPLLE::DSPLLE() DSPLLE::DSPLLE()
{ {
m_bIsRunning = false; m_bIsRunning = false;
@ -40,6 +41,7 @@ DSPLLE::DSPLLE()
static Common::Event dspEvent; static Common::Event dspEvent;
static Common::Event ppcEvent; static Common::Event ppcEvent;
static bool requestDisableThread;
void DSPLLE::DoState(PointerWrap &p) void DSPLLE::DoState(PointerWrap &p)
{ {
@ -160,7 +162,10 @@ static bool FillDSPInitOptions(DSPInitOptions* opts)
bool DSPLLE::Initialize(bool bWii, bool bDSPThread) bool DSPLLE::Initialize(bool bWii, bool bDSPThread)
{ {
m_bWii = bWii; m_bWii = bWii;
m_bDSPThread = bDSPThread; m_bDSPThread = true;
if (NetPlay::IsNetPlayRunning() || Movie::IsMovieActive() || Core::g_want_determinism || !bDSPThread)
m_bDSPThread = false;
requestDisableThread = false;
DSPInitOptions opts; DSPInitOptions opts;
if (!FillDSPInitOptions(&opts)) if (!FillDSPInitOptions(&opts))
@ -209,6 +214,13 @@ u16 DSPLLE::DSP_WriteControlRegister(u16 _uFlag)
// and immediately process it, if it has. // and immediately process it, if it has.
if (_uFlag & 2) if (_uFlag & 2)
{ {
if (m_bDSPThread)
{
// External interrupt pending: this is the zelda ucode.
// Disable the DSP thread because there is no performance gain.
requestDisableThread = true;
}
if (!m_bDSPThread) if (!m_bDSPThread)
{ {
DSPCore_CheckExternalInterrupt(); DSPCore_CheckExternalInterrupt();
@ -305,6 +317,17 @@ void DSPLLE::DSP_Update(int cycles)
soundStream->Update(); soundStream->Update();
} }
*/ */
if (m_bDSPThread)
{
if (requestDisableThread || NetPlay::IsNetPlayRunning() || Movie::IsMovieActive() || Core::g_want_determinism)
{
DSP_StopSoundStream();
m_bDSPThread = false;
requestDisableThread = false;
SConfig::GetInstance().m_LocalCoreStartupParameter.bDSPThread = false;
}
}
// If we're not on a thread, run cycles here. // If we're not on a thread, run cycles here.
if (!m_bDSPThread) if (!m_bDSPThread)
{ {

View File

@ -137,7 +137,6 @@ EVT_CHECKBOX(ID_NTSCJ, CConfigMain::CoreSettingsChanged)
EVT_RADIOBOX(ID_DSPENGINE, CConfigMain::AudioSettingsChanged) EVT_RADIOBOX(ID_DSPENGINE, CConfigMain::AudioSettingsChanged)
EVT_CHECKBOX(ID_DSPTHREAD, CConfigMain::AudioSettingsChanged)
EVT_CHECKBOX(ID_ENABLE_THROTTLE, CConfigMain::AudioSettingsChanged) EVT_CHECKBOX(ID_ENABLE_THROTTLE, CConfigMain::AudioSettingsChanged)
EVT_CHECKBOX(ID_DPL2DECODER, CConfigMain::AudioSettingsChanged) EVT_CHECKBOX(ID_DPL2DECODER, CConfigMain::AudioSettingsChanged)
EVT_CHOICE(ID_BACKEND, CConfigMain::AudioSettingsChanged) EVT_CHOICE(ID_BACKEND, CConfigMain::AudioSettingsChanged)
@ -228,7 +227,6 @@ void CConfigMain::UpdateGUI()
// Disable stuff on AudioPage // Disable stuff on AudioPage
DSPEngine->Disable(); DSPEngine->Disable();
DSPThread->Disable();
DPL2Decoder->Disable(); DPL2Decoder->Disable();
Latency->Disable(); Latency->Disable();
@ -361,7 +359,6 @@ void CConfigMain::InitializeGUIValues()
VolumeSlider->Enable(SupportsVolumeChanges(SConfig::GetInstance().sBackend)); VolumeSlider->Enable(SupportsVolumeChanges(SConfig::GetInstance().sBackend));
VolumeSlider->SetValue(SConfig::GetInstance().m_Volume); VolumeSlider->SetValue(SConfig::GetInstance().m_Volume);
VolumeText->SetLabel(wxString::Format("%d %%", SConfig::GetInstance().m_Volume)); VolumeText->SetLabel(wxString::Format("%d %%", SConfig::GetInstance().m_Volume));
DSPThread->SetValue(startup_params.bDSPThread);
DPL2Decoder->Enable(std::string(SConfig::GetInstance().sBackend) == BACKEND_OPENAL); DPL2Decoder->Enable(std::string(SConfig::GetInstance().sBackend) == BACKEND_OPENAL);
DPL2Decoder->SetValue(startup_params.bDPL2Decoder); DPL2Decoder->SetValue(startup_params.bDPL2Decoder);
Latency->Enable(std::string(SConfig::GetInstance().sBackend) == BACKEND_OPENAL); Latency->Enable(std::string(SConfig::GetInstance().sBackend) == BACKEND_OPENAL);
@ -471,7 +468,6 @@ void CConfigMain::InitializeGUITooltips()
InterfaceLang->SetToolTip(_("Change the language of the user interface.\nRequires restart.")); InterfaceLang->SetToolTip(_("Change the language of the user interface.\nRequires restart."));
// Audio tooltips // Audio tooltips
DSPThread->SetToolTip(_("Run DSP LLE on a dedicated thread (not recommended: might cause freezes)."));
BackendSelection->SetToolTip(_("Changing this will have no effect while the emulator is running!")); BackendSelection->SetToolTip(_("Changing this will have no effect while the emulator is running!"));
// GameCube - Devices // GameCube - Devices
@ -602,7 +598,6 @@ void CConfigMain::CreateGUIControls()
// Audio page // Audio page
DSPEngine = new wxRadioBox(AudioPage, ID_DSPENGINE, _("DSP Emulator Engine"), wxDefaultPosition, wxDefaultSize, arrayStringFor_DSPEngine, 0, wxRA_SPECIFY_ROWS); DSPEngine = new wxRadioBox(AudioPage, ID_DSPENGINE, _("DSP Emulator Engine"), wxDefaultPosition, wxDefaultSize, arrayStringFor_DSPEngine, 0, wxRA_SPECIFY_ROWS);
DSPThread = new wxCheckBox(AudioPage, ID_DSPTHREAD, _("DSPLLE on Separate Thread"));
DPL2Decoder = new wxCheckBox(AudioPage, ID_DPL2DECODER, _("Dolby Pro Logic II decoder")); DPL2Decoder = new wxCheckBox(AudioPage, ID_DPL2DECODER, _("Dolby Pro Logic II decoder"));
VolumeSlider = new wxSlider(AudioPage, ID_VOLUME, 0, 1, 100, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL|wxSL_INVERSE); VolumeSlider = new wxSlider(AudioPage, ID_VOLUME, 0, 1, 100, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL|wxSL_INVERSE);
VolumeText = new wxStaticText(AudioPage, wxID_ANY, ""); VolumeText = new wxStaticText(AudioPage, wxID_ANY, "");
@ -621,7 +616,6 @@ void CConfigMain::CreateGUIControls()
// Create sizer and add items to dialog // Create sizer and add items to dialog
wxStaticBoxSizer *sbAudioSettings = new wxStaticBoxSizer(wxVERTICAL, AudioPage, _("Sound Settings")); wxStaticBoxSizer *sbAudioSettings = new wxStaticBoxSizer(wxVERTICAL, AudioPage, _("Sound Settings"));
sbAudioSettings->Add(DSPEngine, 0, wxALL | wxEXPAND, 5); sbAudioSettings->Add(DSPEngine, 0, wxALL | wxEXPAND, 5);
sbAudioSettings->Add(DSPThread, 0, wxALL, 5);
sbAudioSettings->Add(DPL2Decoder, 0, wxALL, 5); sbAudioSettings->Add(DPL2Decoder, 0, wxALL, 5);
wxStaticBoxSizer *sbVolume = new wxStaticBoxSizer(wxVERTICAL, AudioPage, _("Volume")); wxStaticBoxSizer *sbVolume = new wxStaticBoxSizer(wxVERTICAL, AudioPage, _("Volume"));
@ -896,10 +890,6 @@ void CConfigMain::AudioSettingsChanged(wxCommandEvent& event)
VolumeText->SetLabel(wxString::Format("%d %%", VolumeSlider->GetValue())); VolumeText->SetLabel(wxString::Format("%d %%", VolumeSlider->GetValue()));
break; break;
case ID_DSPTHREAD:
SConfig::GetInstance().m_LocalCoreStartupParameter.bDSPThread = DSPThread->IsChecked();
break;
case ID_DPL2DECODER: case ID_DPL2DECODER:
SConfig::GetInstance().m_LocalCoreStartupParameter.bDPL2Decoder = DPL2Decoder->IsChecked(); SConfig::GetInstance().m_LocalCoreStartupParameter.bDPL2Decoder = DPL2Decoder->IsChecked();
break; break;

View File

@ -80,7 +80,6 @@ private:
ID_FRAMELIMIT, ID_FRAMELIMIT,
ID_CPUENGINE, ID_CPUENGINE,
ID_DSPTHREAD,
ID_NTSCJ, ID_NTSCJ,
@ -144,7 +143,6 @@ private:
// Advanced // Advanced
wxRadioBox* CPUEngine; wxRadioBox* CPUEngine;
wxCheckBox* DSPThread;
wxCheckBox* _NTSCJ; wxCheckBox* _NTSCJ;