UI: Integrated Motion Adaptive Deinterlacing with UI

[SETTINGSVERSION+]
Added entries in the drop-down menu for Adaptive Deinterlacing
Re-arranged deinterlacing mode order in the drop-down menu.
"Auto" mode defaults to MAD.
Adjusted GameDB entries to be compatible with the new order of entries.
Improved Bob description for WX
This commit is contained in:
sideprojectslab 2022-11-11 09:24:08 +01:00 committed by refractionpcsx2
parent f10e7f4ab7
commit 0f42eab7a4
11 changed files with 121 additions and 96 deletions

View File

@ -425,7 +425,7 @@ SCAJ-10008:
name: "Taiko no Tatsujin - Atsumare! Matsuri da!! Yondaime" name: "Taiko no Tatsujin - Atsumare! Matsuri da!! Yondaime"
region: "NTSC-Unk" region: "NTSC-Unk"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SCAJ-10009: SCAJ-10009:
name: "Psikyo Shooting Collection Vol.1 - Strikers 1-2" name: "Psikyo Shooting Collection Vol.1 - Strikers 1-2"
@ -440,31 +440,31 @@ SCAJ-10011:
name: "Taiko no Tatsujin - Go! Go! Godaime" name: "Taiko no Tatsujin - Go! Go! Godaime"
region: "NTSC-Unk" region: "NTSC-Unk"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SCAJ-10012: SCAJ-10012:
name: "Taiko Drum Master" name: "Taiko Drum Master"
region: "NTSC-Unk" region: "NTSC-Unk"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SCAJ-10013: SCAJ-10013:
name: "Taiko no Tatsujin - Tobikkiri! Anime Special" name: "Taiko no Tatsujin - Tobikkiri! Anime Special"
region: "NTSC-Unk" region: "NTSC-Unk"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SCAJ-10014: SCAJ-10014:
name: "Taiko no Tatsujin - Wai Wai Happy! Rokudaime" name: "Taiko no Tatsujin - Wai Wai Happy! Rokudaime"
region: "NTSC-Unk" region: "NTSC-Unk"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SCAJ-10015: SCAJ-10015:
name: "Taiko no Tatsujin - Doka! to Oomori Nanadaime" name: "Taiko no Tatsujin - Doka! to Oomori Nanadaime"
region: "NTSC-Unk" region: "NTSC-Unk"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SCAJ-20001: SCAJ-20001:
name: "Ratchet & Clank" name: "Ratchet & Clank"
@ -3170,7 +3170,7 @@ SCES-51164:
name: "Mark of Kri, The" name: "Mark of Kri, The"
region: "PAL-M5" region: "PAL-M5"
gsHWFixes: gsHWFixes:
deinterlace: 3 # Game requires bob deinterlacing when auto. deinterlace: 4 # Game requires bob deinterlacing when auto.
SCES-51176: SCES-51176:
name: "Disney's Treasure Planet" name: "Disney's Treasure Planet"
region: "PAL-M4" region: "PAL-M4"
@ -6471,7 +6471,7 @@ SCPS-51011:
region: "NTSC-J" region: "NTSC-J"
compat: 5 compat: 5
gsHWFixes: gsHWFixes:
deinterlace: 6 # Fixes blurriness. deinterlace: 7 # Fixes blurriness.
SCPS-51012: SCPS-51012:
name: "Gigantic Drive" name: "Gigantic Drive"
region: "NTSC-J" region: "NTSC-J"
@ -6992,7 +6992,7 @@ SCUS-97140:
region: "NTSC-U" region: "NTSC-U"
compat: 5 compat: 5
gsHWFixes: gsHWFixes:
deinterlace: 3 # Game requires bob deinterlacing when auto. deinterlace: 4 # Game requires bob deinterlacing when auto.
patches: patches:
DBD09DD4: DBD09DD4:
content: |- content: |-
@ -7218,7 +7218,7 @@ SCUS-97201:
name: "Mark of Kri, The" name: "Mark of Kri, The"
region: "NTSC-U" region: "NTSC-U"
gsHWFixes: gsHWFixes:
deinterlace: 3 # Game requires bob deinterlacing when auto. deinterlace: 4 # Game requires bob deinterlacing when auto.
SCUS-97203: SCUS-97203:
name: "Wild ARMs 3" name: "Wild ARMs 3"
region: "NTSC-U" region: "NTSC-U"
@ -7300,7 +7300,7 @@ SCUS-97222:
name: "Mark of Kri [Demo]" name: "Mark of Kri [Demo]"
region: "NTSC-U" region: "NTSC-U"
gsHWFixes: gsHWFixes:
deinterlace: 3 # Game requires bob deinterlacing when auto. deinterlace: 4 # Game requires bob deinterlacing when auto.
SCUS-97223: SCUS-97223:
name: "NFL GameDay 2003 [Demo]" name: "NFL GameDay 2003 [Demo]"
region: "NTSC-U" region: "NTSC-U"
@ -11965,7 +11965,7 @@ SLES-51235:
region: "PAL-M5" region: "PAL-M5"
compat: 5 compat: 5
gsHWFixes: gsHWFixes:
deinterlace: 6 # Fixes blurriness. deinterlace: 7 # Fixes blurriness.
SLES-51236: SLES-51236:
name: "Gungrave" name: "Gungrave"
region: "PAL-M3" region: "PAL-M3"
@ -17330,7 +17330,7 @@ SLES-53621:
region: "PAL-M5" region: "PAL-M5"
compat: 5 compat: 5
gsHWFixes: gsHWFixes:
deinterlace: 3 # Game requires bob deinterlacing when auto. deinterlace: 4 # Game requires bob deinterlacing when auto.
halfPixelOffset: 1 # Fixes misalignment/bloom when upscaling. halfPixelOffset: 1 # Fixes misalignment/bloom when upscaling.
SLES-53623: SLES-53623:
name: "SpongeBob SquarePants - Battle for Bikini Bottom" name: "SpongeBob SquarePants - Battle for Bikini Bottom"
@ -19569,7 +19569,7 @@ SLES-54548:
name: "Cocoto Fishing Master" name: "Cocoto Fishing Master"
region: "PAL-M4" region: "PAL-M4"
gsHWFixes: gsHWFixes:
deinterlace: 6 # Fixes blurriness. deinterlace: 7 # Fixes blurriness.
halfPixelOffset: 1 # Fixes blur. halfPixelOffset: 1 # Fixes blur.
SLES-54549: SLES-54549:
name: "Crazy Frog Racer 2" name: "Crazy Frog Racer 2"
@ -26604,7 +26604,7 @@ SLPM-64521:
region: "NTSC-K" region: "NTSC-K"
compat: 5 compat: 5
gsHWFixes: gsHWFixes:
deinterlace: 6 # Fixes blurriness. deinterlace: 7 # Fixes blurriness.
SLPM-64522: SLPM-64522:
name: "La Pucelle" name: "La Pucelle"
region: "NTSC-K" region: "NTSC-K"
@ -27733,7 +27733,7 @@ SLPM-65310:
name: "Mark of Kri, The" name: "Mark of Kri, The"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 3 # Game requires bob deinterlacing when auto. deinterlace: 4 # Game requires bob deinterlacing when auto.
SLPM-65311: SLPM-65311:
name: "Violet no Atelier - Gramnad no Renkinjutsushi" name: "Violet no Atelier - Gramnad no Renkinjutsushi"
region: "NTSC-J" region: "NTSC-J"
@ -31207,7 +31207,7 @@ SLPM-66327:
name: "Wallace & Gromit - The Curse of the Were-Rabbit" name: "Wallace & Gromit - The Curse of the Were-Rabbit"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 3 # Game requires bob deinterlacing when auto. deinterlace: 4 # Game requires bob deinterlacing when auto.
halfPixelOffset: 1 # Fixes misalignment/bloom when upscaling. halfPixelOffset: 1 # Fixes misalignment/bloom when upscaling.
SLPM-66328: SLPM-66328:
name: "Call of Duty 2 - Big Red One" name: "Call of Duty 2 - Big Red One"
@ -34743,7 +34743,7 @@ SLPS-20198:
region: "NTSC-J" region: "NTSC-J"
compat: 5 compat: 5
gsHWFixes: gsHWFixes:
deinterlace: 6 # Fixes blurriness. deinterlace: 7 # Fixes blurriness.
SLPS-20199: SLPS-20199:
name: "F1 2002" name: "F1 2002"
region: "NTSC-J" region: "NTSC-J"
@ -35146,13 +35146,13 @@ SLPS-20382:
name: "Taiko no Tatsujin - Atsumare! Matsuri da!! Yondaime [with Tatacon]" name: "Taiko no Tatsujin - Atsumare! Matsuri da!! Yondaime [with Tatacon]"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-20383: SLPS-20383:
name: "Taiko no Tatsujin - Atsumare! Matsuri da!! Yondaime" name: "Taiko no Tatsujin - Atsumare! Matsuri da!! Yondaime"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-20384: SLPS-20384:
name: "Hayarigami - Keishichou Kaii Jiken File" name: "Hayarigami - Keishichou Kaii Jiken File"
@ -35194,13 +35194,13 @@ SLPS-20399:
name: "Taiko no Tatsujin - Go! Go! Godaime [with Tatacon]" name: "Taiko no Tatsujin - Go! Go! Godaime [with Tatacon]"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-20400: SLPS-20400:
name: "Taiko no Tatsujin - Go! Go! Godaime" name: "Taiko no Tatsujin - Go! Go! Godaime"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-20401: SLPS-20401:
name: "Tecmo Hit Parade" name: "Tecmo Hit Parade"
@ -35241,14 +35241,14 @@ SLPS-20413:
name: "Taiko no Tatsujin - Taiko Drum Master [with Tatacon]" name: "Taiko no Tatsujin - Taiko Drum Master [with Tatacon]"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-20414: SLPS-20414:
name: "Taiko no Tatsujin - Taiko Drum Master" name: "Taiko no Tatsujin - Taiko Drum Master"
region: "NTSC-J" region: "NTSC-J"
compat: 5 compat: 5
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-20416: SLPS-20416:
name: "Inyou Taisenki - Byakko Enbu [with EyeToy]" name: "Inyou Taisenki - Byakko Enbu [with EyeToy]"
@ -35277,13 +35277,13 @@ SLPS-20424:
name: "Taiko no Tatsujin - Tobikkiri! Anime Special [with Tatacon]" name: "Taiko no Tatsujin - Tobikkiri! Anime Special [with Tatacon]"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-20425: SLPS-20425:
name: "Taiko no Tatsujin - Tobikkiri! Anime Special" name: "Taiko no Tatsujin - Tobikkiri! Anime Special"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-20426: SLPS-20426:
name: "Dreamworks Madagascar" name: "Dreamworks Madagascar"
@ -35345,13 +35345,13 @@ SLPS-20450:
name: "Taiko no Tatsujin - Wai Wai Happy! Rokudaime [with Tatacon]" name: "Taiko no Tatsujin - Wai Wai Happy! Rokudaime [with Tatacon]"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-20451: SLPS-20451:
name: "Taiko no Tatsujin - Wai Wai Happy! Rokudaime" name: "Taiko no Tatsujin - Wai Wai Happy! Rokudaime"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-20452: SLPS-20452:
name: "Simple 2000 Series Ultimate Vol. 30 - Kourin! Zokusha Goddo!" name: "Simple 2000 Series Ultimate Vol. 30 - Kourin! Zokusha Goddo!"
@ -35472,13 +35472,13 @@ SLPS-20485:
name: "Taiko no Tatsujin - Doka! to Oomori Nanadaime [with Tatacon]" name: "Taiko no Tatsujin - Doka! to Oomori Nanadaime [with Tatacon]"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-20486: SLPS-20486:
name: "Taiko no Tatsujin - Doka! to Oomori Nanadaime" name: "Taiko no Tatsujin - Doka! to Oomori Nanadaime"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-20487: SLPS-20487:
name: "Pachi-Slot King! Kagaku Ninja-Tai Gatchaman" name: "Pachi-Slot King! Kagaku Ninja-Tai Gatchaman"
@ -38987,7 +38987,7 @@ SLPS-73107:
name: "Taiko no Tatsujin - Go! Go! Godaime [PlayStation 2 The Best]" name: "Taiko no Tatsujin - Go! Go! Godaime [PlayStation 2 The Best]"
region: "NTSC-J" region: "NTSC-J"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLPS-73108: SLPS-73108:
name: "Phantom Brave [PlayStation 2 The Best]" name: "Phantom Brave [PlayStation 2 The Best]"
@ -41510,7 +41510,7 @@ SLUS-20475:
name: "Dual Hearts" name: "Dual Hearts"
region: "NTSC-U" region: "NTSC-U"
gsHWFixes: gsHWFixes:
deinterlace: 5 # Game requires blend tff deinterlacing when auto. deinterlace: 6 # Game requires blend tff deinterlacing when auto.
compat: 5 compat: 5
SLUS-20476: SLUS-20476:
name: "NBA 2K3 - Sega Sports" name: "NBA 2K3 - Sega Sports"
@ -43036,7 +43036,7 @@ SLUS-20800:
name: "Taiko Drum Master" name: "Taiko Drum Master"
region: "NTSC-U" region: "NTSC-U"
gsHWFixes: gsHWFixes:
deinterlace: 4 # Game requires bob bff deinterlacing when auto. deinterlace: 5 # Game requires bob bff deinterlacing when auto.
alignSprite: 1 # Fixes vertical lines. alignSprite: 1 # Fixes vertical lines.
SLUS-20801: SLUS-20801:
name: "Midway Arcade Treasures" name: "Midway Arcade Treasures"
@ -45678,7 +45678,7 @@ SLUS-21312:
region: "NTSC-U" region: "NTSC-U"
compat: 5 compat: 5
gsHWFixes: gsHWFixes:
deinterlace: 3 # Game requires bob deinterlacing when auto. deinterlace: 4 # Game requires bob deinterlacing when auto.
halfPixelOffset: 1 # Fixes misalignment/bloom when upscaling. halfPixelOffset: 1 # Fixes misalignment/bloom when upscaling.
SLUS-21313: SLUS-21313:
name: "Friends - The One with all the Trivia" name: "Friends - The One with all the Trivia"
@ -47380,7 +47380,7 @@ SLUS-21663:
region: "NTSC-U" region: "NTSC-U"
compat: 5 compat: 5
gsHWFixes: gsHWFixes:
deinterlace: 6 # Fixes blurriness. deinterlace: 7 # Fixes blurriness.
halfPixelOffset: 1 # Fixes blur. halfPixelOffset: 1 # Fixes blur.
SLUS-21664: SLUS-21664:
name: "Sims 2, The - Castaway" name: "Sims 2, The - Castaway"

