Browse Source

[video_core, settings] Allow to turn of aniso levels completely, provide levels of aniso upto x256

pull/3019/head
lizzie 3 months ago
committed by crueter
parent
commit
bffc523886
  1. 6
      docs/user/Graphics.md
  2. 14
      src/android/app/src/main/res/values/arrays.xml
  3. 14
      src/android/app/src/main/res/values/strings.xml
  4. 2
      src/common/settings_enums.h
  5. 6
      src/qt_common/config/shared_translation.cpp
  6. 34
      src/video_core/textures/texture.cpp

6
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).

14
src/android/app/src/main/res/values/arrays.xml

@ -487,10 +487,16 @@
<string-array name="anisoEntries">
<item>@string/auto</item>
<item>@string/slider_default</item>
<item>@string/multiplier_two</item>
<item>@string/multiplier_four</item>
<item>@string/multiplier_eight</item>
<item>@string/multiplier_sixteen</item>
<item>@string/multiplier_x2</item>
<item>@string/multiplier_x4</item>
<item>@string/multiplier_x8</item>
<item>@string/multiplier_x16</item>
<item>@string/multiplier_x32</item>
<item>@string/multiplier_x64</item>
<item>@string/multiplier_x128</item>
<item>@string/multiplier_x256</item>
<item>@string/multiplier_x512</item>
<item>@string/multiplier_none</item>
</string-array>
<integer-array name="anisoValues">
<item>0</item>

14
src/android/app/src/main/res/values/strings.xml

@ -1055,10 +1055,16 @@
<string name="cubeb">cubeb</string>
<!-- Anisotropic filtering options -->
<string name="multiplier_two">2x</string>
<string name="multiplier_four">4x</string>
<string name="multiplier_eight">8x</string>
<string name="multiplier_sixteen">16x</string>
<string name="multiplier_x2">x2</string>
<string name="multiplier_x4">x4</string>
<string name="multiplier_x8">x8</string>
<string name="multiplier_x16">x16</string>
<string name="multiplier_x32">x32</string>
<string name="multiplier_x64">x64</string>
<string name="multiplier_x128">x128</string>
<string name="multiplier_x256">x256</string>
<string name="multiplier_x512">x512</string>
<string name="multiplier_none">None</string>
<!-- Black backgrounds theme -->
<string name="use_black_backgrounds">Black backgrounds</string>

2
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);

6
src/qt_common/config/shared_translation.cpp

@ -596,6 +596,12 @@ std::unique_ptr<ComboboxTranslationMap> 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<Settings::Language>::Index(),

34
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<u32>(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<float>(1U << (max_anisotropy + added_anisotropic));
return float(1U << (max_anisotropy + added_anisotropic));
}
} // namespace Tegra::Texture

Loading…
Cancel
Save