From 561aee7707d4ace0d987deed6c8084178c653c3d Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sat, 22 Feb 2025 23:44:39 -0600 Subject: [PATCH] Config: Expose Default and 1x Anisotropic Filtering setting. --- Source/Core/Core/Config/GraphicsSettings.cpp | 3 ++- Source/Core/Core/Config/GraphicsSettings.h | 4 ++- Source/Core/Core/DolphinAnalytics.cpp | 3 ++- Source/Core/Core/NetPlayProto.h | 2 +- .../Config/Graphics/EnhancementsWidget.cpp | 27 ++++++++++--------- Source/Core/VideoCommon/TextureCacheBase.cpp | 6 +++-- Source/Core/VideoCommon/VideoConfig.cpp | 2 +- Source/Core/VideoCommon/VideoConfig.h | 12 ++++++++- 8 files changed, 38 insertions(+), 21 deletions(-) diff --git a/Source/Core/Core/Config/GraphicsSettings.cpp b/Source/Core/Core/Config/GraphicsSettings.cpp index 56528a2399..c21627807f 100644 --- a/Source/Core/Core/Config/GraphicsSettings.cpp +++ b/Source/Core/Core/Config/GraphicsSettings.cpp @@ -135,7 +135,8 @@ const Info GFX_VERTEX_LOADER_TYPE{{System::GFX, "Settings", "V const Info GFX_ENHANCE_FORCE_TEXTURE_FILTERING{ {System::GFX, "Enhancements", "ForceTextureFiltering"}, TextureFilteringMode::Default}; -const Info GFX_ENHANCE_MAX_ANISOTROPY{{System::GFX, "Enhancements", "MaxAnisotropy"}, 0}; +const Info GFX_ENHANCE_MAX_ANISOTROPY{ + {System::GFX, "Enhancements", "MaxAnisotropy"}, AnisotropicFilteringMode::Default}; const Info GFX_ENHANCE_OUTPUT_RESAMPLING{ {System::GFX, "Enhancements", "OutputResampling"}, OutputResamplingMode::Default}; const Info GFX_ENHANCE_POST_SHADER{ diff --git a/Source/Core/Core/Config/GraphicsSettings.h b/Source/Core/Core/Config/GraphicsSettings.h index 46b5fb847a..431797cefa 100644 --- a/Source/Core/Core/Config/GraphicsSettings.h +++ b/Source/Core/Core/Config/GraphicsSettings.h @@ -12,6 +12,7 @@ enum class ShaderCompilationMode : int; enum class StereoMode : int; enum class StereoPerEyeResolution : int; enum class TextureFilteringMode : int; +enum class AnisotropicFilteringMode : int; enum class OutputResamplingMode : int; enum class ColorCorrectionRegion : int; enum class TriState : int; @@ -111,7 +112,8 @@ extern const Info GFX_MODS_ENABLE; // Graphics.Enhancements extern const Info GFX_ENHANCE_FORCE_TEXTURE_FILTERING; -extern const Info GFX_ENHANCE_MAX_ANISOTROPY; // NOTE - this is x in (1 << x) +// NOTE - this is x in (1 << x) +extern const Info GFX_ENHANCE_MAX_ANISOTROPY; extern const Info GFX_ENHANCE_OUTPUT_RESAMPLING; extern const Info GFX_ENHANCE_POST_SHADER; extern const Info GFX_ENHANCE_FORCE_TRUE_COLOR; diff --git a/Source/Core/Core/DolphinAnalytics.cpp b/Source/Core/Core/DolphinAnalytics.cpp index d799d36e32..5613e3fea4 100644 --- a/Source/Core/Core/DolphinAnalytics.cpp +++ b/Source/Core/Core/DolphinAnalytics.cpp @@ -26,6 +26,7 @@ #include "Common/CommonTypes.h" #include "Common/Config/Config.h" #include "Common/Crypto/SHA1.h" +#include "Common/EnumUtils.h" #include "Common/Random.h" #include "Common/Timer.h" #include "Common/Version.h" @@ -373,7 +374,7 @@ void DolphinAnalytics::MakePerGameBuilder() // Video configuration. builder.AddData("cfg-gfx-multisamples", g_Config.iMultisamples); builder.AddData("cfg-gfx-ssaa", g_Config.bSSAA); - builder.AddData("cfg-gfx-anisotropy", g_Config.iMaxAnisotropy); + builder.AddData("cfg-gfx-anisotropy", Common::ToUnderlying(g_Config.iMaxAnisotropy)); builder.AddData("cfg-gfx-vsync", g_Config.bVSync); builder.AddData("cfg-gfx-aspect-ratio", static_cast(g_Config.aspect_mode)); builder.AddData("cfg-gfx-efb-access", g_Config.bEFBAccessEnable); diff --git a/Source/Core/Core/NetPlayProto.h b/Source/Core/Core/NetPlayProto.h index 86f54d458d..c97d04c2b2 100644 --- a/Source/Core/Core/NetPlayProto.h +++ b/Source/Core/Core/NetPlayProto.h @@ -85,7 +85,7 @@ struct NetSettings bool enable_pixel_lighting = false; bool widescreen_hack = false; TextureFilteringMode force_texture_filtering = TextureFilteringMode::Default; - int max_anisotropy = 0; + AnisotropicFilteringMode max_anisotropy = AnisotropicFilteringMode::Default; bool force_true_color = false; bool disable_copy_filter = false; bool disable_fog = false; diff --git a/Source/Core/DolphinQt/Config/Graphics/EnhancementsWidget.cpp b/Source/Core/DolphinQt/Config/Graphics/EnhancementsWidget.cpp index 0e63fb894b..ed353af5b4 100644 --- a/Source/Core/DolphinQt/Config/Graphics/EnhancementsWidget.cpp +++ b/Source/Core/DolphinQt/Config/Graphics/EnhancementsWidget.cpp @@ -12,13 +12,12 @@ #include #include "Common/CommonTypes.h" +#include "Common/EnumUtils.h" #include "Core/Config/GraphicsSettings.h" -#include "Core/ConfigManager.h" #include "DolphinQt/Config/ConfigControls/ConfigBool.h" #include "DolphinQt/Config/ConfigControls/ConfigChoice.h" -#include "DolphinQt/Config/ConfigControls/ConfigRadio.h" #include "DolphinQt/Config/ConfigControls/ConfigSlider.h" #include "DolphinQt/Config/GameConfigWidget.h" #include "DolphinQt/Config/Graphics/ColorCorrectionConfigWindow.h" @@ -63,14 +62,14 @@ EnhancementsWidget::EnhancementsWidget(GameConfigWidget* parent, Config::Layer* &EnhancementsWidget::OnConfigChanged); } -constexpr int ANISO_DEFAULT = 0; -constexpr int ANISO_2X = 1; -constexpr int ANISO_4X = 2; -constexpr int ANISO_8X = 3; -constexpr int ANISO_16X = 4; -constexpr int FILTERING_DEFAULT = 0; -constexpr int FILTERING_NEAREST = 1; -constexpr int FILTERING_LINEAR = 2; +constexpr int ANISO_1x = Common::ToUnderlying(AnisotropicFilteringMode::Force1x); +constexpr int ANISO_2X = Common::ToUnderlying(AnisotropicFilteringMode::Force2x); +constexpr int ANISO_4X = Common::ToUnderlying(AnisotropicFilteringMode::Force4x); +constexpr int ANISO_8X = Common::ToUnderlying(AnisotropicFilteringMode::Force8x); +constexpr int ANISO_16X = Common::ToUnderlying(AnisotropicFilteringMode::Force16x); +constexpr int FILTERING_DEFAULT = Common::ToUnderlying(TextureFilteringMode::Default); +constexpr int FILTERING_NEAREST = Common::ToUnderlying(TextureFilteringMode::Nearest); +constexpr int FILTERING_LINEAR = Common::ToUnderlying(TextureFilteringMode::Linear); void EnhancementsWidget::CreateWidgets() { @@ -129,13 +128,15 @@ void EnhancementsWidget::CreateWidgets() new ConfigComplexChoice(Config::GFX_ENHANCE_MAX_ANISOTROPY, Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, m_game_layer); - m_texture_filtering_combo->Add(tr("Default"), ANISO_DEFAULT, FILTERING_DEFAULT); + m_texture_filtering_combo->Add(tr("Default"), Config::DefaultState{}, FILTERING_DEFAULT); + m_texture_filtering_combo->Add(tr("1x Anisotropic"), ANISO_1x, FILTERING_DEFAULT); m_texture_filtering_combo->Add(tr("2x Anisotropic"), ANISO_2X, FILTERING_DEFAULT); m_texture_filtering_combo->Add(tr("4x Anisotropic"), ANISO_4X, FILTERING_DEFAULT); m_texture_filtering_combo->Add(tr("8x Anisotropic"), ANISO_8X, FILTERING_DEFAULT); m_texture_filtering_combo->Add(tr("16x Anisotropic"), ANISO_16X, FILTERING_DEFAULT); - m_texture_filtering_combo->Add(tr("Force Nearest"), ANISO_DEFAULT, FILTERING_NEAREST); - m_texture_filtering_combo->Add(tr("Force Linear"), ANISO_DEFAULT, FILTERING_LINEAR); + m_texture_filtering_combo->Add(tr("Force Nearest and 1x Anisotropic "), ANISO_1x, + FILTERING_NEAREST); + m_texture_filtering_combo->Add(tr("Force Linear and 1x Anisotropic"), ANISO_1x, FILTERING_LINEAR); m_texture_filtering_combo->Add(tr("Force Linear and 2x Anisotropic"), ANISO_2X, FILTERING_LINEAR); m_texture_filtering_combo->Add(tr("Force Linear and 4x Anisotropic"), ANISO_4X, FILTERING_LINEAR); m_texture_filtering_combo->Add(tr("Force Linear and 8x Anisotropic"), ANISO_8X, FILTERING_LINEAR); diff --git a/Source/Core/VideoCommon/TextureCacheBase.cpp b/Source/Core/VideoCommon/TextureCacheBase.cpp index 3f237dcb99..303a5f5b44 100644 --- a/Source/Core/VideoCommon/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/TextureCacheBase.cpp @@ -20,6 +20,7 @@ #include "Common/Assert.h" #include "Common/ChunkFile.h" #include "Common/CommonTypes.h" +#include "Common/EnumUtils.h" #include "Common/FileUtil.h" #include "Common/Hash.h" #include "Common/Logging/Log.h" @@ -1038,7 +1039,8 @@ SamplerState TextureCacheBase::GetSamplerState(u32 index, float custom_tex_scale state.tm1.max_lod = 255; // Anisotropic filtering option. - if (g_ActiveConfig.iMaxAnisotropy != 0 && IsAnisostropicEnhancementSafe(tm0)) + if (g_ActiveConfig.iMaxAnisotropy != AnisotropicFilteringMode::Default && + IsAnisostropicEnhancementSafe(tm0)) { // https://www.opengl.org/registry/specs/EXT/texture_filter_anisotropic.txt // For predictable results on all hardware/drivers, only use one of: @@ -1051,7 +1053,7 @@ SamplerState TextureCacheBase::GetSamplerState(u32 index, float custom_tex_scale state.tm0.mag_filter = FilterMode::Linear; if (tm0.mipmap_filter != MipMode::None) state.tm0.mipmap_filter = FilterMode::Linear; - state.tm0.anisotropic_filtering = g_ActiveConfig.iMaxAnisotropy; + state.tm0.anisotropic_filtering = Common::ToUnderlying(g_ActiveConfig.iMaxAnisotropy); } if (has_arbitrary_mips && tm0.mipmap_filter != MipMode::None) diff --git a/Source/Core/VideoCommon/VideoConfig.cpp b/Source/Core/VideoCommon/VideoConfig.cpp index 678541931e..b540358fb1 100644 --- a/Source/Core/VideoCommon/VideoConfig.cpp +++ b/Source/Core/VideoCommon/VideoConfig.cpp @@ -265,7 +265,7 @@ void CheckForConfigChanges() const ShaderHostConfig old_shader_host_config = ShaderHostConfig::GetCurrent(); const StereoMode old_stereo = g_ActiveConfig.stereo_mode; const u32 old_multisamples = g_ActiveConfig.iMultisamples; - const int old_anisotropy = g_ActiveConfig.iMaxAnisotropy; + const auto old_anisotropy = g_ActiveConfig.iMaxAnisotropy; const int old_efb_access_tile_size = g_ActiveConfig.iEFBAccessTileSize; const auto old_texture_filtering_mode = g_ActiveConfig.texture_filtering_mode; const bool old_vsync = g_ActiveConfig.bVSyncActive; diff --git a/Source/Core/VideoCommon/VideoConfig.h b/Source/Core/VideoCommon/VideoConfig.h index 53b51a81e4..4caa48bd7c 100644 --- a/Source/Core/VideoCommon/VideoConfig.h +++ b/Source/Core/VideoCommon/VideoConfig.h @@ -55,6 +55,16 @@ enum class TextureFilteringMode : int Linear, }; +enum class AnisotropicFilteringMode : int +{ + Default = -1, + Force1x = 0, + Force2x = 1, + Force4x = 2, + Force8x = 3, + Force16x = 4, +}; + enum class OutputResamplingMode : int { Default, @@ -202,7 +212,7 @@ struct VideoConfig final int iEFBScale = 0; TextureFilteringMode texture_filtering_mode = TextureFilteringMode::Default; OutputResamplingMode output_resampling_mode = OutputResamplingMode::Default; - int iMaxAnisotropy = 0; + AnisotropicFilteringMode iMaxAnisotropy = AnisotropicFilteringMode::Default; std::string sPostProcessingShader; bool bForceTrueColor = false; bool bDisableCopyFilter = false;