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"))},