diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt index 3bccc97607..7d60b64dba 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt @@ -19,6 +19,7 @@ enum class IntSetting(override val key: String) : AbstractIntSetting { RENDERER_NVDEC_EMULATION("nvdec_emulation"), RENDERER_ASTC_DECODE_METHOD("accelerate_astc"), RENDERER_ASTC_RECOMPRESSION("astc_recompression"), + RENDERER_FORMAT_REINTERPRETATION("format_reinterpretation"), RENDERER_ACCURACY("gpu_accuracy"), RENDERER_RESOLUTION("resolution_setup"), RENDERER_VSYNC("use_vsync"), diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt index 716d3aae56..8b2e029e54 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt @@ -359,6 +359,14 @@ abstract class SettingsItem( valuesId = R.array.astcRecompressionMethodValues ) ) + put( + SingleChoiceSetting( + IntSetting.RENDERER_FORMAT_REINTERPRETATION, + titleId = R.string.format_reinterpretation, + choicesId = R.array.formatReinterpretationNames, + valuesId = R.array.formatReinterpretationValues + ) + ) put( SingleChoiceSetting( IntSetting.RENDERER_VRAM_USAGE_MODE, diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt index b495206bb2..4f4e58339e 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -469,6 +469,7 @@ class SettingsFragmentPresenter( add(IntSetting.RENDERER_NVDEC_EMULATION.key) add(IntSetting.RENDERER_ASTC_DECODE_METHOD.key) add(IntSetting.RENDERER_ASTC_RECOMPRESSION.key) + add(IntSetting.RENDERER_FORMAT_REINTERPRETATION.key) add(IntSetting.RENDERER_VRAM_USAGE_MODE.key) add(IntSetting.RENDERER_OPTIMIZE_SPIRV_OUTPUT.key) diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml index 12dec24219..443191415b 100644 --- a/src/android/app/src/main/res/values/arrays.xml +++ b/src/android/app/src/main/res/values/arrays.xml @@ -161,6 +161,22 @@ 2 + + + @string/format_reinterpretation_disabled + @string/format_reinterpretation_r32uint_to_r32sfloat + @string/format_reinterpretation_r32sint_to_r32uint + @string/format_reinterpretation_r32sfloat_to_r32sint + + + + + 0 + 1 + 2 + 3 + + @string/nvdec_emulation_none diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index fb80eaf053..6936ff1775 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -922,7 +922,14 @@ BC1 (Low Quality) BC3 (Medium Quality) - + + Format Reinterpretation + Disabled + R32 UInt to R32 SFloat + R32 SInt to R32 UInt + R32 SFloat to R32 SInt + + VRAM Usage Mode Control how aggressively the emulator allocates and frees GPU memory. Conservative diff --git a/src/common/settings.cpp b/src/common/settings.cpp index 56b65c527c..324d71df97 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -47,6 +47,7 @@ SWITCHABLE(AstcRecompression, true); SWITCHABLE(AudioMode, true); SWITCHABLE(CpuBackend, true); SWITCHABLE(CpuAccuracy, true); +SWITCHABLE(FormatReinterpretation, true); SWITCHABLE(FullscreenMode, true); SWITCHABLE(GpuAccuracy, true); SWITCHABLE(Language, true); diff --git a/src/qt_common/config/shared_translation.cpp b/src/qt_common/config/shared_translation.cpp index b54211142c..8f3881d9c7 100644 --- a/src/qt_common/config/shared_translation.cpp +++ b/src/qt_common/config/shared_translation.cpp @@ -196,6 +196,11 @@ std::unique_ptr InitializeTranslations(QObject* parent) tr("Stretches the renderer to fit the specified aspect ratio.\nMost games only support " "16:9, so modifications are required to get other ratios.\nAlso controls the " "aspect ratio of captured screenshots.")); + INSERT(Settings, + format_reinterpretation, + tr("Format Reinterpretation:"), + tr("Reinterprets certain texture formats to improve performance.\nMay cause " + "graphical issues in some games.")); INSERT(Settings, use_disk_shader_cache, tr("Use persistent pipeline cache"), @@ -717,6 +722,13 @@ std::unique_ptr ComboboxEnumeration(QObject* parent) PAIR(GpuOverclock, Medium, tr("Medium (256)")), PAIR(GpuOverclock, High, tr("High (512)")), }}); + translations->insert({Settings::EnumMetadata::Index(), + { + PAIR(FormatReinterpretation, Disabled, tr("Disabled")), + PAIR(FormatReinterpretation, R32UintToR32Sfloat, tr("R32 Uint to R32 Float")), + PAIR(FormatReinterpretation, R32SintToR32Uint, tr("R32 Sint to R32 Uint")), + PAIR(FormatReinterpretation, R32SfloatToR32Sint, tr("R32 Float to R32 Sint")), + }}); #undef PAIR #undef CTX_PAIR diff --git a/src/qt_common/config/shared_translation.h b/src/qt_common/config/shared_translation.h index 8cc54644af..db88605397 100644 --- a/src/qt_common/config/shared_translation.h +++ b/src/qt_common/config/shared_translation.h @@ -55,6 +55,17 @@ static const std::map scaling_filter_texts_map {Settings::ScalingFilter::Mmpx, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "MMPX"))}, }; +static const std::map format_reinterpretation_texts_map = { + {Settings::FormatReinterpretation::Disabled, + QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "Disabled"))}, + {Settings::FormatReinterpretation::R32UintToR32Sfloat, + QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "R32 Uint to R32 Float"))}, + {Settings::FormatReinterpretation::R32SintToR32Uint, + QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "R32 Sint to R32 Uint"))}, + {Settings::FormatReinterpretation::R32SfloatToR32Sint, + QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "R32 Float to R32 Sint"))}, +}; + static const std::map use_docked_mode_texts_map = { {Settings::ConsoleMode::Docked, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "Docked"))}, {Settings::ConsoleMode::Handheld, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "Handheld"))},