Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removed the DSP LLE on separate thread option. #1437

Merged
merged 3 commits into from
Dec 5, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 0 additions & 3 deletions Source/Core/Core/BootManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -292,7 +290,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);
Expand Down
2 changes: 0 additions & 2 deletions Source/Core/Core/ConfigManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,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);
Expand Down Expand Up @@ -508,7 +507,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);
Expand Down
5 changes: 5 additions & 0 deletions Source/Core/Core/Core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,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();
Expand Down
1 change: 0 additions & 1 deletion Source/Core/Core/CoreParameter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ void SCoreStartupParameter::LoadDefaults()
bSkipIdle = false;
bRunCompareServer = false;
bDSPHLE = true;
bDSPThread = true;
bFastmem = true;
bFPRF = false;
bBAT = false;
Expand Down
27 changes: 25 additions & 2 deletions Source/Core/Core/HW/DSPLLE/DSPLLE.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -31,7 +33,6 @@
#include "Core/HW/DSPLLE/DSPLLEGlobals.h"
#include "Core/HW/DSPLLE/DSPSymbols.h"


DSPLLE::DSPLLE()
{
m_bIsRunning = false;
Expand All @@ -40,6 +41,7 @@ DSPLLE::DSPLLE()

static Common::Event dspEvent;
static Common::Event ppcEvent;
static bool requestDisableThread;

void DSPLLE::DoState(PointerWrap &p)
{
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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)
{
Expand Down
10 changes: 0 additions & 10 deletions Source/Core/DolphinWX/ConfigMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,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)
Expand Down Expand Up @@ -240,7 +239,6 @@ void CConfigMain::UpdateGUI()

// Disable stuff on AudioPage
DSPEngine->Disable();
DSPThread->Disable();
DPL2Decoder->Disable();
Latency->Disable();

Expand Down Expand Up @@ -373,7 +371,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);
Expand Down Expand Up @@ -524,7 +521,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
Expand Down Expand Up @@ -655,7 +651,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, "");
Expand All @@ -674,7 +669,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"));
Expand Down Expand Up @@ -973,10 +967,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;
Expand Down
2 changes: 0 additions & 2 deletions Source/Core/DolphinWX/ConfigMain.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ class CConfigMain : public wxDialog
ID_FRAMELIMIT,

ID_CPUENGINE,
ID_DSPTHREAD,

ID_NTSCJ,

Expand Down Expand Up @@ -149,7 +148,6 @@ class CConfigMain : public wxDialog

// Advanced
wxRadioBox* CPUEngine;
wxCheckBox* DSPThread;
wxCheckBox* _NTSCJ;


Expand Down