View File

@ -75,7 +75,7 @@ static const char* s_anisotropic_filtering_entries[] = {QT_TRANSLATE_NOOP("Graph
QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "8x"), QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "16x"), nullptr}; QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "8x"), QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "16x"), nullptr};
static const char* s_anisotropic_filtering_values[] = {"0", "2", "4", "8", "16", nullptr}; static const char* s_anisotropic_filtering_values[] = {"0", "2", "4", "8", "16", nullptr};
static constexpr int DEFAULT_INTERLACE_MODE = 7; static constexpr int DEFAULT_INTERLACE_MODE = 0;
static constexpr int DEFAULT_TV_SHADER_MODE = 0; static constexpr int DEFAULT_TV_SHADER_MODE = 0;
GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget* parent) GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget* parent)

View File

@ -58,7 +58,7 @@
<item> <item>
<widget class="QTabWidget" name="hardwareRendererGroup"> <widget class="QTabWidget" name="hardwareRendererGroup">
<property name="currentIndex"> <property name="currentIndex">
<number>2</number> <number>0</number>
</property> </property>
<property name="documentMode"> <property name="documentMode">
<bool>true</bool> <bool>true</bool>
@ -149,6 +149,11 @@
</item> </item>
<item row="3" column="1"> <item row="3" column="1">
<widget class="QComboBox" name="interlacing"> <widget class="QComboBox" name="interlacing">
<item>
<property name="text">
<string>Automatic (Default)</string>
</property>
</item>
<item> <item>
<property name="text"> <property name="text">
<string>None</string> <string>None</string>
@ -186,7 +191,12 @@
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Automatic (Default)</string> <string>Adaptive (Top Field First)</string>
</property>
</item>
<item>
<property name="text">
<string>Adaptive (Bottom Field First)</string>
</property> </property>
</item> </item>
</widget> </widget>

