video_core: Option to apply anisotropic filtering for all mipmap modes

master
Wollnashorn 2023-06-12 15:59:44 +07:00
parent 333f792e10
commit 0eacf547c0
9 changed files with 37 additions and 1 deletions

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

@ -483,6 +483,8 @@ struct Values {
AstcRecompression::Uncompressed, AstcRecompression::Uncompressed, AstcRecompression::Bc3,
"astc_recompression"};
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_green{0, "bg_green"};

@ -62,7 +62,8 @@ std::array<float, 4> TSCEntry::BorderColor() 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;
}
const auto anisotropic_settings = Settings::values.max_anisotropy.GetValue();

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

@ -31,6 +31,7 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {
ui->use_asynchronous_shaders->setEnabled(runtime_lock);
ui->anisotropic_filtering_combobox->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->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(
Settings::values.enable_compute_pipelines.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()) {
ui->gpu_accuracy->setCurrentIndex(
@ -94,6 +97,9 @@ void ConfigureGraphicsAdvanced::ApplyConfiguration() {
enable_compute_pipelines);
ConfigurationShared::ApplyPerGameSetting(&Settings::values.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) {
@ -130,6 +136,8 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
Settings::values.enable_compute_pipelines.UsingGlobal());
ui->use_video_framerate_checkbox->setEnabled(
Settings::values.use_video_framerate.UsingGlobal());
ui->use_aggressive_anisotropic_filtering->setEnabled(
Settings::values.use_aggressive_anisotropic_filtering.UsingGlobal());
return;
}
@ -157,6 +165,9 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
ConfigurationShared::SetColoredTristate(ui->use_video_framerate_checkbox,
Settings::values.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(
ui->gpu_accuracy, ui->label_gpu_accuracy,
static_cast<int>(Settings::values.gpu_accuracy.GetValue(true)));

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

@ -260,6 +260,19 @@ Compute pipelines are always enabled on all other drivers.</string>
</layout>
</widget>
</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>
</widget>
</item>

@ -321,6 +321,7 @@ void Config::ReadValues() {
ReadSetting("Renderer", Settings::values.astc_recompression);
ReadSetting("Renderer", Settings::values.use_fast_gpu_time);
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_green);

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