video_core: Option to apply anisotropic filtering for all mipmap modes
This commit is contained in:
		| @@ -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); | ||||||
|   | |||||||
| @@ -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"}; | ||||||
|   | |||||||
| @@ -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(); | ||||||
|   | |||||||
| @@ -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); | ||||||
|   | |||||||
| @@ -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))); | ||||||
|   | |||||||
| @@ -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; | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -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> | ||||||
|   | |||||||
| @@ -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); | ||||||
|   | |||||||
| @@ -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. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user