View File

@ -130,6 +130,7 @@ enum class GSRendererType : s8
enum class GSInterlaceMode : u8 enum class GSInterlaceMode : u8
{ {
Automatic,
Off, Off,
WeaveTFF, WeaveTFF,
WeaveBFF, WeaveBFF,
@ -137,7 +138,8 @@ enum class GSInterlaceMode : u8
BobBFF, BobBFF,
BlendTFF, BlendTFF,
BlendBFF, BlendBFF,
Automatic, AdaptiveTFF,
AdaptiveBFF,
Count Count
}; };

View File

@ -140,9 +140,18 @@ The clamp modes are also numerically based.
### GS Hardware General Fixes ### GS Hardware General Fixes
* conservativeFramebuffer [`0` or `1`] {Off or On} Default: On (`1`) * conservativeFramebuffer
* texturePreloading [`0` or `1` or `2`] {None, Partial or Full Hash Cache} Default: None (`0`) [`0` or `1`]
* deinterlace [Value between `0` to `7`] {Off, WeaveTFF, WeaveBFF, BobTFF, BobBFF, BlendTFF, BlendBFF, Automatic} Default: Automatic (No value, looks up GameDB) {Off or On}
Default: On (`1`)
* texturePreloading
[`0` or `1` or `2`]
{None, Partial or Full Hash Cache}
Default: None (`0`)
* deinterlace
[Value between `0` to `9`]
{Automatic Off, WeaveTFF, WeaveBFF, BobTFF, BobBFF, BlendTFF, BlendBFF, AdaptiveTFF, AdaptiveBFF}
Default: Automatic (No value, looks up GameDB)
### GS Hardware Renderer Fixes ### GS Hardware Renderer Fixes

