summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorskidau <skidau@gmail.com>2014-12-06 10:54:53 +1100
committerskidau <skidau@gmail.com>2014-12-06 10:54:53 +1100
commitf7a16eca84a868b5dcce113ece3e84d21347feae (patch)
treeb22ea91f1a18bd4c0bb4ee32faaf996699527ab3 /Source/Core
parent757077e6fbe5a3122dd6069f1bb5b4f71350b9a0 (diff)
parentbaaccfd2f07dba0584b9391ce4ad5015e95d0081 (diff)
Merge pull request #1437 from skidau/Remove-DSP-thread-option
Removed the DSP LLE on separate thread option.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/BootManager.cpp3
-rw-r--r--Source/Core/Core/ConfigManager.cpp2
-rw-r--r--Source/Core/Core/Core.cpp5
-rw-r--r--Source/Core/Core/CoreParameter.cpp1
-rw-r--r--Source/Core/Core/HW/DSPLLE/DSPLLE.cpp27
-rw-r--r--Source/Core/DolphinWX/ConfigMain.cpp10
-rw-r--r--Source/Core/DolphinWX/ConfigMain.h2
7 files changed, 30 insertions, 20 deletions
diff --git a/Source/Core/Core/BootManager.cpp b/Source/Core/Core/BootManager.cpp
index 95346d5735..2578e5a22b 100644
--- a/Source/Core/Core/BootManager.cpp
+++ b/Source/Core/Core/BootManager.cpp
@@ -125,7 +125,6 @@ bool BootCore(const std::string& _rFilename)
config_cache.strBackend = StartUp.m_strVideoBackend;
config_cache.m_strGPUDeterminismMode = StartUp.m_strGPUDeterminismMode;
config_cache.m_EnableJIT = SConfig::GetInstance().m_DSPEnableJIT;
- config_cache.bDSPThread = StartUp.bDSPThread;
config_cache.Volume = SConfig::GetInstance().m_Volume;
config_cache.sBackend = SConfig::GetInstance().sBackend;
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("BlockMerging", &StartUp.bMergeBlocks, StartUp.bMergeBlocks);
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("CPUCore", &StartUp.iCPUCore, StartUp.iCPUCore);
core_section->Get("HLE_BS2", &StartUp.bHLE_BS2, StartUp.bHLE_BS2);
@@ -293,7 +291,6 @@ void Stop()
StartUp.bFastDiscSpeed = config_cache.bFastDiscSpeed;
StartUp.bMergeBlocks = config_cache.bMergeBlocks;
StartUp.bDSPHLE = config_cache.bDSPHLE;
- StartUp.bDSPThread = config_cache.bDSPThread;
StartUp.m_strVideoBackend = config_cache.strBackend;
StartUp.m_strGPUDeterminismMode = config_cache.m_strGPUDeterminismMode;
VideoBackend::ActivateBackend(StartUp.m_strVideoBackend);
diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp
index c1f0cf4288..0305746cf4 100644
--- a/Source/Core/Core/ConfigManager.cpp
+++ b/Source/Core/Core/ConfigManager.cpp
@@ -312,7 +312,6 @@ void SConfig::SaveCoreSettings(IniFile& ini)
core->Set("CPUCore", m_LocalCoreStartupParameter.iCPUCore);
core->Set("Fastmem", m_LocalCoreStartupParameter.bFastmem);
core->Set("CPUThread", m_LocalCoreStartupParameter.bCPUThread);
- core->Set("DSPThread", m_LocalCoreStartupParameter.bDSPThread);
core->Set("DSPHLE", m_LocalCoreStartupParameter.bDSPHLE);
core->Set("SkipIdle", m_LocalCoreStartupParameter.bSkipIdle);
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);
#endif
core->Get("Fastmem", &m_LocalCoreStartupParameter.bFastmem, true);
- core->Get("DSPThread", &m_LocalCoreStartupParameter.bDSPThread, false);
core->Get("DSPHLE", &m_LocalCoreStartupParameter.bDSPHLE, true);
core->Get("CPUThread", &m_LocalCoreStartupParameter.bCPUThread, true);
core->Get("SkipIdle", &m_LocalCoreStartupParameter.bSkipIdle, true);
diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp
index 396c5cc68a..119828c9aa 100644
--- a/Source/Core/Core/Core.cpp
+++ b/Source/Core/Core/Core.cpp
@@ -344,6 +344,11 @@ void EmuThread()
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))
{
HW::Shutdown();
diff --git a/Source/Core/Core/CoreParameter.cpp b/Source/Core/Core/CoreParameter.cpp
index 6907667b46..7df74bc335 100644
--- a/Source/Core/Core/CoreParameter.cpp
+++ b/Source/Core/Core/CoreParameter.cpp
@@ -71,7 +71,6 @@ void SCoreStartupParameter::LoadDefaults()
bSkipIdle = false;
bRunCompareServer = false;
bDSPHLE = true;
- bDSPThread = true;
bFastmem = true;
bFPRF = false;
bBAT = false;
diff --git a/Source/Core/Core/HW/DSPLLE/DSPLLE.cpp b/Source/Core/Core/HW/DSPLLE/DSPLLE.cpp
index fdd1aefaf3..ee3e2bcb9b 100644
--- a/Source/Core/Core/HW/DSPLLE/DSPLLE.cpp
+++ b/Source/Core/Core/HW/DSPLLE/DSPLLE.cpp
@@ -17,6 +17,8 @@
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/Host.h"
+#include "Core/Movie.h"
+#include "Core/NetPlayProto.h"
#include "Core/DSP/DSPCaptureLogger.h"
#include "Core/DSP/DSPCore.h"
#include "Core/DSP/DSPDisassembler.h"
@@ -31,7 +33,6 @@
#include "Core/HW/DSPLLE/DSPLLEGlobals.h"
#include "Core/HW/DSPLLE/DSPSymbols.h"
-
DSPLLE::DSPLLE()
{
m_bIsRunning = false;
@@ -40,6 +41,7 @@ DSPLLE::DSPLLE()
static Common::Event dspEvent;
static Common::Event ppcEvent;
+static bool requestDisableThread;
void DSPLLE::DoState(PointerWrap &p)
{
@@ -160,7 +162,10 @@ static bool FillDSPInitOptions(DSPInitOptions* opts)
bool DSPLLE::Initialize(bool bWii, bool bDSPThread)
{
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;
if (!FillDSPInitOptions(&opts))
@@ -209,6 +214,13 @@ u16 DSPLLE::DSP_WriteControlRegister(u16 _uFlag)
// and immediately process it, if it has.
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)
{
DSPCore_CheckExternalInterrupt();
@@ -305,6 +317,17 @@ void DSPLLE::DSP_Update(int cycles)
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 (!m_bDSPThread)
{
diff --git a/Source/Core/DolphinWX/ConfigMain.cpp b/Source/Core/DolphinWX/ConfigMain.cpp
index d213a7cbda..003099a67b 100644
--- a/Source/Core/DolphinWX/ConfigMain.cpp
+++ b/Source/Core/DolphinWX/ConfigMain.cpp
@@ -137,7 +137,6 @@ EVT_CHECKBOX(ID_NTSCJ, CConfigMain::CoreSettingsChanged)
EVT_RADIOBOX(ID_DSPENGINE, CConfigMain::AudioSettingsChanged)
-EVT_CHECKBOX(ID_DSPTHREAD, CConfigMain::AudioSettingsChanged)
EVT_CHECKBOX(ID_ENABLE_THROTTLE, CConfigMain::AudioSettingsChanged)
EVT_CHECKBOX(ID_DPL2DECODER, CConfigMain::AudioSettingsChanged)
EVT_CHOICE(ID_BACKEND, CConfigMain::AudioSettingsChanged)
@@ -228,7 +227,6 @@ void CConfigMain::UpdateGUI()
// Disable stuff on AudioPage
DSPEngine->Disable();
- DSPThread->Disable();
DPL2Decoder->Disable();
Latency->Disable();
@@ -361,7 +359,6 @@ void CConfigMain::InitializeGUIValues()
VolumeSlider->Enable(SupportsVolumeChanges(SConfig::GetInstance().sBackend));
VolumeSlider->SetValue(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->SetValue(startup_params.bDPL2Decoder);
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."));
// 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!"));
// GameCube - Devices
@@ -602,7 +598,6 @@ void CConfigMain::CreateGUIControls()
// Audio page
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"));
VolumeSlider = new wxSlider(AudioPage, ID_VOLUME, 0, 1, 100, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL|wxSL_INVERSE);
VolumeText = new wxStaticText(AudioPage, wxID_ANY, "");
@@ -621,7 +616,6 @@ void CConfigMain::CreateGUIControls()
// Create sizer and add items to dialog
wxStaticBoxSizer *sbAudioSettings = new wxStaticBoxSizer(wxVERTICAL, AudioPage, _("Sound Settings"));
sbAudioSettings->Add(DSPEngine, 0, wxALL | wxEXPAND, 5);
- sbAudioSettings->Add(DSPThread, 0, wxALL, 5);
sbAudioSettings->Add(DPL2Decoder, 0, wxALL, 5);
wxStaticBoxSizer *sbVolume = new wxStaticBoxSizer(wxVERTICAL, AudioPage, _("Volume"));
@@ -896,10 +890,6 @@ void CConfigMain::AudioSettingsChanged(wxCommandEvent& event)
VolumeText->SetLabel(wxString::Format("%d %%", VolumeSlider->GetValue()));
break;
- case ID_DSPTHREAD:
- SConfig::GetInstance().m_LocalCoreStartupParameter.bDSPThread = DSPThread->IsChecked();
- break;
-
case ID_DPL2DECODER:
SConfig::GetInstance().m_LocalCoreStartupParameter.bDPL2Decoder = DPL2Decoder->IsChecked();
break;
diff --git a/Source/Core/DolphinWX/ConfigMain.h b/Source/Core/DolphinWX/ConfigMain.h
index a5ebbdf8f9..3997678e9c 100644
--- a/Source/Core/DolphinWX/ConfigMain.h
+++ b/Source/Core/DolphinWX/ConfigMain.h
@@ -80,7 +80,6 @@ private:
ID_FRAMELIMIT,
ID_CPUENGINE,
- ID_DSPTHREAD,
ID_NTSCJ,
@@ -144,7 +143,6 @@ private:
// Advanced
wxRadioBox* CPUEngine;
- wxCheckBox* DSPThread;
wxCheckBox* _NTSCJ;