Config: Expose Default and 1x Anisotropic Filtering setting.

This commit is contained in:
Jordan Woyak
2025-02-22 23:44:39 -06:00
parent 4b711e1e0a
commit 561aee7707
8 changed files with 38 additions and 21 deletions

View File

@ -135,7 +135,8 @@ const Info<VertexLoaderType> GFX_VERTEX_LOADER_TYPE{{System::GFX, "Settings", "V
const Info<TextureFilteringMode> GFX_ENHANCE_FORCE_TEXTURE_FILTERING{ const Info<TextureFilteringMode> GFX_ENHANCE_FORCE_TEXTURE_FILTERING{
{System::GFX, "Enhancements", "ForceTextureFiltering"}, TextureFilteringMode::Default}; {System::GFX, "Enhancements", "ForceTextureFiltering"}, TextureFilteringMode::Default};
const Info<int> GFX_ENHANCE_MAX_ANISOTROPY{{System::GFX, "Enhancements", "MaxAnisotropy"}, 0}; const Info<AnisotropicFilteringMode> GFX_ENHANCE_MAX_ANISOTROPY{
{System::GFX, "Enhancements", "MaxAnisotropy"}, AnisotropicFilteringMode::Default};
const Info<OutputResamplingMode> GFX_ENHANCE_OUTPUT_RESAMPLING{ const Info<OutputResamplingMode> GFX_ENHANCE_OUTPUT_RESAMPLING{
{System::GFX, "Enhancements", "OutputResampling"}, OutputResamplingMode::Default}; {System::GFX, "Enhancements", "OutputResampling"}, OutputResamplingMode::Default};
const Info<std::string> GFX_ENHANCE_POST_SHADER{ const Info<std::string> GFX_ENHANCE_POST_SHADER{

View File

@ -12,6 +12,7 @@ enum class ShaderCompilationMode : int;
enum class StereoMode : int; enum class StereoMode : int;
enum class StereoPerEyeResolution : int; enum class StereoPerEyeResolution : int;
enum class TextureFilteringMode : int; enum class TextureFilteringMode : int;
enum class AnisotropicFilteringMode : int;
enum class OutputResamplingMode : int; enum class OutputResamplingMode : int;
enum class ColorCorrectionRegion : int; enum class ColorCorrectionRegion : int;
enum class TriState : int; enum class TriState : int;
@ -111,7 +112,8 @@ extern const Info<bool> GFX_MODS_ENABLE;
// Graphics.Enhancements // Graphics.Enhancements
extern const Info<TextureFilteringMode> GFX_ENHANCE_FORCE_TEXTURE_FILTERING; extern const Info<TextureFilteringMode> GFX_ENHANCE_FORCE_TEXTURE_FILTERING;
extern const Info<int> GFX_ENHANCE_MAX_ANISOTROPY; // NOTE - this is x in (1 << x) // NOTE - this is x in (1 << x)
extern const Info<AnisotropicFilteringMode> GFX_ENHANCE_MAX_ANISOTROPY;
extern const Info<OutputResamplingMode> GFX_ENHANCE_OUTPUT_RESAMPLING; extern const Info<OutputResamplingMode> GFX_ENHANCE_OUTPUT_RESAMPLING;
extern const Info<std::string> GFX_ENHANCE_POST_SHADER; extern const Info<std::string> GFX_ENHANCE_POST_SHADER;
extern const Info<bool> GFX_ENHANCE_FORCE_TRUE_COLOR; extern const Info<bool> GFX_ENHANCE_FORCE_TRUE_COLOR;

View File

@ -26,6 +26,7 @@
#include "Common/CommonTypes.h" #include "Common/CommonTypes.h"
#include "Common/Config/Config.h" #include "Common/Config/Config.h"
#include "Common/Crypto/SHA1.h" #include "Common/Crypto/SHA1.h"
#include "Common/EnumUtils.h"
#include "Common/Random.h" #include "Common/Random.h"
#include "Common/Timer.h" #include "Common/Timer.h"
#include "Common/Version.h" #include "Common/Version.h"
@ -373,7 +374,7 @@ void DolphinAnalytics::MakePerGameBuilder()
// Video configuration. // Video configuration.
builder.AddData("cfg-gfx-multisamples", g_Config.iMultisamples); builder.AddData("cfg-gfx-multisamples", g_Config.iMultisamples);
builder.AddData("cfg-gfx-ssaa", g_Config.bSSAA); 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-vsync", g_Config.bVSync);
builder.AddData("cfg-gfx-aspect-ratio", static_cast<int>(g_Config.aspect_mode)); builder.AddData("cfg-gfx-aspect-ratio", static_cast<int>(g_Config.aspect_mode));
builder.AddData("cfg-gfx-efb-access", g_Config.bEFBAccessEnable); builder.AddData("cfg-gfx-efb-access", g_Config.bEFBAccessEnable);

View File

@ -85,7 +85,7 @@ struct NetSettings
bool enable_pixel_lighting = false; bool enable_pixel_lighting = false;
bool widescreen_hack = false; bool widescreen_hack = false;
TextureFilteringMode force_texture_filtering = TextureFilteringMode::Default; TextureFilteringMode force_texture_filtering = TextureFilteringMode::Default;
int max_anisotropy = 0; AnisotropicFilteringMode max_anisotropy = AnisotropicFilteringMode::Default;
bool force_true_color = false; bool force_true_color = false;
bool disable_copy_filter = false; bool disable_copy_filter = false;
bool disable_fog = false; bool disable_fog = false;

View File

@ -12,13 +12,12 @@
#include <QVBoxLayout> #include <QVBoxLayout>
#include "Common/CommonTypes.h" #include "Common/CommonTypes.h"
#include "Common/EnumUtils.h"
#include "Core/Config/GraphicsSettings.h" #include "Core/Config/GraphicsSettings.h"
#include "Core/ConfigManager.h"
#include "DolphinQt/Config/ConfigControls/ConfigBool.h" #include "DolphinQt/Config/ConfigControls/ConfigBool.h"
#include "DolphinQt/Config/ConfigControls/ConfigChoice.h" #include "DolphinQt/Config/ConfigControls/ConfigChoice.h"
#include "DolphinQt/Config/ConfigControls/ConfigRadio.h"
#include "DolphinQt/Config/ConfigControls/ConfigSlider.h" #include "DolphinQt/Config/ConfigControls/ConfigSlider.h"
#include "DolphinQt/Config/GameConfigWidget.h" #include "DolphinQt/Config/GameConfigWidget.h"
#include "DolphinQt/Config/Graphics/ColorCorrectionConfigWindow.h" #include "DolphinQt/Config/Graphics/ColorCorrectionConfigWindow.h"
@ -63,14 +62,14 @@ EnhancementsWidget::EnhancementsWidget(GameConfigWidget* parent, Config::Layer*
&EnhancementsWidget::OnConfigChanged); &EnhancementsWidget::OnConfigChanged);
} }
constexpr int ANISO_DEFAULT = 0; constexpr int ANISO_1x = Common::ToUnderlying(AnisotropicFilteringMode::Force1x);
constexpr int ANISO_2X = 1; constexpr int ANISO_2X = Common::ToUnderlying(AnisotropicFilteringMode::Force2x);
constexpr int ANISO_4X = 2; constexpr int ANISO_4X = Common::ToUnderlying(AnisotropicFilteringMode::Force4x);
constexpr int ANISO_8X = 3; constexpr int ANISO_8X = Common::ToUnderlying(AnisotropicFilteringMode::Force8x);
constexpr int ANISO_16X = 4; constexpr int ANISO_16X = Common::ToUnderlying(AnisotropicFilteringMode::Force16x);
constexpr int FILTERING_DEFAULT = 0; constexpr int FILTERING_DEFAULT = Common::ToUnderlying(TextureFilteringMode::Default);
constexpr int FILTERING_NEAREST = 1; constexpr int FILTERING_NEAREST = Common::ToUnderlying(TextureFilteringMode::Nearest);
constexpr int FILTERING_LINEAR = 2; constexpr int FILTERING_LINEAR = Common::ToUnderlying(TextureFilteringMode::Linear);
void EnhancementsWidget::CreateWidgets() void EnhancementsWidget::CreateWidgets()
{ {
@ -129,13 +128,15 @@ void EnhancementsWidget::CreateWidgets()
new ConfigComplexChoice(Config::GFX_ENHANCE_MAX_ANISOTROPY, new ConfigComplexChoice(Config::GFX_ENHANCE_MAX_ANISOTROPY,
Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, m_game_layer); 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("2x Anisotropic"), ANISO_2X, FILTERING_DEFAULT);
m_texture_filtering_combo->Add(tr("4x Anisotropic"), ANISO_4X, 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("8x Anisotropic"), ANISO_8X, FILTERING_DEFAULT);
m_texture_filtering_combo->Add(tr("16x Anisotropic"), ANISO_16X, 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 Nearest and 1x Anisotropic "), ANISO_1x,
m_texture_filtering_combo->Add(tr("Force Linear"), ANISO_DEFAULT, FILTERING_LINEAR); 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 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 4x Anisotropic"), ANISO_4X, FILTERING_LINEAR);
m_texture_filtering_combo->Add(tr("Force Linear and 8x Anisotropic"), ANISO_8X, FILTERING_LINEAR); m_texture_filtering_combo->Add(tr("Force Linear and 8x Anisotropic"), ANISO_8X, FILTERING_LINEAR);

View File

@ -20,6 +20,7 @@
#include "Common/Assert.h" #include "Common/Assert.h"
#include "Common/ChunkFile.h" #include "Common/ChunkFile.h"
#include "Common/CommonTypes.h" #include "Common/CommonTypes.h"
#include "Common/EnumUtils.h"
#include "Common/FileUtil.h" #include "Common/FileUtil.h"
#include "Common/Hash.h" #include "Common/Hash.h"
#include "Common/Logging/Log.h" #include "Common/Logging/Log.h"
@ -1038,7 +1039,8 @@ SamplerState TextureCacheBase::GetSamplerState(u32 index, float custom_tex_scale
state.tm1.max_lod = 255; state.tm1.max_lod = 255;
// Anisotropic filtering option. // 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 // https://www.opengl.org/registry/specs/EXT/texture_filter_anisotropic.txt
// For predictable results on all hardware/drivers, only use one of: // 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; state.tm0.mag_filter = FilterMode::Linear;
if (tm0.mipmap_filter != MipMode::None) if (tm0.mipmap_filter != MipMode::None)
state.tm0.mipmap_filter = FilterMode::Linear; 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) if (has_arbitrary_mips && tm0.mipmap_filter != MipMode::None)

View File

@ -265,7 +265,7 @@ void CheckForConfigChanges()
const ShaderHostConfig old_shader_host_config = ShaderHostConfig::GetCurrent(); const ShaderHostConfig old_shader_host_config = ShaderHostConfig::GetCurrent();
const StereoMode old_stereo = g_ActiveConfig.stereo_mode; const StereoMode old_stereo = g_ActiveConfig.stereo_mode;
const u32 old_multisamples = g_ActiveConfig.iMultisamples; 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 int old_efb_access_tile_size = g_ActiveConfig.iEFBAccessTileSize;
const auto old_texture_filtering_mode = g_ActiveConfig.texture_filtering_mode; const auto old_texture_filtering_mode = g_ActiveConfig.texture_filtering_mode;
const bool old_vsync = g_ActiveConfig.bVSyncActive; const bool old_vsync = g_ActiveConfig.bVSyncActive;

View File

@ -55,6 +55,16 @@ enum class TextureFilteringMode : int
Linear, Linear,
}; };
enum class AnisotropicFilteringMode : int
{
Default = -1,
Force1x = 0,
Force2x = 1,
Force4x = 2,
Force8x = 3,
Force16x = 4,
};
enum class OutputResamplingMode : int enum class OutputResamplingMode : int
{ {
Default, Default,
@ -202,7 +212,7 @@ struct VideoConfig final
int iEFBScale = 0; int iEFBScale = 0;
TextureFilteringMode texture_filtering_mode = TextureFilteringMode::Default; TextureFilteringMode texture_filtering_mode = TextureFilteringMode::Default;
OutputResamplingMode output_resampling_mode = OutputResamplingMode::Default; OutputResamplingMode output_resampling_mode = OutputResamplingMode::Default;
int iMaxAnisotropy = 0; AnisotropicFilteringMode iMaxAnisotropy = AnisotropicFilteringMode::Default;
std::string sPostProcessingShader; std::string sPostProcessingShader;
bool bForceTrueColor = false; bool bForceTrueColor = false;
bool bDisableCopyFilter = false; bool bDisableCopyFilter = false;