feat: Add FSR 2.0 scaling filter option

- Add FSR2 to ScalingFilter enum alongside existing FSR
- Implement FSR2 classes for both Vulkan and OpenGL renderers
- Add fsr2_quality_mode setting with 4 quality levels (Quality, Balanced, Performance, Ultra Performance)
- Integrate FSR2 into present pipeline for both renderers
- Add UI support for FSR2 option in scaling filter dropdown
- Add FSR2 quality mode setting with dropdown selection
- Update translations and Android strings for new options
- Default to Performance mode for optimal balance

This provides users with FSR 2.0 as a scaling option, offering different
quality/performance characteristics compared to FSR 1.0. The implementation
uses quality-based sharpening values and integrates seamlessly with the
existing rendering pipeline.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
This commit is contained in:
Zephyron
2025-07-29 15:21:36 +10:00
parent d38b58ca77
commit 3b8da3d80a
21 changed files with 553 additions and 1 deletions

View File

@@ -28,6 +28,7 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
LOCK_DRAWER("lock_drawer"),
VERTICAL_ALIGNMENT("vertical_alignment"),
FSR_SHARPENING_SLIDER("fsr_sharpening_slider"),
FSR2_QUALITY_MODE("fsr2_quality_mode"),
// Zep Zone settings
MEMORY_LAYOUT_MODE("memory_layout_mode"),

View File

@@ -245,6 +245,15 @@ abstract class SettingsItem(
units = "%"
)
)
put(
SingleChoiceSetting(
IntSetting.FSR2_QUALITY_MODE,
titleId = R.string.fsr2_quality_mode,
descriptionId = R.string.fsr2_quality_mode_description,
choicesId = R.array.fsr2QualityModeNames,
valuesId = R.array.fsr2QualityModeValues
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_ANTI_ALIASING,

View File

@@ -182,6 +182,7 @@ class SettingsFragmentPresenter(
add(IntSetting.RENDERER_VSYNC.key)
add(IntSetting.RENDERER_SCALING_FILTER.key)
add(IntSetting.FSR_SHARPENING_SLIDER.key)
add(IntSetting.FSR2_QUALITY_MODE.key)
add(IntSetting.RENDERER_ANTI_ALIASING.key)
add(IntSetting.MAX_ANISOTROPY.key)
add(IntSetting.RENDERER_SCREEN_LAYOUT.key)

View File

@@ -228,6 +228,12 @@
<string name="renderer_scaling_filter">Filtre de fenêtre adaptatif</string>
<string name="fsr_sharpness">Netteté FSR</string>
<string name="fsr_sharpness_description">Détermine à quel point l\'image sera affinée lors de l\'utilisation du contraste dynamique FSR.</string>
<string name="fsr2_quality_mode">Mode qualité FSR 2.0</string>
<string name="fsr2_quality_mode_description">Sélectionne le mode qualité pour l\'upscaling FSR 2.0. Qualité offre une meilleure qualité d\'image, Performance offre de meilleures performances.</string>
<string name="fsr2_quality_quality">Qualité</string>
<string name="fsr2_quality_balanced">Équilibré</string>
<string name="fsr2_quality_performance">Performance</string>
<string name="fsr2_quality_ultra_performance">Performance Ultra</string>
<string name="renderer_anti_aliasing">Méthode d\'anticrénelage</string>
<string name="renderer_force_max_clock">Forcer les fréquences maximales (Adreno uniquement)</string>
<string name="renderer_force_max_clock_description">Forcer le GPU à fonctionner à ses fréquences maximales possibles (les contraintes thermiques seront toujours appliquées).</string>
@@ -558,6 +564,7 @@
<string name="scaling_filter_gaussian">Gaussien</string>
<string name="scaling_filter_scale_force">ScaleForce</string>
<string name="scaling_filter_fsr">AMD FidelityFX™ Super Resolution</string>
<string name="scaling_filter_fsr2">AMD FidelityFX™ Super Resolution 2.0</string>
<!-- Anti-Aliasing -->
<string name="anti_aliasing_none">Aucune</string>

View File

@@ -160,6 +160,7 @@
<item>@string/scaling_filter_gaussian</item>
<item>@string/scaling_filter_scale_force</item>
<item>@string/scaling_filter_fsr</item>
<item>@string/scaling_filter_fsr2</item>
</string-array>
<integer-array name="rendererScalingFilterValues">
@@ -169,6 +170,21 @@
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</integer-array>
<string-array name="fsr2QualityModeNames">
<item>@string/fsr2_quality_quality</item>
<item>@string/fsr2_quality_balanced</item>
<item>@string/fsr2_quality_performance</item>
<item>@string/fsr2_quality_ultra_performance</item>
</string-array>
<integer-array name="fsr2QualityModeValues">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
</integer-array>
<string-array name="rendererAntiAliasingNames">

View File

@@ -229,6 +229,12 @@
<string name="renderer_scaling_filter">Window adapting filter</string>
<string name="fsr_sharpness">FSR sharpness</string>
<string name="fsr_sharpness_description">Determines how sharpened the image will look while using FSR\'s dynamic contrast</string>
<string name="fsr2_quality_mode">FSR 2.0 Quality Mode</string>
<string name="fsr2_quality_mode_description">Selects the quality mode for FSR 2.0 upscaling. Quality provides better image quality, Performance provides better performance.</string>
<string name="fsr2_quality_quality">Quality</string>
<string name="fsr2_quality_balanced">Balanced</string>
<string name="fsr2_quality_performance">Performance</string>
<string name="fsr2_quality_ultra_performance">Ultra Performance</string>
<string name="renderer_anti_aliasing">Anti-aliasing method</string>
<string name="renderer_force_max_clock">Force maximum clocks (Adreno only)</string>
<string name="renderer_force_max_clock_description">Forces the GPU to run at the maximum possible clocks (thermal constraints will still be applied).</string>
@@ -587,6 +593,7 @@
<string name="scaling_filter_gaussian">Gaussian</string>
<string name="scaling_filter_scale_force">ScaleForce</string>
<string name="scaling_filter_fsr">AMD FidelityFX™ Super Resolution</string>
<string name="scaling_filter_fsr2">AMD FidelityFX™ Super Resolution 2.0</string>
<!-- Anti-Aliasing -->
<string name="anti_aliasing_none">None</string>