diff --git a/docs/user/Graphics.md b/docs/user/Graphics.md
index ccbc6cea4c..d9c9c3fda3 100644
--- a/docs/user/Graphics.md
+++ b/docs/user/Graphics.md
@@ -43,6 +43,12 @@ Various graphical filters exist - each of them aimed at a specific target/image
- **Pros**: Offers decent pixel-art upscaling.
- **Cons**: Only works for pixel-art.
+### Anisotropy values
+
+The anisotropy value is (value game wants + the set value); **Default** will use the native anisotropy value as it would be on hardware. **Automatic** sets it according to screen resolution. Turning off anisotropy is not recommended as it can break a myriad of games, however it is provided in the name of flexibility.
+
+Values from x2, x4, x8, x16, x32 up to x512 values are provided. This should be enough to not need to revise those values in my lifetime ever again.
+
### External
While stock shaders offer a basic subset of options for most users, programs such as [ReShade](https://github.com/crosire/reshade) offer a more flexible experience. In addition to that users can also seek out modifications (mods) for enhancing visual experience (60 FPS mods, HDR, etc).
diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml
index 12dec24219..80b12e48e2 100644
--- a/src/android/app/src/main/res/values/arrays.xml
+++ b/src/android/app/src/main/res/values/arrays.xml
@@ -487,10 +487,16 @@
- @string/auto
- @string/slider_default
- - @string/multiplier_two
- - @string/multiplier_four
- - @string/multiplier_eight
- - @string/multiplier_sixteen
+ - @string/multiplier_x2
+ - @string/multiplier_x4
+ - @string/multiplier_x8
+ - @string/multiplier_x16
+ - @string/multiplier_x32
+ - @string/multiplier_x64
+ - @string/multiplier_x128
+ - @string/multiplier_x256
+ - @string/multiplier_x512
+ - @string/multiplier_none
- 0
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 2dcee90404..e894822674 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -1055,10 +1055,16 @@
cubeb
- 2x
- 4x
- 8x
- 16x
+ x2
+ x4
+ x8
+ x16
+ x32
+ x64
+ x128
+ x256
+ x512
+ None
Black backgrounds
diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h
index 3ba2144efc..6851053e9d 100644
--- a/src/common/settings_enums.h
+++ b/src/common/settings_enums.h
@@ -126,7 +126,7 @@ ENUM(TimeZone, Auto, Default, Cet, Cst6Cdt, Cuba, Eet, Egypt, Eire, Est, Est5Edt
GmtPlusZero, GmtMinusZero, GmtZero, Greenwich, Hongkong, Hst, Iceland, Iran, Israel, Jamaica,
Japan, Kwajalein, Libya, Met, Mst, Mst7Mdt, Navajo, Nz, NzChat, Poland, Portugal, Prc, Pst8Pdt,
Roc, Rok, Singapore, Turkey, Uct, Universal, Utc, WSu, Wet, Zulu);
-ENUM(AnisotropyMode, Automatic, Default, X2, X4, X8, X16);
+ENUM(AnisotropyMode, Automatic, Default, X2, X4, X8, X16, X32, X64, X128, X256, X512, None);
ENUM(AstcDecodeMode, Cpu, Gpu, CpuAsynchronous);
ENUM(AstcRecompression, Uncompressed, Bc1, Bc3);
ENUM(VSyncMode, Immediate, Mailbox, Fifo, FifoRelaxed);
diff --git a/src/qt_common/config/shared_translation.cpp b/src/qt_common/config/shared_translation.cpp
index f8295e61c0..f6a797f17e 100644
--- a/src/qt_common/config/shared_translation.cpp
+++ b/src/qt_common/config/shared_translation.cpp
@@ -596,6 +596,12 @@ std::unique_ptr ComboboxEnumeration(QObject* parent)
PAIR(AnisotropyMode, X4, tr("4x")),
PAIR(AnisotropyMode, X8, tr("8x")),
PAIR(AnisotropyMode, X16, tr("16x")),
+ PAIR(AnisotropyMode, X32, tr("32x")),
+ PAIR(AnisotropyMode, X64, tr("64x")),
+ PAIR(AnisotropyMode, X128, tr("128x")),
+ PAIR(AnisotropyMode, X256, tr("256x")),
+ PAIR(AnisotropyMode, X512, tr("512x")),
+ PAIR(AnisotropyMode, None, tr("None")),
}});
translations->insert(
{Settings::EnumMetadata::Index(),
diff --git a/src/video_core/textures/texture.cpp b/src/video_core/textures/texture.cpp
index b51441bdfe..0c566f1069 100644
--- a/src/video_core/textures/texture.cpp
+++ b/src/video_core/textures/texture.cpp
@@ -69,20 +69,32 @@ float TSCEntry::MaxAnisotropy() const noexcept {
const bool has_regular_lods = min_lod_clamp == 0 && max_lod_clamp >= 256;
const bool is_bilinear_filter = min_filter == TextureFilter::Linear &&
reduction_filter == SamplerReduction::WeightedAverage;
- if (max_anisotropy == 0 && (!is_suitable_mipmap_filter || !has_regular_lods ||
- !is_bilinear_filter || depth_compare_enabled)) {
+ if (max_anisotropy == 0 && (!is_suitable_mipmap_filter || !has_regular_lods || !is_bilinear_filter || depth_compare_enabled))
return 1.0f;
- }
- const auto anisotropic_settings = Settings::values.max_anisotropy.GetValue();
+
s32 added_anisotropic{};
- if (anisotropic_settings == Settings::AnisotropyMode::Automatic) {
- added_anisotropic = Settings::values.resolution_info.up_scale >>
- Settings::values.resolution_info.down_shift;
- added_anisotropic = (std::max)(added_anisotropic - 1, 0);
- } else {
- added_anisotropic = static_cast(Settings::values.max_anisotropy.GetValue()) - 1U;
+ auto const anisotropic_settings = Settings::values.max_anisotropy.GetValue();
+ switch (anisotropic_settings) {
+ case Settings::AnisotropyMode::Default:
+ case Settings::AnisotropyMode::X2:
+ case Settings::AnisotropyMode::X4:
+ case Settings::AnisotropyMode::X8:
+ case Settings::AnisotropyMode::X16:
+ case Settings::AnisotropyMode::X32:
+ case Settings::AnisotropyMode::X64:
+ case Settings::AnisotropyMode::X128:
+ case Settings::AnisotropyMode::X256:
+ case Settings::AnisotropyMode::X512:
+ added_anisotropic = u32(anisotropic_settings) - 1U;
+ break;
+ case Settings::AnisotropyMode::Automatic:
+ added_anisotropic = Settings::values.resolution_info.up_scale >> Settings::values.resolution_info.down_shift;
+ added_anisotropic = (std::max)(added_anisotropic - 1U, 0U);
+ break;
+ case Settings::AnisotropyMode::None:
+ return 0.f;
}
- return static_cast(1U << (max_anisotropy + added_anisotropic));
+ return float(1U << (max_anisotropy + added_anisotropic));
}
} // namespace Tegra::Texture