View File

@ -52,7 +52,7 @@
#include <ShlObj.h> #include <ShlObj.h>
#endif #endif
static constexpr u32 SETTINGS_VERSION = 1; static constexpr u32 SETTINGS_VERSION = 2;
namespace CommonHost namespace CommonHost
{ {

View File

@ -1310,14 +1310,16 @@ void GSApp::Init()
// The null renderer goes last, it has use for benchmarking purposes in a release build // The null renderer goes last, it has use for benchmarking purposes in a release build
m_gs_renderers.push_back(GSSetting(static_cast<u32>(GSRendererType::Null), "Null", "")); m_gs_renderers.push_back(GSSetting(static_cast<u32>(GSRendererType::Null), "Null", ""));
m_gs_deinterlace.push_back(GSSetting(0, "None", "")); m_gs_deinterlace.push_back(GSSetting(0, "Automatic", "Default"));
m_gs_deinterlace.push_back(GSSetting(1, "Weave tff", "saw-tooth")); m_gs_deinterlace.push_back(GSSetting(1, "None", ""));
m_gs_deinterlace.push_back(GSSetting(2, "Weave bff", "saw-tooth")); m_gs_deinterlace.push_back(GSSetting(2, "Weave tff", "saw-tooth"));
m_gs_deinterlace.push_back(GSSetting(3, "Bob tff", "use blend if shaking")); m_gs_deinterlace.push_back(GSSetting(3, "Weave bff", "saw-tooth"));
m_gs_deinterlace.push_back(GSSetting(4, "Bob bff", "use blend if shaking")); m_gs_deinterlace.push_back(GSSetting(4, "Bob tff", "use adaptive or blend if shaking"));
m_gs_deinterlace.push_back(GSSetting(5, "Blend tff", "slight blur, 1/2 fps")); m_gs_deinterlace.push_back(GSSetting(5, "Bob bff", "use adaptive or blend if shaking"));
m_gs_deinterlace.push_back(GSSetting(6, "Blend bff", "slight blur, 1/2 fps")); m_gs_deinterlace.push_back(GSSetting(6, "Blend tff", "slight blur, 1/2 fps"));
m_gs_deinterlace.push_back(GSSetting(7, "Automatic", "Default")); m_gs_deinterlace.push_back(GSSetting(7, "Blend bff", "slight blur, 1/2 fps"));
m_gs_deinterlace.push_back(GSSetting(8, "Adaptive tff", "minor artifacts"));
m_gs_deinterlace.push_back(GSSetting(9, "Adaptive bff", "minor artifacts"));
m_gs_upscale_multiplier.push_back(GSSetting(1, "Native", "PS2")); m_gs_upscale_multiplier.push_back(GSSetting(1, "Native", "PS2"));
m_gs_upscale_multiplier.push_back(GSSetting(2, "2x Native", "~720p")); m_gs_upscale_multiplier.push_back(GSSetting(2, "2x Native", "~720p"));

View File

@ -364,42 +364,42 @@ void GSDevice::Merge(GSTexture* sTex[3], GSVector4* sRect, GSVector4* dRect, con
void GSDevice::Interlace(const GSVector2i& ds, int field, int mode, float yoffset) void GSDevice::Interlace(const GSVector2i& ds, int field, int mode, float yoffset)
{ {
static int bufIdx = 0; static int bufIdx = 0;
float offset = yoffset * static_cast<float>(field);
offset = GSConfig.DisableInterlaceOffset ? 0.0f : offset;
if (mode == 0) // weave switch (mode)
{ {
const float offset = yoffset * static_cast<float>(field); case 0: // weave
ResizeTarget(&m_weavebob, ds.x, ds.y); ResizeTarget(&m_weavebob, ds.x, ds.y);
DoInterlace(m_merge, m_weavebob, field, false, GSConfig.DisableInterlaceOffset ? 0.0f : offset, 0); DoInterlace(m_merge, m_weavebob, field, false, offset, 0);
m_current = m_weavebob; m_current = m_weavebob;
} break;
else if (mode == 1) // bob case 1: // bob
{ // Field is reversed here as we are countering the bounce.
// Field is reversed here as we are countering the bounce. ResizeTarget(&m_weavebob, ds.x, ds.y);
ResizeTarget(&m_weavebob, ds.x, ds.y); DoInterlace(m_merge, m_weavebob, 3, true, yoffset * (1 - field), 0);
DoInterlace(m_merge, m_weavebob, 3, true, yoffset * (1-field), 0); m_current = m_weavebob;
m_current = m_weavebob; break;
} case 2: //Blend
else if (mode == 2) // FastMAD Motion Adaptive Deinterlacing ResizeTarget(&m_weavebob, ds.x, ds.y);
{ DoInterlace(m_merge, m_weavebob, field, false, offset, 0);
bufIdx++; ResizeTarget(&m_blend, ds.x, ds.y);
bufIdx &= ~(field ^ 1); DoInterlace(m_weavebob, m_blend, 2, false, 0, 0);
bufIdx |= (field); m_current = m_blend;
bufIdx &= 3; break;
case 3: // FastMAD Motion Adaptive Deinterlacing
float offset = (yoffset * field); bufIdx++;
offset = GSConfig.DisableInterlaceOffset ? 0.0f : offset; bufIdx &= ~1;
bufIdx |= field;
ResizeTarget(&m_mad, ds.x, ds.y * 2.0f); bufIdx &= 3;
DoInterlace(m_merge, m_mad, 4, false, offset, bufIdx); ResizeTarget(&m_mad, ds.x, ds.y * 2.0f);
ResizeTarget(&m_blend, ds.x, ds.y); DoInterlace(m_merge, m_mad, 4, false, offset, bufIdx);
DoInterlace(m_mad, m_blend, 5, false, 0, bufIdx); ResizeTarget(&m_weavebob, ds.x, ds.y);
DoInterlace(m_mad, m_weavebob, 5, false, 0, bufIdx);
m_current = m_weavebob;
m_current = m_blend; break;
} default:
else m_current = m_merge;
{
m_current = m_merge;
} }
} }

View File

@ -179,13 +179,13 @@ bool GSRenderer::Merge(int field)
float offset = is_bob ? (tex[1] ? tex[1]->GetScale().y : tex[0]->GetScale().y) : 0.0f; float offset = is_bob ? (tex[1] ? tex[1]->GetScale().y : tex[0]->GetScale().y) : 0.0f;
int field2 = 0; int field2 = 0;
int mode = 2; int mode = 3;
// FFMD (half frames) requires blend deinterlacing, so automatically use that. Same when SCANMSK is used but not blended in the merge circuit (Alpine Racer 3) // FFMD (half frames) requires blend deinterlacing, so automatically use that. Same when SCANMSK is used but not blended in the merge circuit (Alpine Racer 3)
if (GSConfig.InterlaceMode != GSInterlaceMode::Automatic || (!m_regs->SMODE2.FFMD && !scanmask_frame)) if (GSConfig.InterlaceMode != GSInterlaceMode::Automatic || (!m_regs->SMODE2.FFMD && !scanmask_frame))
{ {
field2 = ((static_cast<int>(GSConfig.InterlaceMode) - 1) & 1); field2 = ((static_cast<int>(GSConfig.InterlaceMode) - 2) & 1);
mode = ((static_cast<int>(GSConfig.InterlaceMode) - 1) >> 1); mode = ((static_cast<int>(GSConfig.InterlaceMode) - 2) >> 1);
} }
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)

View File

@ -722,9 +722,10 @@ void GSDevice12::DoMerge(GSTexture* sTex[3], GSVector4* sRect, GSTexture* dTex,
void GSDevice12::DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset, int bufIdx) void GSDevice12::DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset, int bufIdx)
{ {
const GSVector4 ss = GSVector4(sTex->GetSize()); const GSVector4 ss = GSVector4(sTex->GetSize());
const GSVector4 ds = GSVector4(dTex->GetSize()); const GSVector2i ds_i = dTex->GetSize();
const GSVector2i ds_i(dTex->GetSize()); const GSVector4 ds = GSVector4(ds_i);
const GSVector4 sRect(0, 0, 1, 1); const GSVector4 sRect(0, 0, 1, 1);
const GSVector4 dRect(0.0f, yoffset, ds.x, ds.y + yoffset); const GSVector4 dRect(0.0f, yoffset, ds.x, ds.y + yoffset);
@ -733,7 +734,7 @@ void GSDevice12::DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool
cb.ZrH = GSVector4(static_cast<float>(bufIdx), 1.0f / ss.y, ss.y, MAD_SENSITIVITY); cb.ZrH = GSVector4(static_cast<float>(bufIdx), 1.0f / ss.y, ss.y, MAD_SENSITIVITY);
GL_PUSH("DoInterlace %dx%d Shader:%d Linear:%d", size.x, size.y, shader, linear); GL_PUSH("DoInterlace %dx%d Shader:%d Linear:%d", ds_i.x, ds_i.y, shader, linear);
static_cast<GSTexture12*>(dTex)->TransitionToState(D3D12_RESOURCE_STATE_RENDER_TARGET); static_cast<GSTexture12*>(dTex)->TransitionToState(D3D12_RESOURCE_STATE_RENDER_TARGET);

View File

@ -857,9 +857,10 @@ void GSDeviceVK::DoMerge(GSTexture* sTex[3], GSVector4* sRect, GSTexture* dTex,
void GSDeviceVK::DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset, int bufIdx) void GSDeviceVK::DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset, int bufIdx)
{ {
const GSVector4 ss = GSVector4(sTex->GetSize()); const GSVector4 ss = GSVector4(sTex->GetSize());
const GSVector4 ds = GSVector4(dTex->GetSize()); const GSVector2i ds_i = dTex->GetSize();
const GSVector2i ds_i(dTex->GetSize()); const GSVector4 ds = GSVector4(ds_i);
const GSVector4 sRect(0, 0, 1, 1); const GSVector4 sRect(0, 0, 1, 1);
const GSVector4 dRect(0.0f, yoffset, ds.x, ds.y + yoffset); const GSVector4 dRect(0.0f, yoffset, ds.x, ds.y + yoffset);
@ -868,7 +869,7 @@ void GSDeviceVK::DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool
cb.ZrH = GSVector4(static_cast<float>(bufIdx), 1.0f / ss.y, ss.y, MAD_SENSITIVITY); cb.ZrH = GSVector4(static_cast<float>(bufIdx), 1.0f / ss.y, ss.y, MAD_SENSITIVITY);
GL_PUSH("DoInterlace %dx%d Shader:%d Linear:%d", size.x, size.y, shader, linear); GL_PUSH("DoInterlace %dx%d Shader:%d Linear:%d", ds_i.x, ds_i.y, shader, linear);
static_cast<GSTextureVK*>(dTex)->TransitionToLayout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); static_cast<GSTextureVK*>(dTex)->TransitionToLayout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);