Merge pull request #13007 from t895/screen-bias
android: Expose FSR slider and add vertical alignment setting
This commit is contained in:
		@@ -24,7 +24,9 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
 | 
				
			|||||||
    THEME_MODE("theme_mode"),
 | 
					    THEME_MODE("theme_mode"),
 | 
				
			||||||
    OVERLAY_SCALE("control_scale"),
 | 
					    OVERLAY_SCALE("control_scale"),
 | 
				
			||||||
    OVERLAY_OPACITY("control_opacity"),
 | 
					    OVERLAY_OPACITY("control_opacity"),
 | 
				
			||||||
    LOCK_DRAWER("lock_drawer");
 | 
					    LOCK_DRAWER("lock_drawer"),
 | 
				
			||||||
 | 
					    VERTICAL_ALIGNMENT("vertical_alignment"),
 | 
				
			||||||
 | 
					    FSR_SHARPENING_SLIDER("fsr_sharpening_slider");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    override fun getInt(needsGlobal: Boolean): Int = NativeConfig.getInt(key, needsGlobal)
 | 
					    override fun getInt(needsGlobal: Boolean): Int = NativeConfig.getInt(key, needsGlobal)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -93,4 +93,15 @@ object Settings {
 | 
				
			|||||||
                entries.firstOrNull { it.int == int } ?: Unspecified
 | 
					                entries.firstOrNull { it.int == int } ?: Unspecified
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    enum class EmulationVerticalAlignment(val int: Int) {
 | 
				
			||||||
 | 
					        Top(1),
 | 
				
			||||||
 | 
					        Center(0),
 | 
				
			||||||
 | 
					        Bottom(2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        companion object {
 | 
				
			||||||
 | 
					            fun from(int: Int): EmulationVerticalAlignment =
 | 
				
			||||||
 | 
					                entries.firstOrNull { it.int == int } ?: Center
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -188,6 +188,16 @@ abstract class SettingsItem(
 | 
				
			|||||||
                    R.array.rendererScalingFilterValues
 | 
					                    R.array.rendererScalingFilterValues
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					            put(
 | 
				
			||||||
 | 
					                SliderSetting(
 | 
				
			||||||
 | 
					                    IntSetting.FSR_SHARPENING_SLIDER,
 | 
				
			||||||
 | 
					                    R.string.fsr_sharpness,
 | 
				
			||||||
 | 
					                    R.string.fsr_sharpness_description,
 | 
				
			||||||
 | 
					                    0,
 | 
				
			||||||
 | 
					                    100,
 | 
				
			||||||
 | 
					                    "%"
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
            put(
 | 
					            put(
 | 
				
			||||||
                SingleChoiceSetting(
 | 
					                SingleChoiceSetting(
 | 
				
			||||||
                    IntSetting.RENDERER_ANTI_ALIASING,
 | 
					                    IntSetting.RENDERER_ANTI_ALIASING,
 | 
				
			||||||
@@ -215,6 +225,15 @@ abstract class SettingsItem(
 | 
				
			|||||||
                    R.array.rendererAspectRatioValues
 | 
					                    R.array.rendererAspectRatioValues
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					            put(
 | 
				
			||||||
 | 
					                SingleChoiceSetting(
 | 
				
			||||||
 | 
					                    IntSetting.VERTICAL_ALIGNMENT,
 | 
				
			||||||
 | 
					                    R.string.vertical_alignment,
 | 
				
			||||||
 | 
					                    0,
 | 
				
			||||||
 | 
					                    R.array.verticalAlignmentEntries,
 | 
				
			||||||
 | 
					                    R.array.verticalAlignmentValues
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
            put(
 | 
					            put(
 | 
				
			||||||
                SwitchSetting(
 | 
					                SwitchSetting(
 | 
				
			||||||
                    BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE,
 | 
					                    BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -143,10 +143,12 @@ class SettingsFragmentPresenter(
 | 
				
			|||||||
            add(IntSetting.RENDERER_RESOLUTION.key)
 | 
					            add(IntSetting.RENDERER_RESOLUTION.key)
 | 
				
			||||||
            add(IntSetting.RENDERER_VSYNC.key)
 | 
					            add(IntSetting.RENDERER_VSYNC.key)
 | 
				
			||||||
            add(IntSetting.RENDERER_SCALING_FILTER.key)
 | 
					            add(IntSetting.RENDERER_SCALING_FILTER.key)
 | 
				
			||||||
 | 
					            add(IntSetting.FSR_SHARPENING_SLIDER.key)
 | 
				
			||||||
            add(IntSetting.RENDERER_ANTI_ALIASING.key)
 | 
					            add(IntSetting.RENDERER_ANTI_ALIASING.key)
 | 
				
			||||||
            add(IntSetting.MAX_ANISOTROPY.key)
 | 
					            add(IntSetting.MAX_ANISOTROPY.key)
 | 
				
			||||||
            add(IntSetting.RENDERER_SCREEN_LAYOUT.key)
 | 
					            add(IntSetting.RENDERER_SCREEN_LAYOUT.key)
 | 
				
			||||||
            add(IntSetting.RENDERER_ASPECT_RATIO.key)
 | 
					            add(IntSetting.RENDERER_ASPECT_RATIO.key)
 | 
				
			||||||
 | 
					            add(IntSetting.VERTICAL_ALIGNMENT.key)
 | 
				
			||||||
            add(BooleanSetting.PICTURE_IN_PICTURE.key)
 | 
					            add(BooleanSetting.PICTURE_IN_PICTURE.key)
 | 
				
			||||||
            add(BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.key)
 | 
					            add(BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.key)
 | 
				
			||||||
            add(BooleanSetting.RENDERER_FORCE_MAX_CLOCK.key)
 | 
					            add(BooleanSetting.RENDERER_FORCE_MAX_CLOCK.key)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,9 @@ import android.os.Handler
 | 
				
			|||||||
import android.os.Looper
 | 
					import android.os.Looper
 | 
				
			||||||
import android.os.PowerManager
 | 
					import android.os.PowerManager
 | 
				
			||||||
import android.os.SystemClock
 | 
					import android.os.SystemClock
 | 
				
			||||||
 | 
					import android.util.Rational
 | 
				
			||||||
import android.view.*
 | 
					import android.view.*
 | 
				
			||||||
 | 
					import android.widget.FrameLayout
 | 
				
			||||||
import android.widget.TextView
 | 
					import android.widget.TextView
 | 
				
			||||||
import android.widget.Toast
 | 
					import android.widget.Toast
 | 
				
			||||||
import androidx.activity.OnBackPressedCallback
 | 
					import androidx.activity.OnBackPressedCallback
 | 
				
			||||||
@@ -24,6 +26,7 @@ import androidx.core.content.res.ResourcesCompat
 | 
				
			|||||||
import androidx.core.graphics.Insets
 | 
					import androidx.core.graphics.Insets
 | 
				
			||||||
import androidx.core.view.ViewCompat
 | 
					import androidx.core.view.ViewCompat
 | 
				
			||||||
import androidx.core.view.WindowInsetsCompat
 | 
					import androidx.core.view.WindowInsetsCompat
 | 
				
			||||||
 | 
					import androidx.core.view.updateLayoutParams
 | 
				
			||||||
import androidx.core.view.updatePadding
 | 
					import androidx.core.view.updatePadding
 | 
				
			||||||
import androidx.drawerlayout.widget.DrawerLayout
 | 
					import androidx.drawerlayout.widget.DrawerLayout
 | 
				
			||||||
import androidx.drawerlayout.widget.DrawerLayout.DrawerListener
 | 
					import androidx.drawerlayout.widget.DrawerLayout.DrawerListener
 | 
				
			||||||
@@ -52,6 +55,7 @@ import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
 | 
				
			|||||||
import org.yuzu.yuzu_emu.features.settings.model.IntSetting
 | 
					import org.yuzu.yuzu_emu.features.settings.model.IntSetting
 | 
				
			||||||
import org.yuzu.yuzu_emu.features.settings.model.Settings
 | 
					import org.yuzu.yuzu_emu.features.settings.model.Settings
 | 
				
			||||||
import org.yuzu.yuzu_emu.features.settings.model.Settings.EmulationOrientation
 | 
					import org.yuzu.yuzu_emu.features.settings.model.Settings.EmulationOrientation
 | 
				
			||||||
 | 
					import org.yuzu.yuzu_emu.features.settings.model.Settings.EmulationVerticalAlignment
 | 
				
			||||||
import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile
 | 
					import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile
 | 
				
			||||||
import org.yuzu.yuzu_emu.model.DriverViewModel
 | 
					import org.yuzu.yuzu_emu.model.DriverViewModel
 | 
				
			||||||
import org.yuzu.yuzu_emu.model.Game
 | 
					import org.yuzu.yuzu_emu.model.Game
 | 
				
			||||||
@@ -617,7 +621,46 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private fun updateScreenLayout() {
 | 
					    private fun updateScreenLayout() {
 | 
				
			||||||
        binding.surfaceEmulation.setAspectRatio(null)
 | 
					        val verticalAlignment =
 | 
				
			||||||
 | 
					            EmulationVerticalAlignment.from(IntSetting.VERTICAL_ALIGNMENT.getInt())
 | 
				
			||||||
 | 
					        val aspectRatio = when (IntSetting.RENDERER_ASPECT_RATIO.getInt()) {
 | 
				
			||||||
 | 
					            0 -> Rational(16, 9)
 | 
				
			||||||
 | 
					            1 -> Rational(4, 3)
 | 
				
			||||||
 | 
					            2 -> Rational(21, 9)
 | 
				
			||||||
 | 
					            3 -> Rational(16, 10)
 | 
				
			||||||
 | 
					            else -> null // Best fit
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        when (verticalAlignment) {
 | 
				
			||||||
 | 
					            EmulationVerticalAlignment.Top -> {
 | 
				
			||||||
 | 
					                binding.surfaceEmulation.setAspectRatio(aspectRatio)
 | 
				
			||||||
 | 
					                val params = FrameLayout.LayoutParams(
 | 
				
			||||||
 | 
					                    ViewGroup.LayoutParams.MATCH_PARENT,
 | 
				
			||||||
 | 
					                    ViewGroup.LayoutParams.WRAP_CONTENT
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					                params.gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
 | 
				
			||||||
 | 
					                binding.surfaceEmulation.layoutParams = params
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            EmulationVerticalAlignment.Center -> {
 | 
				
			||||||
 | 
					                binding.surfaceEmulation.setAspectRatio(null)
 | 
				
			||||||
 | 
					                binding.surfaceEmulation.updateLayoutParams {
 | 
				
			||||||
 | 
					                    width = ViewGroup.LayoutParams.MATCH_PARENT
 | 
				
			||||||
 | 
					                    height = ViewGroup.LayoutParams.MATCH_PARENT
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            EmulationVerticalAlignment.Bottom -> {
 | 
				
			||||||
 | 
					                binding.surfaceEmulation.setAspectRatio(aspectRatio)
 | 
				
			||||||
 | 
					                val params =
 | 
				
			||||||
 | 
					                    FrameLayout.LayoutParams(
 | 
				
			||||||
 | 
					                        ViewGroup.LayoutParams.MATCH_PARENT,
 | 
				
			||||||
 | 
					                        ViewGroup.LayoutParams.WRAP_CONTENT
 | 
				
			||||||
 | 
					                    )
 | 
				
			||||||
 | 
					                params.gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL
 | 
				
			||||||
 | 
					                binding.surfaceEmulation.layoutParams = params
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        emulationState.updateSurface()
 | 
				
			||||||
        emulationActivity?.buildPictureInPictureParams()
 | 
					        emulationActivity?.buildPictureInPictureParams()
 | 
				
			||||||
        updateOrientation()
 | 
					        updateOrientation()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,6 +38,13 @@ struct Values {
 | 
				
			|||||||
                                         Settings::Specialization::Default,
 | 
					                                         Settings::Specialization::Default,
 | 
				
			||||||
                                         true,
 | 
					                                         true,
 | 
				
			||||||
                                         true};
 | 
					                                         true};
 | 
				
			||||||
 | 
					    Settings::Setting<s32> vertical_alignment{linkage,
 | 
				
			||||||
 | 
					                                              0,
 | 
				
			||||||
 | 
					                                              "vertical_alignment",
 | 
				
			||||||
 | 
					                                              Settings::Category::Android,
 | 
				
			||||||
 | 
					                                              Settings::Specialization::Default,
 | 
				
			||||||
 | 
					                                              true,
 | 
				
			||||||
 | 
					                                              true};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Settings::SwitchableSetting<std::string, false> driver_path{linkage, "", "driver_path",
 | 
					    Settings::SwitchableSetting<std::string, false> driver_path{linkage, "", "driver_path",
 | 
				
			||||||
                                                                Settings::Category::GpuDriver};
 | 
					                                                                Settings::Category::GpuDriver};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -292,4 +292,15 @@
 | 
				
			|||||||
        <item>5</item>
 | 
					        <item>5</item>
 | 
				
			||||||
    </integer-array>
 | 
					    </integer-array>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string-array name="verticalAlignmentEntries">
 | 
				
			||||||
 | 
					        <item>@string/top</item>
 | 
				
			||||||
 | 
					        <item>@string/center</item>
 | 
				
			||||||
 | 
					        <item>@string/bottom</item>
 | 
				
			||||||
 | 
					    </string-array>
 | 
				
			||||||
 | 
					    <integer-array name="verticalAlignmentValues">
 | 
				
			||||||
 | 
					        <item>1</item>
 | 
				
			||||||
 | 
					        <item>0</item>
 | 
				
			||||||
 | 
					        <item>2</item>
 | 
				
			||||||
 | 
					    </integer-array>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</resources>
 | 
					</resources>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -226,6 +226,8 @@
 | 
				
			|||||||
    <string name="renderer_screen_layout">Orientation</string>
 | 
					    <string name="renderer_screen_layout">Orientation</string>
 | 
				
			||||||
    <string name="renderer_aspect_ratio">Aspect ratio</string>
 | 
					    <string name="renderer_aspect_ratio">Aspect ratio</string>
 | 
				
			||||||
    <string name="renderer_scaling_filter">Window adapting filter</string>
 | 
					    <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="renderer_anti_aliasing">Anti-aliasing method</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">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>
 | 
					    <string name="renderer_force_max_clock_description">Forces the GPU to run at the maximum possible clocks (thermal constraints will still be applied).</string>
 | 
				
			||||||
@@ -558,6 +560,12 @@
 | 
				
			|||||||
    <string name="mute">Mute</string>
 | 
					    <string name="mute">Mute</string>
 | 
				
			||||||
    <string name="unmute">Unmute</string>
 | 
					    <string name="unmute">Unmute</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Emulation vertical alignment -->
 | 
				
			||||||
 | 
					    <string name="vertical_alignment">Vertical alignment</string>
 | 
				
			||||||
 | 
					    <string name="top">Top</string>
 | 
				
			||||||
 | 
					    <string name="center">Center</string>
 | 
				
			||||||
 | 
					    <string name="bottom">Bottom</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- Licenses screen strings -->
 | 
					    <!-- Licenses screen strings -->
 | 
				
			||||||
    <string name="licenses">Licenses</string>
 | 
					    <string name="licenses">Licenses</string>
 | 
				
			||||||
    <string name="license_fidelityfx_fsr" translatable="false">FidelityFX-FSR</string>
 | 
					    <string name="license_fidelityfx_fsr" translatable="false">FidelityFX-FSR</string>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user