diff --git a/src/duckstation-qt/advancedsettingswidget.cpp b/src/duckstation-qt/advancedsettingswidget.cpp index 2b692e0d4..871e0736f 100644 --- a/src/duckstation-qt/advancedsettingswidget.cpp +++ b/src/duckstation-qt/advancedsettingswidget.cpp @@ -199,118 +199,163 @@ AdvancedSettingsWidget::AdvancedSettingsWidget(SettingsDialog* dialog, QWidget* m_ui.tweakOptionTable->setColumnWidth(0, 380); m_ui.tweakOptionTable->setColumnWidth(1, 170); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Disable All Enhancements"), "Main", "DisableAllEnhancements", - false); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Show Enhancement Settings"), "Display", "ShowEnhancements", + addTweakOptions(); + + dialog->registerWidgetHelp(m_ui.logLevel, tr("Log Level"), tr("Information"), + tr("Sets the verbosity of messages logged. Higher levels will log more messages.")); + dialog->registerWidgetHelp(m_ui.logToConsole, tr("Log To System Console"), tr("User Preference"), + tr("Logs messages to the console window.")); + dialog->registerWidgetHelp(m_ui.logToDebug, tr("Log To Debug Console"), tr("User Preference"), + tr("Logs messages to the debug console where supported.")); + dialog->registerWidgetHelp(m_ui.logToWindow, tr("Log To Window"), tr("User Preference"), + tr("Logs messages to the window.")); + dialog->registerWidgetHelp(m_ui.logToFile, tr("Log To File"), tr("User Preference"), + tr("Logs messages to duckstation.log in the user directory.")); + dialog->registerWidgetHelp(m_ui.showDebugMenu, tr("Show Debug Menu"), tr("Unchecked"), + tr("Shows a debug menu bar with additional statistics and quick settings.")); +} + +AdvancedSettingsWidget::~AdvancedSettingsWidget() = default; + +void AdvancedSettingsWidget::addTweakOptions() +{ + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Disable All Enhancements"), "Main", + "DisableAllEnhancements", false); + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Show Enhancement Settings"), "Display", "ShowEnhancements", false); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Show Status Indicators"), "Display", "ShowStatusIndicators", - true); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Apply Compatibility Settings"), "Main", + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Show Status Indicators"), "Display", + "ShowStatusIndicators", true); + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Apply Compatibility Settings"), "Main", "ApplyCompatibilitySettings", true); - addIntRangeTweakOption(dialog, m_ui.tweakOptionTable, tr("Display FPS Limit"), "Display", "MaxFPS", 0, 1000, 0); + addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Display FPS Limit"), "Display", "MaxFPS", 0, 1000, 0); - addMSAATweakOption(dialog, m_ui.tweakOptionTable, tr("Multisample Antialiasing")); + addMSAATweakOption(m_dialog, m_ui.tweakOptionTable, tr("Multisample Antialiasing")); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("PGXP Vertex Cache"), "GPU", "PGXPVertexCache", false); - addFloatRangeTweakOption(dialog, m_ui.tweakOptionTable, tr("PGXP Geometry Tolerance"), "GPU", "PGXPTolerance", -1.0f, - 100.0f, 0.25f, -1.0f); - addFloatRangeTweakOption(dialog, m_ui.tweakOptionTable, tr("PGXP Depth Clear Threshold"), "GPU", + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("PGXP Vertex Cache"), "GPU", "PGXPVertexCache", false); + addFloatRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("PGXP Geometry Tolerance"), "GPU", "PGXPTolerance", + -1.0f, 100.0f, 0.25f, -1.0f); + addFloatRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("PGXP Depth Clear Threshold"), "GPU", "PGXPDepthClearThreshold", 0.0f, 4096.0f, 1.0f, Settings::DEFAULT_GPU_PGXP_DEPTH_THRESHOLD); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Enable Recompiler Memory Exceptions"), "CPU", + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Enable Recompiler Memory Exceptions"), "CPU", "RecompilerMemoryExceptions", false); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Enable Recompiler Block Linking"), "CPU", + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Enable Recompiler Block Linking"), "CPU", "RecompilerBlockLinking", true); - addChoiceTweakOption(dialog, m_ui.tweakOptionTable, tr("Enable Recompiler Fast Memory Access"), "CPU", "FastmemMode", - Settings::ParseCPUFastmemMode, Settings::GetCPUFastmemModeName, + addChoiceTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Enable Recompiler Fast Memory Access"), "CPU", + "FastmemMode", Settings::ParseCPUFastmemMode, Settings::GetCPUFastmemModeName, Settings::GetCPUFastmemModeDisplayName, "CPUFastmemMode", static_cast(CPUFastmemMode::Count), Settings::DEFAULT_CPU_FASTMEM_MODE); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Enable VRAM Write Texture Replacement"), + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Enable VRAM Write Texture Replacement"), "TextureReplacements", "EnableVRAMWriteReplacements", false); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Preload Texture Replacements"), "TextureReplacements", + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Preload Texture Replacements"), "TextureReplacements", "PreloadTextures", false); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Dump Replaceable VRAM Writes"), "TextureReplacements", + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Dump Replaceable VRAM Writes"), "TextureReplacements", "DumpVRAMWrites", false); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Set Dumped VRAM Write Alpha Channel"), "TextureReplacements", - "DumpVRAMWriteForceAlphaChannel", true); - addIntRangeTweakOption(dialog, m_ui.tweakOptionTable, tr("Minimum Dumped VRAM Write Width"), "TextureReplacements", + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Set Dumped VRAM Write Alpha Channel"), + "TextureReplacements", "DumpVRAMWriteForceAlphaChannel", true); + addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Minimum Dumped VRAM Write Width"), "TextureReplacements", "DumpVRAMWriteWidthThreshold", 1, VRAM_WIDTH, Settings::DEFAULT_VRAM_WRITE_DUMP_WIDTH_THRESHOLD); - addIntRangeTweakOption(dialog, m_ui.tweakOptionTable, tr("Minimum Dumped VRAM Write Height"), "TextureReplacements", + addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Minimum Dumped VRAM Write Height"), "TextureReplacements", "DumpVRAMWriteHeightThreshold", 1, VRAM_HEIGHT, Settings::DEFAULT_VRAM_WRITE_DUMP_HEIGHT_THRESHOLD); - addIntRangeTweakOption(dialog, m_ui.tweakOptionTable, tr("DMA Max Slice Ticks"), "Hacks", "DMAMaxSliceTicks", 100, + addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("DMA Max Slice Ticks"), "Hacks", "DMAMaxSliceTicks", 100, 10000, Settings::DEFAULT_DMA_MAX_SLICE_TICKS); - addIntRangeTweakOption(dialog, m_ui.tweakOptionTable, tr("DMA Halt Ticks"), "Hacks", "DMAHaltTicks", 100, 10000, + addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("DMA Halt Ticks"), "Hacks", "DMAHaltTicks", 100, 10000, Settings::DEFAULT_DMA_HALT_TICKS); - addIntRangeTweakOption(dialog, m_ui.tweakOptionTable, tr("GPU FIFO Size"), "Hacks", "GPUFIFOSize", 16, 4096, + addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("GPU FIFO Size"), "Hacks", "GPUFIFOSize", 16, 4096, Settings::DEFAULT_GPU_FIFO_SIZE); - addIntRangeTweakOption(dialog, m_ui.tweakOptionTable, tr("GPU Max Run-Ahead"), "Hacks", "GPUMaxRunAhead", 0, 1000, + addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("GPU Max Run-Ahead"), "Hacks", "GPUMaxRunAhead", 0, 1000, Settings::DEFAULT_GPU_MAX_RUN_AHEAD); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Use Debug Host GPU Device"), "GPU", "UseDebugDevice", false); + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Use Debug Host GPU Device"), "GPU", "UseDebugDevice", + false); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Increase Timer Resolution"), "Main", + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Increase Timer Resolution"), "Main", "IncreaseTimerResolution", true); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Allow Booting Without SBI File"), "CDROM", + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Allow Booting Without SBI File"), "CDROM", "AllowBootingWithoutSBIFile", false); - addBooleanTweakOption(dialog, m_ui.tweakOptionTable, tr("Create Save State Backups"), "General", + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Create Save State Backups"), "General", "CreateSaveStateBackups", false); - - dialog->registerWidgetHelp(m_ui.logLevel, tr("Log Level"), tr("Information"), - tr("Sets the verbosity of messages logged. Higher levels will log more messages.")); - dialog->registerWidgetHelp(m_ui.logToConsole, tr("Log To System Console"), tr("User Preference"), - tr("Logs messages to the console window.")); - dialog->registerWidgetHelp(m_ui.logToDebug, tr("Log To Debug Console"), tr("User Preference"), - tr("Logs messages to the debug console where supported.")); - dialog->registerWidgetHelp(m_ui.logToWindow, tr("Log To Window"), tr("User Preference"), - tr("Logs messages to the window.")); - dialog->registerWidgetHelp(m_ui.logToFile, tr("Log To File"), tr("User Preference"), - tr("Logs messages to duckstation.log in the user directory.")); - dialog->registerWidgetHelp(m_ui.showDebugMenu, tr("Show Debug Menu"), tr("Unchecked"), - tr("Shows a debug menu bar with additional statistics and quick settings.")); } -AdvancedSettingsWidget::~AdvancedSettingsWidget() = default; - void AdvancedSettingsWidget::onResetToDefaultClicked() { - int i = 0; - - setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Disable all enhancements - setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Show enhancement settings - setBooleanTweakOption(m_ui.tweakOptionTable, i++, true); // Show status indicators - setBooleanTweakOption(m_ui.tweakOptionTable, i++, true); // Apply compatibility settings - setIntRangeTweakOption(m_ui.tweakOptionTable, i++, 0); // Display FPS limit - setChoiceTweakOption(m_ui.tweakOptionTable, i++, 0); // Multisample antialiasing - setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // PGXP vertex cache - setFloatRangeTweakOption(m_ui.tweakOptionTable, i++, -1.0f); // PGXP geometry tolerance - setFloatRangeTweakOption(m_ui.tweakOptionTable, i++, - Settings::DEFAULT_GPU_PGXP_DEPTH_THRESHOLD); // PGXP depth clear threshold - setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Recompiler memory exceptions - setBooleanTweakOption(m_ui.tweakOptionTable, i++, true); // Recompiler block linking - setChoiceTweakOption(m_ui.tweakOptionTable, i++, Settings::DEFAULT_CPU_FASTMEM_MODE); // Recompiler fastmem mode - setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // VRAM write texture replacement - setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Preload texture replacements - setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Dump replacable VRAM writes - setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Set dumped VRAM write alpha channel - setIntRangeTweakOption(m_ui.tweakOptionTable, i++, - Settings::DEFAULT_VRAM_WRITE_DUMP_WIDTH_THRESHOLD); // Minimum dumped VRAM width - setIntRangeTweakOption(m_ui.tweakOptionTable, i++, - Settings::DEFAULT_VRAM_WRITE_DUMP_HEIGHT_THRESHOLD); // Minimum dumped VRAm height - setIntRangeTweakOption(m_ui.tweakOptionTable, i++, - static_cast(Settings::DEFAULT_DMA_MAX_SLICE_TICKS)); // DMA max slice ticks - setIntRangeTweakOption(m_ui.tweakOptionTable, i++, - static_cast(Settings::DEFAULT_DMA_HALT_TICKS)); // DMA halt ticks - setIntRangeTweakOption(m_ui.tweakOptionTable, i++, - static_cast(Settings::DEFAULT_GPU_FIFO_SIZE)); // GPU FIFO size - setIntRangeTweakOption(m_ui.tweakOptionTable, i++, - static_cast(Settings::DEFAULT_GPU_MAX_RUN_AHEAD)); // GPU max run-ahead - setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Use debug host GPU device - setBooleanTweakOption(m_ui.tweakOptionTable, i++, true); // Increase timer resolution - setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Allow booting without SBI file - setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Create save state backups + if (!m_dialog->isPerGameSettings()) + { + int i = 0; + + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Disable all enhancements + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Show enhancement settings + setBooleanTweakOption(m_ui.tweakOptionTable, i++, true); // Show status indicators + setBooleanTweakOption(m_ui.tweakOptionTable, i++, true); // Apply compatibility settings + setIntRangeTweakOption(m_ui.tweakOptionTable, i++, 0); // Display FPS limit + setChoiceTweakOption(m_ui.tweakOptionTable, i++, 0); // Multisample antialiasing + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // PGXP vertex cache + setFloatRangeTweakOption(m_ui.tweakOptionTable, i++, -1.0f); // PGXP geometry tolerance + setFloatRangeTweakOption(m_ui.tweakOptionTable, i++, + Settings::DEFAULT_GPU_PGXP_DEPTH_THRESHOLD); // PGXP depth clear threshold + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Recompiler memory exceptions + setBooleanTweakOption(m_ui.tweakOptionTable, i++, true); // Recompiler block linking + setChoiceTweakOption(m_ui.tweakOptionTable, i++, Settings::DEFAULT_CPU_FASTMEM_MODE); // Recompiler fastmem mode + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // VRAM write texture replacement + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Preload texture replacements + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Dump replacable VRAM writes + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Set dumped VRAM write alpha channel + setIntRangeTweakOption(m_ui.tweakOptionTable, i++, + Settings::DEFAULT_VRAM_WRITE_DUMP_WIDTH_THRESHOLD); // Minimum dumped VRAM width + setIntRangeTweakOption(m_ui.tweakOptionTable, i++, + Settings::DEFAULT_VRAM_WRITE_DUMP_HEIGHT_THRESHOLD); // Minimum dumped VRAm height + setIntRangeTweakOption(m_ui.tweakOptionTable, i++, + static_cast(Settings::DEFAULT_DMA_MAX_SLICE_TICKS)); // DMA max slice ticks + setIntRangeTweakOption(m_ui.tweakOptionTable, i++, + static_cast(Settings::DEFAULT_DMA_HALT_TICKS)); // DMA halt ticks + setIntRangeTweakOption(m_ui.tweakOptionTable, i++, + static_cast(Settings::DEFAULT_GPU_FIFO_SIZE)); // GPU FIFO size + setIntRangeTweakOption(m_ui.tweakOptionTable, i++, + static_cast(Settings::DEFAULT_GPU_MAX_RUN_AHEAD)); // GPU max run-ahead + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Use debug host GPU device + setBooleanTweakOption(m_ui.tweakOptionTable, i++, true); // Increase timer resolution + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Allow booting without SBI file + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Create save state backups + + return; + } + + // for per-game it's easier to just clear and recreate + SettingsInterface* sif = m_dialog->getSettingsInterface(); + sif->DeleteValue("Main", "DisableAllEnhancements"); + sif->DeleteValue("Display", "ShowEnhancements"); + sif->DeleteValue("Display", "ShowStatusIndicators"); + sif->DeleteValue("Main", "ApplyCompatibilitySettings"); + sif->DeleteValue("Display", "MaxFPS"); + sif->DeleteValue("GPU", "Multisamples"); + sif->DeleteValue("GPU", "PerSampleShading"); + sif->DeleteValue("GPU", "PGXPVertexCache"); + sif->DeleteValue("GPU", "PGXPTolerance"); + sif->DeleteValue("GPU", "PGXPDepthClearThreshold"); + sif->DeleteValue("CPU", "RecompilerMemoryExceptions"); + sif->DeleteValue("CPU", "RecompilerBlockLinking"); + sif->DeleteValue("CPU", "FastmemMode"); + sif->DeleteValue("TextureReplacements", "EnableVRAMWriteReplacements"); + sif->DeleteValue("TextureReplacements", "PreloadTextures"); + sif->DeleteValue("TextureReplacements", "DumpVRAMWrites"); + sif->DeleteValue("TextureReplacements", "DumpVRAMWriteForceAlphaChannel"); + sif->DeleteValue("TextureReplacements", "DumpVRAMWriteWidthThreshold"); + sif->DeleteValue("TextureReplacements", "DumpVRAMWriteHeightThreshold"); + sif->DeleteValue("Hacks", "DMAMaxSliceTicks"); + sif->DeleteValue("Hacks", "DMAHaltTicks"); + sif->DeleteValue("Hacks", "GPUFIFOSize"); + sif->DeleteValue("Hacks", "GPUMaxRunAhead"); + sif->DeleteValue("GPU", "UseDebugDevice"); + sif->DeleteValue("Main", "IncreaseTimerResolution"); + sif->DeleteValue("CDROM", "AllowBootingWithoutSBIFile"); + sif->DeleteValue("General", "CreateSaveStateBackups"); + sif->Save(); + while (m_ui.tweakOptionTable->rowCount() > 0) + m_ui.tweakOptionTable->removeRow(m_ui.tweakOptionTable->rowCount() - 1); + addTweakOptions(); } \ No newline at end of file diff --git a/src/duckstation-qt/advancedsettingswidget.h b/src/duckstation-qt/advancedsettingswidget.h index 4a05ba848..b3813a22b 100644 --- a/src/duckstation-qt/advancedsettingswidget.h +++ b/src/duckstation-qt/advancedsettingswidget.h @@ -48,7 +48,8 @@ private: Ui::AdvancedSettingsWidget m_ui; - void onResetToDefaultClicked(); - QVector m_tweak_options; + + void addTweakOptions(); + void onResetToDefaultClicked(); };