From 63a52b9dc334dfe9c2f9f6894a82bd9563967548 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sat, 9 May 2026 17:58:45 -0700 Subject: [PATCH] config: Refactor `sample_count` to `antialiasing` setting Intended to allow for other anti-aliasing methods to be introduced --- CMakeModules/GenerateSettingKeys.cmake | 1 + src/android/app/src/main/jni/config.cpp | 2 +- src/citra_qt/configuration/config.cpp | 4 ++-- .../configuration/configure_enhancements.cpp | 20 ++++++++--------- .../configuration/configure_enhancements.ui | 16 +++++++------- src/common/settings.cpp | 4 ++-- src/common/settings.h | 22 ++++++++++++++++++- src/video_core/renderer_base.cpp | 2 +- .../renderer_vulkan/vk_rasterizer.cpp | 3 ++- 9 files changed, 48 insertions(+), 26 deletions(-) diff --git a/CMakeModules/GenerateSettingKeys.cmake b/CMakeModules/GenerateSettingKeys.cmake index 7aff65db5..c3074b36d 100644 --- a/CMakeModules/GenerateSettingKeys.cmake +++ b/CMakeModules/GenerateSettingKeys.cmake @@ -44,6 +44,7 @@ foreach(KEY IN ITEMS "use_display_refresh_rate_detection" "use_shader_jit" "resolution_factor" + "antialiasing" "frame_limit" "turbo_limit" "texture_filter" diff --git a/src/android/app/src/main/jni/config.cpp b/src/android/app/src/main/jni/config.cpp index 7411f1e62..874a0f605 100644 --- a/src/android/app/src/main/jni/config.cpp +++ b/src/android/app/src/main/jni/config.cpp @@ -150,7 +150,7 @@ void Config::ReadValues() { ReadSetting("Renderer", Settings::values.use_hw_shader); ReadSetting("Renderer", Settings::values.use_shader_jit); ReadSetting("Renderer", Settings::values.resolution_factor); - ReadSetting("Renderer", Settings::values.sample_count); + ReadSetting("Renderer", Settings::values.antialiasing); ReadSetting("Renderer", Settings::values.use_disk_shader_cache); ReadSetting("Renderer", Settings::values.use_vsync); ReadSetting("Renderer", Settings::values.texture_filter); diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index b545f0424..d57defb0f 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -716,7 +716,7 @@ void QtConfig::ReadRendererValues() { ReadGlobalSetting(Settings::values.use_vsync); ReadGlobalSetting(Settings::values.use_display_refresh_rate_detection); ReadGlobalSetting(Settings::values.resolution_factor); - ReadGlobalSetting(Settings::values.sample_count); + ReadGlobalSetting(Settings::values.antialiasing); ReadGlobalSetting(Settings::values.use_integer_scaling); ReadGlobalSetting(Settings::values.frame_limit); ReadGlobalSetting(Settings::values.turbo_limit); @@ -1266,7 +1266,7 @@ void QtConfig::SaveRendererValues() { WriteGlobalSetting(Settings::values.use_vsync); WriteGlobalSetting(Settings::values.use_display_refresh_rate_detection); WriteGlobalSetting(Settings::values.resolution_factor); - WriteGlobalSetting(Settings::values.sample_count); + WriteGlobalSetting(Settings::values.antialiasing); WriteGlobalSetting(Settings::values.use_integer_scaling); WriteGlobalSetting(Settings::values.frame_limit); WriteGlobalSetting(Settings::values.turbo_limit); diff --git a/src/citra_qt/configuration/configure_enhancements.cpp b/src/citra_qt/configuration/configure_enhancements.cpp index 01bd0cb8a..4d2d383f6 100644 --- a/src/citra_qt/configuration/configure_enhancements.cpp +++ b/src/citra_qt/configuration/configure_enhancements.cpp @@ -22,7 +22,7 @@ ConfigureEnhancements::ConfigureEnhancements(QWidget* parent) const bool res_scale_enabled = graphics_api != Settings::GraphicsAPI::Software; ui->resolution_factor_combobox->setEnabled(res_scale_enabled); const bool msaa_enabled = graphics_api == Settings::GraphicsAPI::Vulkan; - ui->sample_count_combobox->setEnabled(msaa_enabled); + ui->antialiasing_combobox->setEnabled(msaa_enabled); connect(ui->render_3d_combobox, qOverload(&QComboBox::currentIndexChanged), this, [this](int currentIndex) { @@ -46,8 +46,8 @@ void ConfigureEnhancements::SetConfiguration() { if (!Settings::IsConfiguringGlobal()) { ConfigurationShared::SetPerGameSetting(ui->resolution_factor_combobox, &Settings::values.resolution_factor); - ConfigurationShared::SetPerGameSetting(ui->sample_count_combobox, - &Settings::values.sample_count); + ConfigurationShared::SetPerGameSetting(ui->antialiasing_combobox, + &Settings::values.antialiasing); ConfigurationShared::SetPerGameSetting(ui->texture_filter_combobox, &Settings::values.texture_filter); ConfigurationShared::SetHighlight(ui->widget_texture_filter, @@ -55,8 +55,8 @@ void ConfigureEnhancements::SetConfiguration() { } else { ui->resolution_factor_combobox->setCurrentIndex( Settings::values.resolution_factor.GetValue()); - ui->sample_count_combobox->setCurrentIndex( - static_cast(Settings::values.sample_count.GetValue())); + ui->antialiasing_combobox->setCurrentIndex( + static_cast(Settings::values.antialiasing.GetValue())); ui->texture_filter_combobox->setCurrentIndex( static_cast(Settings::values.texture_filter.GetValue())); } @@ -117,8 +117,8 @@ void ConfigureEnhancements::RetranslateUI() { void ConfigureEnhancements::ApplyConfiguration() { ConfigurationShared::ApplyPerGameSetting(&Settings::values.resolution_factor, ui->resolution_factor_combobox); - ConfigurationShared::ApplyPerGameSetting(&Settings::values.sample_count, - ui->sample_count_combobox); + ConfigurationShared::ApplyPerGameSetting(&Settings::values.antialiasing, + ui->antialiasing_combobox); Settings::values.render_3d = static_cast(ui->render_3d_combobox->currentIndex()); Settings::values.swap_eyes_3d = ui->swap_eyes_3d->isChecked(); @@ -157,7 +157,7 @@ void ConfigureEnhancements::SetupPerGameUI() { // Block the global settings if a game is currently running that overrides them if (Settings::IsConfiguringGlobal()) { ui->widget_resolution->setEnabled(Settings::values.resolution_factor.UsingGlobal()); - ui->widget_sample_count->setEnabled(Settings::values.sample_count.UsingGlobal()); + ui->widget_antialiasing->setEnabled(Settings::values.antialiasing.UsingGlobal()); ui->widget_texture_filter->setEnabled(Settings::values.texture_filter.UsingGlobal()); ui->toggle_linear_filter->setEnabled(Settings::values.filter_mode.UsingGlobal()); ui->use_integer_scaling->setEnabled(Settings::values.use_integer_scaling.UsingGlobal()); @@ -199,8 +199,8 @@ void ConfigureEnhancements::SetupPerGameUI() { static_cast(Settings::values.resolution_factor.GetValue(true))); ConfigurationShared::SetColoredComboBox( - ui->sample_count_combobox, ui->widget_sample_count, - static_cast(Settings::values.sample_count.GetValue(true))); + ui->antialiasing_combobox, ui->widget_antialiasing, + static_cast(Settings::values.antialiasing.GetValue(true))); ConfigurationShared::SetColoredComboBox( ui->texture_filter_combobox, ui->widget_texture_filter, diff --git a/src/citra_qt/configuration/configure_enhancements.ui b/src/citra_qt/configuration/configure_enhancements.ui index f040fb7ce..833be5717 100644 --- a/src/citra_qt/configuration/configure_enhancements.ui +++ b/src/citra_qt/configuration/configure_enhancements.ui @@ -111,7 +111,7 @@ - + 0 @@ -126,32 +126,32 @@ 0 - + - Sample count + Anti-Aliasing - + - Native (x1) + None - x2 + MSAAx2 - x4 + MSAAx4 - x8 + MSAAx8 diff --git a/src/common/settings.cpp b/src/common/settings.cpp index 56a6200c9..747da6724 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -97,7 +97,7 @@ void LogSettings() { log_setting("Renderer_ShadersAccurateMul", values.shaders_accurate_mul.GetValue()); log_setting("Renderer_UseShaderJit", values.use_shader_jit.GetValue()); log_setting("Renderer_UseResolutionFactor", values.resolution_factor.GetValue()); - log_setting("Renderer_SampleCount", values.sample_count.GetValue()); + log_setting("Renderer_SampleCount", values.antialiasing.GetValue()); log_setting("Renderer_UseIntegerScaling", values.use_integer_scaling.GetValue()); log_setting("Renderer_FrameLimit", values.frame_limit.GetValue()); log_setting("Renderer_VSyncNew", values.use_vsync.GetValue()); @@ -214,7 +214,7 @@ void RestoreGlobalState(bool is_powered_on) { values.shaders_accurate_mul.SetGlobal(true); values.use_vsync.SetGlobal(true); values.resolution_factor.SetGlobal(true); - values.sample_count.SetGlobal(true); + values.antialiasing.SetGlobal(true); values.use_integer_scaling.SetGlobal(true); values.frame_limit.SetGlobal(true); values.texture_filter.SetGlobal(true); diff --git a/src/common/settings.h b/src/common/settings.h index b0d0ccb9e..6d93f4e14 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -103,6 +103,26 @@ enum class AudioEmulation : u32 { LLEMultithreaded = 2, }; +enum class AntiAliasingMethod : u32 { + None = 0, + MSAAx2 = 1, + MSAAx4 = 2, + MSAAx8 = 3, +}; + +static inline u8 GetAntiAliasingSampleCount(AntiAliasingMethod antialiasing_method) { + switch (antialiasing_method) { + case AntiAliasingMethod::MSAAx2: + return 2; + case AntiAliasingMethod::MSAAx4: + return 4; + case AntiAliasingMethod::MSAAx8: + return 8; + default: + return 1; + } +} + enum class TextureFilter : u32 { NoFilter = 0, Anime4K = 1, @@ -535,7 +555,7 @@ struct Values { true, Keys::use_display_refresh_rate_detection}; Setting use_shader_jit{true, Keys::use_shader_jit}; SwitchableSetting resolution_factor{1, 0, 10, Keys::resolution_factor}; - SwitchableSetting sample_count{0, 0, 3, "sample_count"}; + SwitchableSetting antialiasing{AntiAliasingMethod::None, "antialiasing"}; SwitchableSetting use_integer_scaling{false, Keys::use_integer_scaling}; SwitchableSetting frame_limit{100, 0, 1000, Keys::frame_limit}; SwitchableSetting turbo_limit{200, 0, 1000, Keys::turbo_limit}; diff --git a/src/video_core/renderer_base.cpp b/src/video_core/renderer_base.cpp index 8331664da..d81a031e9 100644 --- a/src/video_core/renderer_base.cpp +++ b/src/video_core/renderer_base.cpp @@ -37,7 +37,7 @@ u8 RendererBase::GetSampleCount() const { return 1; } - return static_cast(1u << Settings::values.sample_count.GetValue()); + return Settings::GetAntiAliasingSampleCount(Settings::values.antialiasing.GetValue()); } void RendererBase::UpdateCurrentFramebufferLayout(bool is_portrait_mode) { diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 0fb9ab449..2f995d270 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -778,7 +778,8 @@ bool RasterizerVulkan::AccelerateDisplay(const Pica::FramebufferConfig& config, src_params.stride = pixel_stride; src_params.is_tiled = false; src_params.pixel_format = VideoCore::PixelFormatFromGPUPixelFormat(config.color_format); - src_params.sample_count = (1u << Settings::values.sample_count.GetValue()); + src_params.sample_count = + Settings::GetAntiAliasingSampleCount(Settings::values.antialiasing.GetValue()); src_params.UpdateParams(); const auto [src_surface_id, src_rect] =