Settings: Make Disable Interlacing a Deinterlacing mode

Saving that precious vertical space.
This commit is contained in:
Stenzek 2024-09-03 20:02:01 +10:00
parent 5024987b95
commit 44ba39e3ef
No known key found for this signature in database
12 changed files with 45 additions and 66 deletions

View File

@ -94207,7 +94207,7 @@ SLES-00211:
controllers:
- DigitalController
settings:
displayDeinterlacingMode: Disabled # Isn't actually interlaced, uses 240p buffers, they just left 480i enabled...
displayDeinterlacingMode: Progressive # Isn't actually interlaced, uses 240p buffers, they just left 480i enabled...
metadata:
publisher: "Electronic Arts"
developer: "Bullfrog Productions / Krisalis"
@ -94231,7 +94231,7 @@ SLPS-00587:
controllers:
- DigitalController
settings:
displayDeinterlacingMode: Disabled # Isn't actually interlaced, uses 240p buffers, they just left 480i enabled...
displayDeinterlacingMode: Progressive # Isn't actually interlaced, uses 240p buffers, they just left 480i enabled...
metadata:
publisher: "Electronic Arts"
developer: "Bullfrog Productions / Krisalis"
@ -94251,7 +94251,7 @@ SLUS-00029:
controllers:
- DigitalController
settings:
displayDeinterlacingMode: Disabled # Isn't actually interlaced, uses 240p buffers, they just left 480i enabled...
displayDeinterlacingMode: Progressive # Isn't actually interlaced, uses 240p buffers, they just left 480i enabled...
metadata:
publisher: "Electronic Arts"
developer: "Bullfrog Productions / Krisalis"
@ -116452,6 +116452,8 @@ SLPS-02587:
- AnalogController
- DigitalController
- NeGcon
settings:
displayDeinterlacingMode: Progressive # Only used in menus, MAD flickers with fading.
metadata:
publisher: "MTO"
developer: "MTO"
@ -116493,7 +116495,7 @@ SLPS-02951:
- DigitalController
- NeGcon
settings:
displayDeinterlacingMode: Blend # Only used in menus, MAD flickers with fading.
displayDeinterlacingMode: Progressive # Only used in menus, MAD flickers with fading.
metadata:
publisher: "MTO"
developer: "MTO"

View File

