forked from ShuriZma/suyu
1
0
Fork 0

video_core: Option to apply anisotropic filtering for all mipmap modes

This commit is contained in:
Wollnashorn 2023-06-12 15:59:44 +02:00
parent 333f792e10
commit 0eacf547c0
9 changed files with 37 additions and 1 deletions

View File

@ -236,6 +236,7 @@ void RestoreGlobalState(bool is_powered_on) {
values.bg_blue.SetGlobal(true); values.bg_blue.SetGlobal(true);
values.enable_compute_pipelines.SetGlobal(true); values.enable_compute_pipelines.SetGlobal(true);
values.use_video_framerate.SetGlobal(true); values.use_video_framerate.SetGlobal(true);
values.use_aggressive_anisotropic_filtering.SetGlobal(true);
// System // System
values.language_index.SetGlobal(true); values.language_index.SetGlobal(true);

View File

@ -483,6 +483,8 @@ struct Values {
AstcRecompression::Uncompressed, AstcRecompression::Uncompressed, AstcRecompression::Bc3, AstcRecompression::Uncompressed, AstcRecompression::Uncompressed, AstcRecompression::Bc3,
"astc_recompression"}; "astc_recompression"};
SwitchableSetting<bool> use_video_framerate{false, "use_video_framerate"}; SwitchableSetting<bool> use_video_framerate{false, "use_video_framerate"};
SwitchableSetting<bool> use_aggressive_anisotropic_filtering{
false, "use_aggressive_anisotropic_filtering"};
SwitchableSetting<u8> bg_red{0, "bg_red"}; SwitchableSetting<u8> bg_red{0, "bg_red"};
SwitchableSetting<u8> bg_green{0, "bg_green"}; SwitchableSetting<u8> bg_green{0, "bg_green"};

View File

@ -62,7 +62,8 @@ std::array<float, 4> TSCEntry::BorderColor() const noexcept {
} }
float TSCEntry::MaxAnisotropy() const noexcept { float TSCEntry::MaxAnisotropy() const noexcept {
if (max_anisotropy == 0 && mipmap_filter != TextureMipmapFilter::Linear) { if (max_anisotropy == 0 && (mipmap_filter != TextureMipmapFilter::Linear &&
!Settings::values.use_aggressive_anisotropic_filtering)) {
return 1.0f; return 1.0f;
} }
const auto anisotropic_settings = Settings::values.max_anisotropy.GetValue(); const auto anisotropic_settings = Settings::values.max_anisotropy.GetValue();

View File

@ -761,6 +761,7 @@ void Config::ReadRendererValues() {
ReadGlobalSetting(Settings::values.use_vulkan_driver_pipeline_cache); ReadGlobalSetting(Settings::values.use_vulkan_driver_pipeline_cache);
ReadGlobalSetting(Settings::values.enable_compute_pipelines); ReadGlobalSetting(Settings::values.enable_compute_pipelines);
ReadGlobalSetting(Settings::values.use_video_framerate); ReadGlobalSetting(Settings::values.use_video_framerate);
ReadGlobalSetting(Settings::values.use_aggressive_anisotropic_filtering);
ReadGlobalSetting(Settings::values.bg_red); ReadGlobalSetting(Settings::values.bg_red);
ReadGlobalSetting(Settings::values.bg_green); ReadGlobalSetting(Settings::values.bg_green);
ReadGlobalSetting(Settings::values.bg_blue); ReadGlobalSetting(Settings::values.bg_blue);
@ -1417,6 +1418,7 @@ void Config::SaveRendererValues() {
WriteGlobalSetting(Settings::values.use_vulkan_driver_pipeline_cache); WriteGlobalSetting(Settings::values.use_vulkan_driver_pipeline_cache);
WriteGlobalSetting(Settings::values.enable_compute_pipelines); WriteGlobalSetting(Settings::values.enable_compute_pipelines);
WriteGlobalSetting(Settings::values.use_video_framerate); WriteGlobalSetting(Settings::values.use_video_framerate);
WriteGlobalSetting(Settings::values.use_aggressive_anisotropic_filtering);
WriteGlobalSetting(Settings::values.bg_red); WriteGlobalSetting(Settings::values.bg_red);
WriteGlobalSetting(Settings::values.bg_green); WriteGlobalSetting(Settings::values.bg_green);
WriteGlobalSetting(Settings::values.bg_blue); WriteGlobalSetting(Settings::values.bg_blue);

View File

@ -31,6 +31,7 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {
ui->use_asynchronous_shaders->setEnabled(runtime_lock); ui->use_asynchronous_shaders->setEnabled(runtime_lock);
ui->anisotropic_filtering_combobox->setEnabled(runtime_lock); ui->anisotropic_filtering_combobox->setEnabled(runtime_lock);
ui->enable_compute_pipelines_checkbox->setEnabled(runtime_lock); ui->enable_compute_pipelines_checkbox->setEnabled(runtime_lock);
ui->use_aggressive_anisotropic_filtering->setEnabled(runtime_lock);
ui->async_present->setChecked(Settings::values.async_presentation.GetValue()); ui->async_present->setChecked(Settings::values.async_presentation.GetValue());
ui->renderer_force_max_clock->setChecked(Settings::values.renderer_force_max_clock.GetValue()); ui->renderer_force_max_clock->setChecked(Settings::values.renderer_force_max_clock.GetValue());
@ -43,6 +44,8 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {
ui->enable_compute_pipelines_checkbox->setChecked( ui->enable_compute_pipelines_checkbox->setChecked(
Settings::values.enable_compute_pipelines.GetValue()); Settings::values.enable_compute_pipelines.GetValue());
ui->use_video_framerate_checkbox->setChecked(Settings::values.use_video_framerate.GetValue()); ui->use_video_framerate_checkbox->setChecked(Settings::values.use_video_framerate.GetValue());
ui->use_aggressive_anisotropic_filtering->setChecked(
Settings::values.use_aggressive_anisotropic_filtering.GetValue());
if (Settings::IsConfiguringGlobal()) { if (Settings::IsConfiguringGlobal()) {
ui->gpu_accuracy->setCurrentIndex( ui->gpu_accuracy->setCurrentIndex(
@ -94,6 +97,9 @@ void ConfigureGraphicsAdvanced::ApplyConfiguration() {
enable_compute_pipelines); enable_compute_pipelines);
ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_video_framerate, ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_video_framerate,
ui->use_video_framerate_checkbox, use_video_framerate); ui->use_video_framerate_checkbox, use_video_framerate);
ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_aggressive_anisotropic_filtering,
ui->use_aggressive_anisotropic_filtering,
use_aggressive_anisotropic_filtering);
} }
void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) { void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) {
@ -130,6 +136,8 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
Settings::values.enable_compute_pipelines.UsingGlobal()); Settings::values.enable_compute_pipelines.UsingGlobal());
ui->use_video_framerate_checkbox->setEnabled( ui->use_video_framerate_checkbox->setEnabled(
Settings::values.use_video_framerate.UsingGlobal()); Settings::values.use_video_framerate.UsingGlobal());
ui->use_aggressive_anisotropic_filtering->setEnabled(
Settings::values.use_aggressive_anisotropic_filtering.UsingGlobal());
return; return;
} }
@ -157,6 +165,9 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
ConfigurationShared::SetColoredTristate(ui->use_video_framerate_checkbox, ConfigurationShared::SetColoredTristate(ui->use_video_framerate_checkbox,
Settings::values.use_video_framerate, Settings::values.use_video_framerate,
use_video_framerate); use_video_framerate);
ConfigurationShared::SetColoredTristate(ui->use_aggressive_anisotropic_filtering,
Settings::values.use_aggressive_anisotropic_filtering,
use_aggressive_anisotropic_filtering);
ConfigurationShared::SetColoredComboBox( ConfigurationShared::SetColoredComboBox(
ui->gpu_accuracy, ui->label_gpu_accuracy, ui->gpu_accuracy, ui->label_gpu_accuracy,
static_cast<int>(Settings::values.gpu_accuracy.GetValue(true))); static_cast<int>(Settings::values.gpu_accuracy.GetValue(true)));

