From 4afa41b927967cf4db28656d06230ce47fecb95d Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 22 Mar 2025 15:16:08 +1000 Subject: [PATCH] Qt: Move async readahead sectors to advanced settings --- src/core/fullscreen_ui.cpp | 24 +++++++++++++++---- src/duckstation-qt/advancedsettingswidget.cpp | 21 +++++++++++----- src/duckstation-qt/consolesettingswidget.cpp | 17 ------------- src/duckstation-qt/consolesettingswidget.ui | 24 ++++++------------- 4 files changed, 41 insertions(+), 45 deletions(-) diff --git a/src/core/fullscreen_ui.cpp b/src/core/fullscreen_ui.cpp index dd064b218..beaabaf2b 100644 --- a/src/core/fullscreen_ui.cpp +++ b/src/core/fullscreen_ui.cpp @@ -4164,11 +4164,6 @@ void FullscreenUI::DrawConsoleSettingsPage() "Speeds up CD-ROM seeks by the specified factor. May improve loading speeds in some games, and break others."), "CDROM", "SeekSpeedup", 1, cdrom_seek_speeds, true, cdrom_read_seek_speed_values); - DrawIntRangeSetting( - bsi, FSUI_ICONSTR(ICON_FA_FAST_FORWARD, "Readahead Sectors"), - FSUI_CSTR("Reduces hitches in emulation by reading/decompressing CD data asynchronously on a worker thread."), - "CDROM", "ReadaheadSectors", Settings::DEFAULT_CDROM_READAHEAD_SECTORS, 0, 32, FSUI_CSTR("%d sectors")); - DrawToggleSetting( bsi, FSUI_ICONSTR(ICON_FA_DOWNLOAD, "Preload Images to RAM"), FSUI_CSTR("Loads the game image into RAM. Useful for network paths that may become unreliable during gameplay."), @@ -6227,10 +6222,25 @@ void FullscreenUI::DrawAdvancedSettingsPage() MenuHeading(FSUI_CSTR("CD-ROM Emulation")); + DrawIntRangeSetting( + bsi, FSUI_CSTR("Readahead Sectors"), + FSUI_CSTR("Reduces hitches in emulation by reading/decompressing CD data asynchronously on a worker thread."), + "CDROM", "ReadaheadSectors", Settings::DEFAULT_CDROM_READAHEAD_SECTORS, 0, 32, FSUI_CSTR("%d sectors")); + + DrawIntRangeSetting(bsi, FSUI_CSTR("Maximum Speedup Read/Seek Cycles"), + FSUI_CSTR("Sets the minimum delay for the 'Maximum' read/seek speedup level."), "CDROM", + "MaxSpeedupCycles", Settings::DEFAULT_CDROM_MAX_SPEEDUP_CYCLES, 0, 1000000, + FSUI_CSTR("%d cycles")); + DrawToggleSetting(bsi, FSUI_CSTR("Enable Region Check"), FSUI_CSTR("Simulates the region check present in original, unmodified consoles."), "CDROM", "RegionCheck", false); + DrawToggleSetting( + bsi, FSUI_CSTR("Allow Booting Without SBI File"), + FSUI_CSTR("Allows booting to continue even without a required SBI file. These games will not run correctly."), + "CDROM", "AllowBootingWithoutSBIFile", false); + EndMenuButtons(); } @@ -8753,6 +8763,7 @@ void FullscreenUI::CloseLoadingScreen() TRANSLATE_NOOP("FullscreenUI", "%.1f ms"); TRANSLATE_NOOP("FullscreenUI", "%.2f Seconds"); TRANSLATE_NOOP("FullscreenUI", "%d Frames"); +TRANSLATE_NOOP("FullscreenUI", "%d cycles"); TRANSLATE_NOOP("FullscreenUI", "%d ms"); TRANSLATE_NOOP("FullscreenUI", "%d sectors"); TRANSLATE_NOOP("FullscreenUI", "-"); @@ -8843,6 +8854,7 @@ TRANSLATE_NOOP("FullscreenUI", "Advanced"); TRANSLATE_NOOP("FullscreenUI", "Advanced Settings"); TRANSLATE_NOOP("FullscreenUI", "All Time: {}"); TRANSLATE_NOOP("FullscreenUI", "Allow Booting Without SBI File"); +TRANSLATE_NOOP("FullscreenUI", "Allows booting to continue even without a required SBI file. These games will not run correctly."); TRANSLATE_NOOP("FullscreenUI", "Allows loading protected games without subchannel information."); TRANSLATE_NOOP("FullscreenUI", "Alpha Blending"); TRANSLATE_NOOP("FullscreenUI", "Always Track Uploads"); @@ -9174,6 +9186,7 @@ TRANSLATE_NOOP("FullscreenUI", "Logs out of RetroAchievements."); TRANSLATE_NOOP("FullscreenUI", "Macro Button {}"); TRANSLATE_NOOP("FullscreenUI", "Makes games run closer to their console framerate, at a small cost to performance."); TRANSLATE_NOOP("FullscreenUI", "Maximum"); +TRANSLATE_NOOP("FullscreenUI", "Maximum Speedup Read/Seek Cycles"); TRANSLATE_NOOP("FullscreenUI", "Memory Card Busy"); TRANSLATE_NOOP("FullscreenUI", "Memory Card Directory"); TRANSLATE_NOOP("FullscreenUI", "Memory Card Port {}"); @@ -9363,6 +9376,7 @@ TRANSLATE_NOOP("FullscreenUI", "Set Input Binding"); TRANSLATE_NOOP("FullscreenUI", "Sets a threshold for discarding precise values when exceeded. May help with glitches in some games."); TRANSLATE_NOOP("FullscreenUI", "Sets a threshold for discarding the emulated depth buffer. May help in some games."); TRANSLATE_NOOP("FullscreenUI", "Sets the fast forward speed. It is not guaranteed that this speed will be reached on all systems."); +TRANSLATE_NOOP("FullscreenUI", "Sets the minimum delay for the 'Maximum' read/seek speedup level."); TRANSLATE_NOOP("FullscreenUI", "Sets the target emulation speed. It is not guaranteed that this speed will be reached on all systems."); TRANSLATE_NOOP("FullscreenUI", "Sets the turbo speed. It is not guaranteed that this speed will be reached on all systems."); TRANSLATE_NOOP("FullscreenUI", "Sets the verbosity of messages logged. Higher levels will log more messages."); diff --git a/src/duckstation-qt/advancedsettingswidget.cpp b/src/duckstation-qt/advancedsettingswidget.cpp index 9b6cba46c..c1e9b7c76 100644 --- a/src/duckstation-qt/advancedsettingswidget.cpp +++ b/src/duckstation-qt/advancedsettingswidget.cpp @@ -45,7 +45,8 @@ static QCheckBox* setBooleanTweakOption(QTableWidget* table, int row, bool value } static QSpinBox* addIntRangeTweakOption(SettingsWindow* dialog, QTableWidget* table, QString name, std::string section, - std::string key, int min_value, int max_value, int default_value) + std::string key, int min_value, int max_value, int default_value, + const QString& suffix = QString()) { const int row = table->rowCount(); @@ -58,6 +59,9 @@ static QSpinBox* addIntRangeTweakOption(SettingsWindow* dialog, QTableWidget* ta QSpinBox* cb = new QSpinBox(table); cb->setMinimum(min_value); cb->setMaximum(max_value); + if (!suffix.isEmpty()) + cb->setSuffix(suffix); + if (!section.empty() || !key.empty()) { SettingWidgetBinder::BindWidgetToIntSetting(dialog->getSettingsInterface(), cb, std::move(section), std::move(key), @@ -254,13 +258,13 @@ void AdvancedSettingsWidget::addTweakOptions() } addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("DMA Max Slice Ticks"), "Hacks", "DMAMaxSliceTicks", 1, - 10000, Settings::DEFAULT_DMA_MAX_SLICE_TICKS); + 10000, Settings::DEFAULT_DMA_MAX_SLICE_TICKS, tr(" cycles")); addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("DMA Halt Ticks"), "Hacks", "DMAHaltTicks", 1, 10000, - Settings::DEFAULT_DMA_HALT_TICKS); + Settings::DEFAULT_DMA_HALT_TICKS, tr(" cycles")); addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("GPU FIFO Size"), "Hacks", "GPUFIFOSize", 16, 4096, - Settings::DEFAULT_GPU_FIFO_SIZE); + Settings::DEFAULT_GPU_FIFO_SIZE, tr(" words")); addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("GPU Max Run-Ahead"), "Hacks", "GPUMaxRunAhead", 0, 1000, - Settings::DEFAULT_GPU_MAX_RUN_AHEAD); + Settings::DEFAULT_GPU_MAX_RUN_AHEAD, tr(" cycles")); addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Enable Recompiler Memory Exceptions"), "CPU", "RecompilerMemoryExceptions", false); @@ -275,8 +279,10 @@ void AdvancedSettingsWidget::addTweakOptions() Settings::ParseCDROMMechVersionName, Settings::GetCDROMMechVersionName, Settings::GetCDROMMechVersionDisplayName, static_cast(CDROMMechaconVersion::Count), Settings::DEFAULT_CDROM_MECHACON_VERSION); + addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("CD-ROM Readahead Sectors"), "CDROM", "ReadaheadSectors", + 0, 32, Settings::DEFAULT_CDROM_READAHEAD_SECTORS, tr(" sectors")); addIntRangeTweakOption(m_dialog, m_ui.tweakOptionTable, tr("CD-ROM Max Speedup Read/Seek Cycles"), "CDROM", - "MaxSpeedupCycles", 0, 1000000, Settings::DEFAULT_CDROM_MAX_SPEEDUP_CYCLES); + "MaxSpeedupCycles", 0, 1000000, Settings::DEFAULT_CDROM_MAX_SPEEDUP_CYCLES, tr(" cycles")); addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("CD-ROM Region Check"), "CDROM", "RegionCheck", false); addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("CD-ROM SubQ Skew"), "CDROM", "SubQSkew", false); addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Allow Booting Without SBI File"), "CDROM", @@ -319,6 +325,8 @@ void AdvancedSettingsWidget::onResetToDefaultClicked() Settings::DEFAULT_CPU_FASTMEM_MODE); // Recompiler fastmem mode setChoiceTweakOption(m_ui.tweakOptionTable, i++, Settings::DEFAULT_CDROM_MECHACON_VERSION); // CDROM Mechacon Version + setIntRangeTweakOption(m_ui.tweakOptionTable, i++, + Settings::DEFAULT_CDROM_READAHEAD_SECTORS); // CD-ROM Readahead Sectors setIntRangeTweakOption(m_ui.tweakOptionTable, i++, Settings::DEFAULT_CDROM_MAX_SPEEDUP_CYCLES); // CD-ROM Max Speedup Read/Seek Cycles setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // CDROM Region Check @@ -353,6 +361,7 @@ void AdvancedSettingsWidget::onResetToDefaultClicked() sif->DeleteValue("CPU", "RecompilerBlockLinking"); sif->DeleteValue("CPU", "FastmemMode"); sif->DeleteValue("CDROM", "MechaconVersion"); + sif->DeleteValue("CDROM", "ReadaheadSectors"); sif->DeleteValue("CDROM", "MaxSpeedupCycles"); sif->DeleteValue("CDROM", "RegionCheck"); sif->DeleteValue("CDROM", "SubQSkew"); diff --git a/src/duckstation-qt/consolesettingswidget.cpp b/src/duckstation-qt/consolesettingswidget.cpp index 829eddd8a..f6f67c87b 100644 --- a/src/duckstation-qt/consolesettingswidget.cpp +++ b/src/duckstation-qt/consolesettingswidget.cpp @@ -35,17 +35,6 @@ ConsoleSettingsWidget::ConsoleSettingsWidget(SettingsWindow* dialog, QWidget* pa QString::fromUtf8(Settings::GetCPUExecutionModeDisplayName(static_cast(i)))); } - static constexpr float TIME_PER_SECTOR_DOUBLE_SPEED = 1000.0f / 150.0f; - m_ui.cdromReadaheadSectors->addItem(tr("Disabled (Synchronous)")); - for (u32 i = 1; i <= 32; i++) - { - m_ui.cdromReadaheadSectors->addItem(tr("%1 sectors (%2 KB / %3 ms)") - .arg(i) - - .arg(static_cast(i) * TIME_PER_SECTOR_DOUBLE_SPEED, 0, 'f', 0) - .arg(static_cast(i * CDImage::RAW_SECTOR_SIZE) / 1024.0f)); - } - SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.region, "Console", "Region", &Settings::ParseConsoleRegionName, &Settings::GetConsoleRegionName, Settings::DEFAULT_CONSOLE_REGION); SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.fastBoot, "BIOS", "PatchFastBoot", false); @@ -61,8 +50,6 @@ ConsoleSettingsWidget::ConsoleSettingsWidget(SettingsWindow* dialog, QWidget* pa Settings::DEFAULT_CPU_EXECUTION_MODE); SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableCPUClockSpeedControl, "CPU", "OverclockEnable", false); SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.recompilerICache, "CPU", "RecompilerICache", false); - SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.cdromReadaheadSectors, "CDROM", "ReadaheadSectors", - Settings::DEFAULT_CDROM_READAHEAD_SECTORS); SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.cdromLoadImageToRAM, "CDROM", "LoadImageToRAM", false); SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.cdromLoadImagePatches, "CDROM", "LoadImagePatches", false); @@ -118,10 +105,6 @@ ConsoleSettingsWidget::ConsoleSettingsWidget(SettingsWindow* dialog, QWidget* pa m_ui.cdromSeekSpeedup, tr("CD-ROM Seek Speedup"), tr("None (Normal Speed)"), tr("Reduces the simulated time for the CD-ROM sled to move to different areas of the disc. Can improve loading " "times, but crash games which do not expect the CD-ROM to operate faster.")); - dialog->registerWidgetHelp(m_ui.cdromReadaheadSectors, tr("Asynchronous Readahead"), tr("8 Sectors"), - tr("Reduces hitches in emulation by reading/decompressing CD data asynchronously on a " - "worker thread. Higher sector numbers can reduce spikes when streaming FMVs or audio " - "on slower storage or when using compression formats such as CHD.")); dialog->registerWidgetHelp( m_ui.cdromLoadImageToRAM, tr("Preload Image to RAM"), tr("Unchecked"), tr("Loads the game image into RAM. Useful for network paths that may become unreliable during gameplay. In some " diff --git a/src/duckstation-qt/consolesettingswidget.ui b/src/duckstation-qt/consolesettingswidget.ui index 4bc30da10..f466002eb 100644 --- a/src/duckstation-qt/consolesettingswidget.ui +++ b/src/duckstation-qt/consolesettingswidget.ui @@ -166,17 +166,14 @@ CD-ROM Emulation - - - - + Read Speedup: - + @@ -235,17 +232,17 @@ - + Seek Speedup: - + - - 1 + + @@ -304,7 +301,7 @@ - + @@ -329,13 +326,6 @@ - - - - Async Readahead: - - -