@ -4309,12 +4309,6 @@ void FullscreenUI::DrawDisplaySettingsPage()
FSUI_CSTR("Smooths out blockyness between colour transitions in 24-bit content, usually FMVs."),
"GPU", "ChromaSmoothing24Bit", false);
DrawToggleSetting(
bsi, FSUI_CSTR("Disable Interlacing"),
FSUI_CSTR("Disables interlaced rendering and display in the GPU. Some games can render in 480p this way, "
"but others will break."),
"GPU", "DisableInterlacing", true);
MenuHeading(FSUI_CSTR("Advanced"));
std::optional<SmallString> strvalue = bsi->GetOptionalSmallStringValue(
@ -7352,13 +7346,11 @@ TRANSLATE_NOOP("FullscreenUI", "Determines whether a prompt will be displayed to
TRANSLATE_NOOP("FullscreenUI", "Determines which algorithm is used to convert interlaced frames to progressive for display on your system.");
TRANSLATE_NOOP("FullscreenUI", "Device Settings");
TRANSLATE_NOOP("FullscreenUI", "Disable All Enhancements");
TRANSLATE_NOOP("FullscreenUI", "Disable Interlacing");
TRANSLATE_NOOP("FullscreenUI", "Disable Mailbox Presentation");
TRANSLATE_NOOP("FullscreenUI", "Disable Subdirectory Scanning");
TRANSLATE_NOOP("FullscreenUI", "Disable on 2D Polygons");
TRANSLATE_NOOP("FullscreenUI", "Disabled");
TRANSLATE_NOOP("FullscreenUI", "Disables dithering and uses the full 8 bits per channel of color information.");
TRANSLATE_NOOP("FullscreenUI", "Disables interlaced rendering and display in the GPU. Some games can render in 480p this way, but others will break.");
TRANSLATE_NOOP("FullscreenUI", "Disc {} | {}");
TRANSLATE_NOOP("FullscreenUI", "Discord Server");
TRANSLATE_NOOP("FullscreenUI", "Display Settings");

View File

@ -479,7 +479,10 @@ void GameDatabase::Entry::ApplySettings(Settings& settings, bool display_osd_mes
settings.display_crop_mode = display_crop_mode.value();
}
if (display_deinterlacing_mode.has_value())
// Don't set to optimal if disable-all-enhancements is enabled.
if (display_deinterlacing_mode.has_value() &&
(display_deinterlacing_mode.value() != DisplayDeinterlacingMode::Progressive ||
!g_settings.disable_all_enhancements))
{
if (display_osd_messages && settings.display_deinterlacing_mode != display_deinterlacing_mode.value())
{
@ -527,12 +530,12 @@ void GameDatabase::Entry::ApplySettings(Settings& settings, bool display_osd_mes
settings.gpu_accurate_blending = true;
}
if (HasTrait(Trait::ForceInterlacing))
if (HasTrait(Trait::ForceInterlacing) && settings.display_deinterlacing_mode == DisplayDeinterlacingMode::Progressive)
{
if (display_osd_messages && settings.gpu_disable_interlacing)
if (display_osd_messages)
APPEND_MESSAGE(TRANSLATE_SV("GameDatabase", "Interlaced rendering enabled."));
settings.gpu_disable_interlacing = false;
settings.display_deinterlacing_mode = DisplayDeinterlacingMode::Adaptive;
}
if (HasTrait(Trait::DisableTrueColor))

View File

@ -87,7 +87,7 @@ GPU::~GPU()
bool GPU::Initialize()
{
m_force_progressive_scan = g_settings.gpu_disable_interlacing;
m_force_progressive_scan = (g_settings.display_deinterlacing_mode == DisplayDeinterlacingMode::Progressive);
m_force_frame_timings = g_settings.gpu_force_video_timing;
s_crtc_tick_event.Activate();
m_fifo_size = g_settings.gpu_fifo_size;
@ -115,7 +115,7 @@ void GPU::UpdateSettings(const Settings& old_settings)
{
FlushRender();
m_force_progressive_scan = g_settings.gpu_disable_interlacing;
m_force_progressive_scan = (g_settings.display_deinterlacing_mode == DisplayDeinterlacingMode::Progressive);
m_fifo_size = g_settings.gpu_fifo_size;
m_max_run_ahead = g_settings.gpu_max_run_ahead;
@ -1876,6 +1876,7 @@ bool GPU::CompileDisplayPipelines(bool display, bool deinterlace, bool chroma_sm
switch (g_settings.display_deinterlacing_mode)
{
case DisplayDeinterlacingMode::Disabled:
case DisplayDeinterlacingMode::Progressive:
break;
case DisplayDeinterlacingMode::Weave:

View File

@ -442,8 +442,7 @@ void ImGuiManager::DrawEnhancementsOverlay()
text.append(" TrueCol");
}
}
if (g_settings.gpu_disable_interlacing)
text.append(" ForceProg");
text.append_format(" DI={}", Settings::GetDisplayDeinterlacingModeName(g_settings.display_deinterlacing_mode));
if (g_settings.gpu_force_video_timing == ForceVideoTimingMode::NTSC && System::GetRegion() == ConsoleRegion::PAL)
text.append(" PAL60");
if (g_settings.gpu_force_video_timing == ForceVideoTimingMode::PAL && System::GetRegion() != ConsoleRegion::PAL)

View File

@ -230,7 +230,6 @@ void Settings::Load(SettingsInterface& si, SettingsInterface& controller_si)
ParseGPUWireframeMode(
si.GetStringValue("GPU", "WireframeMode", GetGPUWireframeModeName(DEFAULT_GPU_WIREFRAME_MODE)).c_str())
.value_or(DEFAULT_GPU_WIREFRAME_MODE);
gpu_disable_interlacing = si.GetBoolValue("GPU", "DisableInterlacing", true);
gpu_force_video_timing =
ParseForceVideoTimingName(
si.GetStringValue("GPU", "ForceVideoTiming", GetForceVideoTimingName(DEFAULT_FORCE_VIDEO_TIMING_MODE)).c_str())
@ -250,9 +249,9 @@ void Settings::Load(SettingsInterface& si, SettingsInterface& controller_si)
SetPGXPDepthClearThreshold(si.GetFloatValue("GPU", "PGXPDepthClearThreshold", DEFAULT_GPU_PGXP_DEPTH_THRESHOLD));
display_deinterlacing_mode =
ParseDisplayDeinterlacingMode(si.GetStringValue("Display", "DeinterlacingMode",
GetDisplayDeinterlacingModeName(DEFAULT_DISPLAY_DEINTERLACING_MODE))
.c_str())
ParseDisplayDeinterlacingMode(
si.GetStringValue("GPU", "DeinterlacingMode", GetDisplayDeinterlacingModeName(DEFAULT_DISPLAY_DEINTERLACING_MODE))
.c_str())
.value_or(DEFAULT_DISPLAY_DEINTERLACING_MODE);
display_crop_mode =
ParseDisplayCropMode(
@ -539,7 +538,6 @@ void Settings::Save(SettingsInterface& si, bool ignore_base) const
si.SetStringValue("GPU", "DownsampleMode", GetDownsampleModeName(gpu_downsample_mode));
si.SetUIntValue("GPU", "DownsampleScale", gpu_downsample_scale);
si.SetStringValue("GPU", "WireframeMode", GetGPUWireframeModeName(gpu_wireframe_mode));
si.SetBoolValue("GPU", "DisableInterlacing", gpu_disable_interlacing);
si.SetStringValue("GPU", "ForceVideoTiming", GetForceVideoTimingName(gpu_force_video_timing));
si.SetBoolValue("GPU", "WidescreenHack", gpu_widescreen_hack);
si.SetBoolValue("GPU", "ChromaSmoothing24Bit", display_24bit_chroma_smoothing);
@ -555,7 +553,7 @@ void Settings::Save(SettingsInterface& si, bool ignore_base) const
si.SetBoolValue("GPU", "PGXPDisableOn2DPolygons", gpu_pgxp_disable_2d);
si.SetFloatValue("GPU", "PGXPDepthClearThreshold", GetPGXPDepthClearThreshold());
si.SetStringValue("Display", "DeinterlacingMode", GetDisplayDeinterlacingModeName(display_deinterlacing_mode));
si.SetStringValue("GPU", "DeinterlacingMode", GetDisplayDeinterlacingModeName(display_deinterlacing_mode));
si.SetStringValue("Display", "CropMode", GetDisplayCropModeName(display_crop_mode));
si.SetIntValue("Display", "ActiveStartOffset", display_active_start_offset);
si.SetIntValue("Display", "ActiveEndOffset", display_active_end_offset);
@ -748,10 +746,10 @@ void Settings::FixIncompatibleSettings(bool display_osd_messages)
g_settings.gpu_texture_filter = GPUTextureFilter::Nearest;
g_settings.gpu_sprite_texture_filter = GPUTextureFilter::Nearest;
g_settings.gpu_line_detect_mode = GPULineDetectMode::Disabled;
g_settings.gpu_disable_interlacing = false;
g_settings.gpu_force_video_timing = ForceVideoTimingMode::Disabled;
g_settings.gpu_widescreen_hack = false;
g_settings.gpu_pgxp_enable = false;
g_settings.display_deinterlacing_mode = DisplayDeinterlacingMode::Adaptive;
g_settings.display_24bit_chroma_smoothing = false;
g_settings.cdrom_read_speedup = 1;
g_settings.cdrom_seek_speedup = 1;
@ -1323,12 +1321,14 @@ static constexpr const std::array s_display_deinterlacing_mode_names = {
"Weave",
"Blend",
"Adaptive",
"Progressive",
};
static constexpr const std::array s_display_deinterlacing_mode_display_names = {
TRANSLATE_NOOP("DisplayDeinterlacingMode", "Disabled (Flickering)"),
TRANSLATE_NOOP("DisplayDeinterlacingMode", "Weave (Combing)"),
TRANSLATE_NOOP("DisplayDeinterlacingMode", "Blend (Blur)"),
TRANSLATE_NOOP("DisplayDeinterlacingMode", "Adaptive (FastMAD)"),
TRANSLATE_NOOP("DisplayDeinterlacingMode", "Progressive (Optimal)"),
};
std::optional<DisplayDeinterlacingMode> Settings::ParseDisplayDeinterlacingMode(const char* str)

View File

@ -121,7 +121,6 @@ struct Settings
bool gpu_scaled_dithering : 1 = true;
bool gpu_force_round_texcoords : 1 = false;
bool gpu_accurate_blending : 1 = false;
bool gpu_disable_interlacing : 1 = true;
bool gpu_widescreen_hack : 1 = false;
bool gpu_pgxp_enable : 1 = false;
bool gpu_pgxp_culling : 1 = true;
@ -490,7 +489,7 @@ struct Settings
static constexpr CPUFastmemMode DEFAULT_CPU_FASTMEM_MODE = CPUFastmemMode::LUT;
#endif
static constexpr DisplayDeinterlacingMode DEFAULT_DISPLAY_DEINTERLACING_MODE = DisplayDeinterlacingMode::Adaptive;
static constexpr DisplayDeinterlacingMode DEFAULT_DISPLAY_DEINTERLACING_MODE = DisplayDeinterlacingMode::Progressive;
static constexpr DisplayCropMode DEFAULT_DISPLAY_CROP_MODE = DisplayCropMode::Overscan;
static constexpr DisplayAspectRatio DEFAULT_DISPLAY_ASPECT_RATIO = DisplayAspectRatio::Auto;
static constexpr DisplayAlignment DEFAULT_DISPLAY_ALIGNMENT = DisplayAlignment::Center;

View File

@ -4303,7 +4303,6 @@ void System::CheckForSettingsChanges(const Settings& old_settings)
g_settings.gpu_texture_filter != old_settings.gpu_texture_filter ||
g_settings.gpu_sprite_texture_filter != old_settings.gpu_sprite_texture_filter ||
g_settings.gpu_line_detect_mode != old_settings.gpu_line_detect_mode ||
g_settings.gpu_disable_interlacing != old_settings.gpu_disable_interlacing ||
g_settings.gpu_force_video_timing != old_settings.gpu_force_video_timing ||
g_settings.gpu_downsample_mode != old_settings.gpu_downsample_mode ||
g_settings.gpu_downsample_scale != old_settings.gpu_downsample_scale ||
@ -4586,8 +4585,8 @@ void System::WarnAboutUnsafeSettings()
{
APPEND_SUBMESSAGE(TRANSLATE_SV("System", "Texture filtering disabled."));
}
if (g_settings.gpu_disable_interlacing)
APPEND_SUBMESSAGE(TRANSLATE_SV("System", "Interlaced rendering and display enabled."));
if (g_settings.display_deinterlacing_mode == DisplayDeinterlacingMode::Progressive)
APPEND_SUBMESSAGE(TRANSLATE_SV("System", "Interlaced rendering enabled."));
if (g_settings.gpu_force_video_timing != ForceVideoTimingMode::Disabled)
APPEND_SUBMESSAGE(TRANSLATE_SV("System", "Video timings set to default."));
if (g_settings.gpu_widescreen_hack)

View File

@ -84,6 +84,7 @@ enum class DisplayDeinterlacingMode : u8
Weave,
Blend,
Adaptive,
Progressive,
Count
};

View File

@ -66,7 +66,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
"CustomAspectRatioDenominator", 1);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.widescreenHack, "GPU", "WidescreenHack", false);
SettingWidgetBinder::BindWidgetToEnumSetting(
sif, m_ui.displayDeinterlacing, "Display", "DeinterlacingMode", &Settings::ParseDisplayDeinterlacingMode,
sif, m_ui.displayDeinterlacing, "GPU", "DeinterlacingMode", &Settings::ParseDisplayDeinterlacingMode,
&Settings::GetDisplayDeinterlacingModeName, Settings::DEFAULT_DISPLAY_DEINTERLACING_MODE);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.displayCropMode, "Display", "CropMode",
&Settings::ParseDisplayCropMode, &Settings::GetDisplayCropModeName,
@ -79,7 +79,6 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
Settings::DEFAULT_FORCE_VIDEO_TIMING_MODE);
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.gpuDownsampleScale, "GPU", "DownsampleScale", 1);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.trueColor, "GPU", "TrueColor", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.disableInterlacing, "GPU", "DisableInterlacing", true);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.pgxpEnable, "GPU", "PGXPEnable", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.pgxpDepthBuffer, "GPU", "PGXPDepthBuffer", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.force43For24Bit, "Display", "Force4_3For24Bit", false);
@ -104,8 +103,6 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
!m_dialog->hasGameTrait(GameDatabase::Trait::DisableTextureFiltering));
SettingWidgetBinder::SetAvailability(m_ui.trueColor, !m_dialog->hasGameTrait(GameDatabase::Trait::DisableTrueColor));
SettingWidgetBinder::SetAvailability(m_ui.pgxpEnable, !m_dialog->hasGameTrait(GameDatabase::Trait::DisablePGXP));
SettingWidgetBinder::SetAvailability(m_ui.disableInterlacing,
!m_dialog->hasGameTrait(GameDatabase::Trait::ForceInterlacing));
SettingWidgetBinder::SetAvailability(m_ui.widescreenHack,
!m_dialog->hasGameTrait(GameDatabase::Trait::DisableWidescreen));
@ -325,8 +322,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
m_ui.displayDeinterlacing, tr("Deinterlacing"),
QString::fromUtf8(Settings::GetDisplayDeinterlacingModeName(Settings::DEFAULT_DISPLAY_DEINTERLACING_MODE)),
tr("Determines which algorithm is used to convert interlaced frames to progressive for display on your system. "
"Generally, the \"Disable Interlacing\" enhancement provides better quality output, but some games require "
"interlaced rendering."));
"Using progressive rendering provides the best quality output, but some games require interlaced rendering."));
dialog->registerWidgetHelp(
m_ui.displayCropMode, tr("Crop"),
QString::fromUtf8(Settings::GetDisplayCropModeDisplayName(Settings::DEFAULT_DISPLAY_CROP_MODE)),
@ -366,12 +362,6 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
tr("Switches back to 4:3 display aspect ratio when displaying 24-bit content, usually FMVs."));
dialog->registerWidgetHelp(m_ui.chromaSmoothingFor24Bit, tr("FMV Chroma Smoothing"), tr("Unchecked"),
tr("Smooths out blockyness between colour transitions in 24-bit content, usually FMVs."));
dialog->registerWidgetHelp(
m_ui.disableInterlacing, tr("Disable Interlacing"), tr("Checked"),
tr(
"Forces the rendering and display of frames to progressive mode. <br>This removes the \"combing\" effect seen in "
"480i games by rendering them in 480p. Usually safe to enable.<br><b><u>May not be compatible with all "
"games.</u></b>"));
// Advanced Tab

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>584</width>
<height>450</height>
<height>477</height>
</rect>
</property>
<property name="windowTitle">
@ -203,17 +203,10 @@
</item>
<item row="9" column="0" colspan="2">
<layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="1">
<widget class="QCheckBox" name="pgxpDepthBuffer">
<item row="0" column="1">
<widget class="QCheckBox" name="widescreenHack">
<property name="text">
<string>PGXP Depth Buffer (Low Compatibility)</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="disableInterlacing">
<property name="text">
<string>Disable Interlacing</string>
<string>Widescreen Rendering</string>
</property>
</widget>
</item>
@ -224,13 +217,6 @@
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="trueColor">
<property name="text">
<string>True Color Rendering</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="chromaSmoothingFor24Bit">
<property name="text">
@ -238,10 +224,10 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="widescreenHack">
<item row="0" column="0">
<widget class="QCheckBox" name="trueColor">
<property name="text">
<string>Widescreen Rendering</string>
<string>True Color Rendering</string>
</property>
</widget>
</item>
@ -252,6 +238,13 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="pgxpDepthBuffer">
<property name="text">
<string>PGXP Depth Buffer (Low Compatibility)</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="1">

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>780</width>
<height>650</height>
<height>655</height>
</rect>
</property>
<property name="sizePolicy">