View File

@ -48,6 +48,7 @@ private:
ConfigurationShared::CheckState use_vulkan_driver_pipeline_cache; ConfigurationShared::CheckState use_vulkan_driver_pipeline_cache;
ConfigurationShared::CheckState enable_compute_pipelines; ConfigurationShared::CheckState enable_compute_pipelines;
ConfigurationShared::CheckState use_video_framerate; ConfigurationShared::CheckState use_video_framerate;
ConfigurationShared::CheckState use_aggressive_anisotropic_filtering;
const Core::System& system; const Core::System& system;
}; };

View File

@ -260,6 +260,19 @@ Compute pipelines are always enabled on all other drivers.</string>
</layout> </layout>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="use_aggressive_anisotropic_filtering">
<property name="toolTip">
<string>Enable this option for a more aggressive approach to applying Anisotropic Filtering to textures.
By toggling this, Anisotropic Filtering is added to textures with both nearest and linear mipmapping modes.
This may result in improved visual quality for a wider range of textures, but can also introduce artifacts in
some titles.</string>
</property>
<property name="text">
<string>Apply Anisotropic Filtering for all mipmap modes</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>

View File

@ -321,6 +321,7 @@ void Config::ReadValues() {
ReadSetting("Renderer", Settings::values.astc_recompression); ReadSetting("Renderer", Settings::values.astc_recompression);
ReadSetting("Renderer", Settings::values.use_fast_gpu_time); ReadSetting("Renderer", Settings::values.use_fast_gpu_time);
ReadSetting("Renderer", Settings::values.use_vulkan_driver_pipeline_cache); ReadSetting("Renderer", Settings::values.use_vulkan_driver_pipeline_cache);
ReadSetting("Renderer", Settings::values.use_aggressive_anisotropic_filtering);
ReadSetting("Renderer", Settings::values.bg_red); ReadSetting("Renderer", Settings::values.bg_red);
ReadSetting("Renderer", Settings::values.bg_green); ReadSetting("Renderer", Settings::values.bg_green);

View File

@ -325,6 +325,10 @@ aspect_ratio =
# 0: Default, 1: 2x, 2: 4x, 3: 8x, 4: 16x # 0: Default, 1: 2x, 2: 4x, 3: 8x, 4: 16x
max_anisotropy = max_anisotropy =
# Apply Anisotropic Filtering to all mipmap modes.
# 0 (default): Off, 1: On
use_aggressive_anisotropic_filtering =
# Whether to enable VSync or not. # Whether to enable VSync or not.
# OpenGL: Values other than 0 enable VSync # OpenGL: Values other than 0 enable VSync
# Vulkan: FIFO is selected if the requested mode is not supported by the driver. # Vulkan: FIFO is selected if the requested mode is not supported by the driver.