diff --git a/src/duckstation-qt/advancedsettingswidget.cpp b/src/duckstation-qt/advancedsettingswidget.cpp index f7cf057d8..f58570a67 100644 --- a/src/duckstation-qt/advancedsettingswidget.cpp +++ b/src/duckstation-qt/advancedsettingswidget.cpp @@ -18,6 +18,25 @@ AdvancedSettingsWidget::AdvancedSettingsWidget(QtHostInterface* host_interface, SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.logToWindow, QStringLiteral("Logging/LogToWindow")); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.logToFile, QStringLiteral("Logging/LogToFile")); + + // Tweaks/Hacks section + SettingWidgetBinder::BindWidgetToIntSetting(m_host_interface, m_ui.dmaMaxSliceTicks, + QStringLiteral("Hacks/DMAHaltTicks")); + SettingWidgetBinder::BindWidgetToIntSetting(m_host_interface, m_ui.dmaHaltTicks, + QStringLiteral("Hacks/DMAMaxSliceTicks")); + SettingWidgetBinder::BindWidgetToIntSetting(m_host_interface, m_ui.gpuFIFOSize, QStringLiteral("Hacks/GPUFIFOSize")); + SettingWidgetBinder::BindWidgetToIntSetting(m_host_interface, m_ui.gpuMaxRunAhead, + QStringLiteral("Hacks/GPUMaxRunAhead")); + + connect(m_ui.resetToDefaultButton, &QPushButton::clicked, this, &AdvancedSettingsWidget::onResetToDefaultClicked); } AdvancedSettingsWidget::~AdvancedSettingsWidget() = default; + +void AdvancedSettingsWidget::onResetToDefaultClicked() +{ + m_ui.dmaMaxSliceTicks->setValue(static_cast(Settings::DEFAULT_DMA_MAX_SLICE_TICKS)); + m_ui.dmaHaltTicks->setValue(static_cast(Settings::DEFAULT_DMA_HALT_TICKS)); + m_ui.gpuFIFOSize->setValue(static_cast(Settings::DEFAULT_GPU_FIFO_SIZE)); + m_ui.gpuMaxRunAhead->setValue(static_cast(Settings::DEFAULT_GPU_MAX_RUN_AHEAD)); +} diff --git a/src/duckstation-qt/advancedsettingswidget.h b/src/duckstation-qt/advancedsettingswidget.h index c4c0ee61b..366cef5b9 100644 --- a/src/duckstation-qt/advancedsettingswidget.h +++ b/src/duckstation-qt/advancedsettingswidget.h @@ -18,5 +18,7 @@ public: private: Ui::AdvancedSettingsWidget m_ui; + void onResetToDefaultClicked(); + QtHostInterface* m_host_interface; }; diff --git a/src/duckstation-qt/advancedsettingswidget.ui b/src/duckstation-qt/advancedsettingswidget.ui index 7c2a49532..485ac6152 100644 --- a/src/duckstation-qt/advancedsettingswidget.ui +++ b/src/duckstation-qt/advancedsettingswidget.ui @@ -110,12 +110,22 @@ - DMA Max Slice Size: + DMA Max Slice Ticks: - + + + 100 + + + 10000 + + + 1000 + + @@ -125,10 +135,30 @@ - + + + 100 + + + 10000 + + + 100 + + - + + + 16 + + + 4096 + + + 16 + + @@ -145,10 +175,17 @@ - + + + 1000 + + + 128 + + - + Reset To Default diff --git a/src/duckstation-qt/settingwidgetbinder.h b/src/duckstation-qt/settingwidgetbinder.h index 798a3c831..e381ee15d 100644 --- a/src/duckstation-qt/settingwidgetbinder.h +++ b/src/duckstation-qt/settingwidgetbinder.h @@ -10,6 +10,7 @@ #include #include #include +#include namespace SettingWidgetBinder { @@ -111,6 +112,25 @@ struct SettingAccessor } }; +template<> +struct SettingAccessor +{ + static bool getBoolValue(const QSpinBox* widget) { return widget->value() > 0; } + static void setBoolValue(QSpinBox* widget, bool value) { widget->setValue(value ? 1 : 0); } + + static int getIntValue(const QSpinBox* widget) { return widget->value(); } + static void setIntValue(QSpinBox* widget, int value) { widget->setValue(value); } + + static QString getStringValue(const QSpinBox* widget) { return QStringLiteral("%1").arg(widget->value()); } + static void setStringValue(QSpinBox* widget, const QString& value) { widget->setValue(value.toInt()); } + + template + static void connectValueChanged(QSpinBox* widget, F func) + { + widget->connect(widget, QOverload::of(&QSpinBox::valueChanged), func); + } +}; + template<> struct SettingAccessor { @@ -213,4 +233,4 @@ void BindWidgetToEnumSetting(QtHostInterface* hi, WidgetType* widget, const QStr }); } -} // namespace SettingWidgetBinder \ No newline at end of file +} // namespace SettingWidgetBinder diff --git a/src/duckstation-sdl/sdl_host_interface.cpp b/src/duckstation-sdl/sdl_host_interface.cpp index c409ee10d..912247aba 100644 --- a/src/duckstation-sdl/sdl_host_interface.cpp +++ b/src/duckstation-sdl/sdl_host_interface.cpp @@ -1257,7 +1257,6 @@ void SDLHostInterface::DrawSettingsWindow() if (ImGui::BeginTabItem("Advanced")) { ImGui::Text("These options are tweakable to improve performance/game compatibility."); - ImGui::Text("They will not be automatically saved to the settings INI file."); ImGui::Text("Use at your own risk, modified values will not be supported."); ImGui::NewLine(); diff --git a/src/frontend-common/common_host_interface.cpp b/src/frontend-common/common_host_interface.cpp index 55af833fa..393b7fde6 100644 --- a/src/frontend-common/common_host_interface.cpp +++ b/src/frontend-common/common_host_interface.cpp @@ -1154,7 +1154,7 @@ bool CommonHostInterface::AddAxisToInputMap(const std::string& binding, const st if (!axis_index || !m_controller_interface->BindControllerAxis(*controller_index, *axis_index, std::move(handler))) { - Log_WarningPrintf("Failed to bind controller axis '%s' to axi", binding.c_str()); + Log_WarningPrintf("Failed to bind controller axis '%s' to axis", binding.c_str()); return false; }