Add an option to present/skip presenting duplicate frames

Currently, we do not display every second frame in 25fps/30fps games
which run to vsync. This improves performance as there's less rendering
for the GPU to perform, but when combined with vsync, could cause frame
pacing issues.

This commit adds an option to force every frame generated by the console
to be displayed to the host, which may improve pacing for these games.
This commit is contained in:
Stenzek
2020-01-14 10:57:35 +10:00
parent efc1ee8e6a
commit 11ba623f26
11 changed files with 60 additions and 17 deletions

View File

@ -585,6 +585,7 @@ public final class SettingsFragmentPresenter
Setting gpuTextureDecoding = gfxSection.getSetting(SettingsFile.KEY_GPU_TEXTURE_DECODING);
Setting xfbToTexture = hacksSection.getSetting(SettingsFile.KEY_XFB_TEXTURE);
Setting immediateXfb = hacksSection.getSetting(SettingsFile.KEY_IMMEDIATE_XFB);
Setting skipDuplicateXfbs = hacksSection.getSetting(SettingsFile.KEY_SKIP_DUPLICATE_XFBS);
Setting fastDepth = gfxSection.getSetting(SettingsFile.KEY_FAST_DEPTH);
sl.add(new HeaderSetting(null, null, R.string.embedded_frame_buffer, 0));
@ -613,6 +614,9 @@ public final class SettingsFragmentPresenter
R.string.xfb_copy_method, R.string.xfb_copy_method_description, true, xfbToTexture));
sl.add(new CheckBoxSetting(SettingsFile.KEY_IMMEDIATE_XFB, Settings.SECTION_GFX_HACKS,
R.string.immediate_xfb, R.string.immediate_xfb_description, false, immediateXfb));
sl.add(new CheckBoxSetting(SettingsFile.KEY_SKIP_DUPLICATE_XFBS, Settings.SECTION_GFX_HACKS,
R.string.skip_duplicate_xfbs, R.string.skip_duplicate_xfbs_description, true,
skipDuplicateXfbs));
sl.add(new HeaderSetting(null, null, R.string.other, 0));
sl.add(new CheckBoxSetting(SettingsFile.KEY_FAST_DEPTH, Settings.SECTION_GFX_SETTINGS,

View File

@ -89,6 +89,7 @@ public final class SettingsFile
public static final String KEY_GPU_TEXTURE_DECODING = "EnableGPUTextureDecoding";
public static final String KEY_XFB_TEXTURE = "XFBToTextureEnable";
public static final String KEY_IMMEDIATE_XFB = "ImmediateXFBEnable";
public static final String KEY_SKIP_DUPLICATE_XFBS = "SkipDuplicateXFBs";
public static final String KEY_FAST_DEPTH = "FastDepthCalc";
public static final String KEY_ASPECT_RATIO = "AspectRatio";
public static final String KEY_SHADER_COMPILATION_MODE = "ShaderCompilationMode";

View File

@ -232,6 +232,8 @@
<string name="xfb_copy_method_description">Stores XFB Copies exclusively on the GPU, bypassing system memory. Causes graphical defects in a small number of games that need to readback from memory. If unsure, leave this checked.</string>
<string name="immediate_xfb">Immediately Present XFB</string>
<string name="immediate_xfb_description">Displays the XFB copies as soon as they are created, without waiting for scanout. Causes graphical defects in some games but reduces latency. If unsure, leave this unchecked.</string>
<string name="skip_duplicate_xfbs">Immediately Present XFB</string>
<string name="skip_duplicate_xfbs_description">Skips presentation of duplicate frames. This may improve performance on low-end devices, while making frame pacing less consistent. If unsure, leave this checked.</string>
<string name="disable_destination_alpha">Disable Destination Alpha</string>
<string name="disable_destination_alpha_description">Disables emulation of a hardware feature called destination alpha, which is used in many games for various effects.</string>
<string name="fast_depth_calculation">Fast Depth Calculation</string>