diff --git a/Source/Core/DolphinWX/ISOProperties.cpp b/Source/Core/DolphinWX/ISOProperties.cpp index cccd86e539..037f2afe3b 100644 --- a/Source/Core/DolphinWX/ISOProperties.cpp +++ b/Source/Core/DolphinWX/ISOProperties.cpp @@ -415,6 +415,16 @@ void CISOProperties::CreateGUIControls(bool IsWad) BlockMerging = new wxCheckBox(m_GameConfig, ID_MERGEBLOCKS, _("Enable Block Merging"), wxDefaultPosition, wxDefaultSize, GetElementStyle("Core", "BlockMerging")); DSPHLE = new wxCheckBox(m_GameConfig, ID_AUDIO_DSP_HLE, _("DSP HLE emulation (fast)"), wxDefaultPosition, wxDefaultSize, GetElementStyle("Core", "DSPHLE")); + wxBoxSizer* const sGPUDeterminism = new wxBoxSizer(wxHORIZONTAL); + wxStaticText* const GPUDeterminismText = new wxStaticText(m_GameConfig, wxID_ANY, _("Deterministic dual core: ")); + arrayStringFor_GPUDeterminism.Add(_("Not Set")); + arrayStringFor_GPUDeterminism.Add(_("auto")); + arrayStringFor_GPUDeterminism.Add(_("none")); + arrayStringFor_GPUDeterminism.Add(_("fake-completion")); + GPUDeterminism = new wxChoice(m_GameConfig, ID_EMUSTATE, wxDefaultPosition, wxDefaultSize, arrayStringFor_GPUDeterminism); + sGPUDeterminism->Add(GPUDeterminismText); + sGPUDeterminism->Add(GPUDeterminism); + // Wii Console EnableWideScreen = new wxCheckBox(m_GameConfig, ID_ENABLEWIDESCREEN, _("Enable WideScreen"), wxDefaultPosition, wxDefaultSize, GetElementStyle("Wii", "Widescreen")); @@ -443,6 +453,7 @@ void CISOProperties::CreateGUIControls(bool IsWad) sbCoreOverrides->Add(FastDiscSpeed, 0, wxLEFT, 5); sbCoreOverrides->Add(BlockMerging, 0, wxLEFT, 5); sbCoreOverrides->Add(DSPHLE, 0, wxLEFT, 5); + sbCoreOverrides->Add(sGPUDeterminism, 0, wxEXPAND|wxALL, 5); wxStaticBoxSizer * const sbWiiOverrides = new wxStaticBoxSizer(wxVERTICAL, m_GameConfig, _("Wii Console")); if (!DiscIO::IsVolumeWiiDisc(OpenISO) && !DiscIO::IsVolumeWadFile(OpenISO)) @@ -1062,6 +1073,19 @@ void CISOProperties::LoadGameConfig() EmuIssues->Enable(EmuState->GetSelection() != 0); + sTemp = ""; + if (!GameIniLocal.GetIfExists("Core", "GPUDeterminismMode", &sTemp)) + GameIniDefault.GetIfExists("Core", "GPUDeterminismMode", &sTemp); + + if (sTemp == "") + GPUDeterminism->SetSelection(0); + else if (sTemp == "auto") + GPUDeterminism->SetSelection(1); + else if (sTemp == "none") + GPUDeterminism->SetSelection(2); + else if (sTemp == "fake-completion") + GPUDeterminism->SetSelection(3); + PatchList_Load(); ActionReplayList_Load(); m_geckocode_panel->LoadCodes(GameIniDefault, GameIniLocal, OpenISO->GetUniqueID()); @@ -1127,6 +1151,18 @@ bool CISOProperties::SaveGameConfig() std::string emu_issues = EmuIssues->GetValue().ToStdString(); SAVE_IF_NOT_DEFAULT("EmuState", "EmulationIssues", emu_issues, ""); + std::string tmp; + if (GPUDeterminism->GetSelection() == 0) + tmp = "Not Set"; + else if (GPUDeterminism->GetSelection() == 1) + tmp = "auto"; + else if (GPUDeterminism->GetSelection() == 2) + tmp = "none"; + else if (GPUDeterminism->GetSelection() == 3) + tmp = "fake-completion"; + + SAVE_IF_NOT_DEFAULT("Core", "GPUDeterminismMode", tmp, "Not Set"); + PatchList_Save(); ActionReplayList_Save(); Gecko::SaveCodes(GameIniLocal, m_geckocode_panel->GetCodes()); diff --git a/Source/Core/DolphinWX/ISOProperties.h b/Source/Core/DolphinWX/ISOProperties.h index acc7692a68..b77bb55115 100644 --- a/Source/Core/DolphinWX/ISOProperties.h +++ b/Source/Core/DolphinWX/ISOProperties.h @@ -69,46 +69,49 @@ private: // Core wxCheckBox *CPUThread, *SkipIdle, *MMU, *BAT, *DCBZOFF, *FPRF; wxCheckBox *VBeam, *SyncGPU, *FastDiscSpeed, *BlockMerging, *DSPHLE; + + wxArrayString arrayStringFor_GPUDeterminism; + wxChoice* GPUDeterminism; // Wii - wxCheckBox *EnableWideScreen; + wxCheckBox* EnableWideScreen; wxArrayString arrayStringFor_EmuState; - wxChoice *EmuState; - wxTextCtrl *EmuIssues; + wxChoice* EmuState; + wxTextCtrl* EmuIssues; wxArrayString arrayStringFor_Patches; - wxCheckListBox *Patches; - wxButton *EditPatch; - wxButton *RemovePatch; + wxCheckListBox* Patches; + wxButton* EditPatch; + wxButton* RemovePatch; wxArrayString arrayStringFor_Cheats; - wxCheckListBox *Cheats; - wxButton *EditCheat; - wxButton *RemoveCheat; + wxCheckListBox* Cheats; + wxButton* EditCheat; + wxButton* RemoveCheat; wxArrayString arrayStringFor_Speedhacks; - wxCheckListBox *Speedhacks; - wxButton *EditSpeedhack; - wxButton *AddSpeedhack; - wxButton *RemoveSpeedhack; + wxCheckListBox* Speedhacks; + wxButton* EditSpeedhack; + wxButton* AddSpeedhack; + wxButton* RemoveSpeedhack; - wxTextCtrl *m_Name; - wxTextCtrl *m_GameID; - wxTextCtrl *m_Country; - wxTextCtrl *m_MakerID; - wxTextCtrl *m_Revision; - wxTextCtrl *m_Date; - wxTextCtrl *m_FST; - wxTextCtrl *m_MD5Sum; - wxButton *m_MD5SumCompute; + wxTextCtrl* m_Name; + wxTextCtrl* m_GameID; + wxTextCtrl* m_Country; + wxTextCtrl* m_MakerID; + wxTextCtrl* m_Revision; + wxTextCtrl* m_Date; + wxTextCtrl* m_FST; + wxTextCtrl* m_MD5Sum; + wxButton* m_MD5SumCompute; wxArrayString arrayStringFor_Lang; - wxChoice *m_Lang; - wxTextCtrl *m_ShortName; - wxTextCtrl *m_Maker; - wxTextCtrl *m_Comment; - wxStaticBitmap *m_Banner; + wxChoice* m_Lang; + wxTextCtrl* m_ShortName; + wxTextCtrl* m_Maker; + wxTextCtrl* m_Comment; + wxStaticBitmap* m_Banner; - wxTreeCtrl *m_Treectrl; + wxTreeCtrl* m_Treectrl; wxTreeItemId RootId; - Gecko::CodeConfigPanel *m_geckocode_panel; + Gecko::CodeConfigPanel* m_geckocode_panel; enum { @@ -193,10 +196,10 @@ private: void SetRefresh(wxCommandEvent& event); void OnChangeBannerLang(wxCommandEvent& event); - GameListItem *OpenGameListItem; + GameListItem* OpenGameListItem; - std::vector GCFiles; - typedef std::vector::iterator fileIter; + std::vector GCFiles; + typedef std::vector::iterator fileIter; size_t CreateDirectoryTree(wxTreeItemId& parent, std::vector fileInfos,