gsdx-gui: Add an option in hw hacks to control the half bottom detection.

Automatic, Force Disabled, Force Enabled.

Automatic - automatically determinate if a game needs the half screen
fix.
Force Disabled - fully disables the half bottom fix. It will help
Xenosaga games.
Force Enabled - fully enables the half bottom fix. Will help Lord of the
Rings Two Towers, Superman Shadows of Apokolips, Midnight Club 3.
This commit is contained in:
lightningterror 2020-01-17 00:52:17 +01:00
parent f5eeaf1baa
commit f9e3605254
8 changed files with 65 additions and 41 deletions

View File

@ -266,9 +266,9 @@ void GSdxApp::Init()
m_gs_trifilter.push_back(GSSetting(static_cast<uint32>(TriFiltering::PS2), "Trilinear", ""));
m_gs_trifilter.push_back(GSSetting(static_cast<uint32>(TriFiltering::Forced), "Trilinear", "Ultra/Slow"));
m_gs_gl_ext.push_back(GSSetting(-1, "Automatic", "Default"));
m_gs_gl_ext.push_back(GSSetting(0, "Force-Disabled", ""));
m_gs_gl_ext.push_back(GSSetting(1, "Force-Enabled", ""));
m_gs_generic_list.push_back(GSSetting(-1, "Automatic", "Default"));
m_gs_generic_list.push_back(GSSetting(0, "Force-Disabled", ""));
m_gs_generic_list.push_back(GSSetting(1, "Force-Enabled", ""));
m_gs_hack.push_back(GSSetting(0, "Off", "Default"));
m_gs_hack.push_back(GSSetting(1, "Half", ""));
@ -359,7 +359,6 @@ void GSdxApp::Init()
#else
m_default_configuration["linux_replay"] = "1";
#endif
m_default_configuration["aa1"] = "0";
m_default_configuration["accurate_date"] = "1";
m_default_configuration["accurate_blending_unit"] = "1";

View File

@ -72,8 +72,8 @@ public:
std::vector<GSSetting> m_gs_max_anisotropy;
std::vector<GSSetting> m_gs_bifilter;
std::vector<GSSetting> m_gs_trifilter;
std::vector<GSSetting> m_gs_gl_ext;
std::vector<GSSetting> m_gs_hack;
std::vector<GSSetting> m_gs_generic_list;
std::vector<GSSetting> m_gs_offset_hack;
std::vector<GSSetting> m_gs_hw_mipmapping;
std::vector<GSSetting> m_gs_crc_level;

View File

@ -111,13 +111,13 @@ IDB_NULL BITMAP "res\\logo-null.bmp"
// Dialog
//
IDD_HACKS DIALOGEX 0, 0, 210, 274
IDD_HACKS DIALOGEX 0, 0, 210, 289
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Advanced Settings & Hacks"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
// Rendering Hacks:
GROUPBOX "Rendering Hacks",IDC_STATIC,7,7,196,99,0,WS_EX_TRANSPARENT
GROUPBOX "Rendering Hacks",IDC_STATIC,7,7,196,114,0,WS_EX_TRANSPARENT
// Column one - HW Hacks
CONTROL "Alpha Stencil",IDC_ALPHASTENCIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,19,57,8
CONTROL "Auto Flush",IDC_AUTO_FLUSH_HW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,32,55,8
@ -130,40 +130,42 @@ BEGIN
CONTROL "Preload Frame Data",IDC_PRELOAD_GS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,106,58,80,8
// Columns end
//
RTEXT "Trilinear Filtering:",IDC_TRI_FILTER_TEXT,16,73,60,8
COMBOBOX IDC_TRI_FILTER,80,70,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Skipdraw Range:",IDC_SKIPDRAWHACK_TEXT,14,88,62,8
EDITTEXT IDC_SKIPDRAWOFFSETEDIT,80,85,58,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
RTEXT "Half-screen Fix:",IDC_HALF_SCREEN_TS_TEXT,14,73,62,8
COMBOBOX IDC_HALF_SCREEN_TS,80,70,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Trilinear Filtering:",IDC_TRI_FILTER_TEXT,16,88,60,8
COMBOBOX IDC_TRI_FILTER,80,85,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Skipdraw Range:",IDC_SKIPDRAWHACK_TEXT,14,103,62,8
EDITTEXT IDC_SKIPDRAWOFFSETEDIT,80,100,58,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_SKIPDRAWOFFSET,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,0,0,11,14
EDITTEXT IDC_SKIPDRAWHACKEDIT,138,85,58,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
EDITTEXT IDC_SKIPDRAWHACKEDIT,138,100,58,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_SKIPDRAWHACK,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,0,0,11,14
// Upscaling Hacks:
GROUPBOX "Upscaling Hacks",IDC_STATIC,7,109,196,75,0,WS_EX_TRANSPARENT
CONTROL "Align Sprite",IDC_ALIGN_SPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,121,55,8
CONTROL "Merge Sprite",IDC_MERGE_PP_SPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,71,121,55,8
CONTROL "Wild Arms Offset",IDC_WILDHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,121,70,8
RTEXT "Half-pixel Offset:",IDC_OFFSETHACK_TEXT,14,136,62,8
COMBOBOX IDC_OFFSETHACK,80,133,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Round Sprite:",IDC_ROUND_SPRITE_TEXT,30,151,46,8
COMBOBOX IDC_ROUND_SPRITE,80,148,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Texture Offsets:",IDC_TCOFFSET_TEXT,14,166,62,8
RTEXT "X:",IDC_TCOFFSETX_TEXT,81,166,10,8
EDITTEXT IDC_TCOFFSETX2,94,163,44,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
GROUPBOX "Upscaling Hacks",IDC_STATIC,7,124,196,75,0,WS_EX_TRANSPARENT
CONTROL "Align Sprite",IDC_ALIGN_SPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,136,55,8
CONTROL "Merge Sprite",IDC_MERGE_PP_SPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,71,136,55,8
CONTROL "Wild Arms Offset",IDC_WILDHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,136,70,8
RTEXT "Half-pixel Offset:",IDC_OFFSETHACK_TEXT,14,151,62,8
COMBOBOX IDC_OFFSETHACK,80,148,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Round Sprite:",IDC_ROUND_SPRITE_TEXT,30,166,46,8
COMBOBOX IDC_ROUND_SPRITE,80,163,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Texture Offsets:",IDC_TCOFFSET_TEXT,14,181,62,8
RTEXT "X:",IDC_TCOFFSETX_TEXT,81,181,10,8
EDITTEXT IDC_TCOFFSETX2,94,178,44,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_TCOFFSETX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,0,0,11,14
RTEXT "Y:",IDC_TCOFFSETY_TEXT,139,166,10,8
EDITTEXT IDC_TCOFFSETY2,152,163,44,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
RTEXT "Y:",IDC_TCOFFSETY_TEXT,139,181,10,8
EDITTEXT IDC_TCOFFSETY2,152,178,44,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_TCOFFSETY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,0,0,11,14
// OpenGL Advanced Settings:
GROUPBOX "OpenGL Advanced Settings",IDC_STATIC,7,187,196,61,0,WS_EX_TRANSPARENT
RTEXT "Geometry Shader:",IDC_GEOMETRY_SHADER_TEXT,14,201,62,8
COMBOBOX IDC_GEOMETRY_SHADER_OVERRIDE,80,198,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Image Load Store:",IDC_IMAGE_LOAD_STORE_TEXT,14,216,62,8
COMBOBOX IDC_IMAGE_LOAD_STORE,80,213,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Sparse Texture:",IDC_SPARSE_TEXTURE_TEXT,14,231,62,8
COMBOBOX IDC_SPARSE_TEXTURE,80,228,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
GROUPBOX "OpenGL Advanced Settings",IDC_STATIC,7,202,196,61,0,WS_EX_TRANSPARENT
RTEXT "Geometry Shader:",IDC_GEOMETRY_SHADER_TEXT,14,216,62,8
COMBOBOX IDC_GEOMETRY_SHADER_OVERRIDE,80,213,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Image Load Store:",IDC_IMAGE_LOAD_STORE_TEXT,14,231,62,8
COMBOBOX IDC_IMAGE_LOAD_STORE,80,228,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Sparse Texture:",IDC_SPARSE_TEXTURE_TEXT,14,246,62,8
COMBOBOX IDC_SPARSE_TEXTURE,80,243,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
// General Settings:
DEFPUSHBUTTON "OK",IDOK,52,254,50,14
DEFPUSHBUTTON "Cancel",IDCANCEL,108,254,50,14
DEFPUSHBUTTON "OK",IDOK,52,269,50,14
DEFPUSHBUTTON "Cancel",IDCANCEL,108,269,50,14
END
IDD_SHADER DIALOGEX 0, 0, 248, 230

View File

@ -317,11 +317,11 @@ void populate_hw_table(GtkWidget* hw_table)
void populate_gl_table(GtkWidget* gl_table)
{
GtkWidget* gl_gs_label = left_label("Geometry Shader:");
GtkWidget* gl_gs_combo = CreateComboBoxFromVector(theApp.m_gs_gl_ext, "override_geometry_shader");
GtkWidget* gl_gs_combo = CreateComboBoxFromVector(theApp.m_gs_generic_list, "override_geometry_shader");
GtkWidget* gl_ils_label = left_label("Image Load Store:");
GtkWidget* gl_ils_combo = CreateComboBoxFromVector(theApp.m_gs_gl_ext, "override_GL_ARB_shader_image_load_store");
GtkWidget* gl_ils_combo = CreateComboBoxFromVector(theApp.m_gs_generic_list, "override_GL_ARB_shader_image_load_store");
GtkWidget* gl_sps_label = left_label("Sparse Texture:");
GtkWidget* gl_sps_combo = CreateComboBoxFromVector(theApp.m_gs_gl_ext, "override_GL_ARB_sparse_texture");
GtkWidget* gl_sps_combo = CreateComboBoxFromVector(theApp.m_gs_generic_list, "override_GL_ARB_sparse_texture");
AddTooltip(gl_gs_label, gl_gs_combo, IDC_GEOMETRY_SHADER_OVERRIDE);
AddTooltip(gl_ils_label, gl_ils_combo, IDC_IMAGE_LOAD_STORE);
@ -462,6 +462,8 @@ void populate_hack_table(GtkWidget* hack_table)
GtkWidget* stretch_hack_label = left_label("Round Sprite:");
GtkWidget* trilinear_box = CreateComboBoxFromVector(theApp.m_gs_trifilter, "UserHacks_TriFilter");
GtkWidget* trilinear_label = left_label("Trilinear Filtering:");
GtkWidget* half_screen_ts_box = CreateComboBoxFromVector(theApp.m_gs_generic_list, "UserHacks_Half_Bottom_Override");
GtkWidget* half_screen_ts_label = left_label("Half-screen Fix:");
// Reuse windows helper string :)
AddTooltip(hack_offset_label, IDC_OFFSETHACK);
@ -485,6 +487,8 @@ void populate_hack_table(GtkWidget* hack_table)
AddTooltip(hack_wrap_mem, IDC_MEMORY_WRAPPING);
AddTooltip(trilinear_box, IDC_TRI_FILTER);
AddTooltip(trilinear_label, IDC_TRI_FILTER);
AddTooltip(half_screen_ts_box, IDC_HALF_SCREEN_TS);
AddTooltip(half_screen_ts_label, IDC_HALF_SCREEN_TS);
s_table_line = 0;
@ -495,7 +499,8 @@ void populate_hack_table(GtkWidget* hack_table)
InsertWidgetInTable(hack_table , hack_depth_check , hack_merge_sprite);
InsertWidgetInTable(hack_table , hack_safe_features , preload_gs_check);
InsertWidgetInTable(hack_table , hack_fast_inv , hack_wild_check);
// Other upscaling hacks
// Other hacks
InsertWidgetInTable(hack_table , half_screen_ts_label, half_screen_ts_box);
InsertWidgetInTable(hack_table , trilinear_label , trilinear_box);
InsertWidgetInTable(hack_table , hack_offset_label , hack_offset_box);
InsertWidgetInTable(hack_table , stretch_hack_label , stretch_hack_box );

View File

@ -37,6 +37,11 @@ const char* dialog_message(int ID, bool* updateText) {
" Rendering is smoother but it could generate a few glitches. If upscaling is enabled, this setting is recommended over 'Bilinear Forced'\n\n"
"Bilinear Forced:\nAlways enable interpolation. Rendering is smoother but it could generate some glitches.\n\n"
"Bilinear PS2:\nUse same mode as the PS2. It is the more accurate option.";
case IDC_HALF_SCREEN_TS:
return "Control the half-screen fix detection on texture shuffling.\n\n"
"Automatic:\nUses an algorithm to automatically enable or disable the detection.\n\n"
"Force-Disabled:\nDisables the detection. Will cause visual bugs in many games. It helps Xenosaga games.\n\n"
"Force-Enabled:\nAlways enables the detection. Use it when a game has half-screen issues.";
case IDC_TRI_FILTER:
return "Control the texture tri-filtering of the emulation.\n\n"
"None:\nNo extra trilinear filtering.\n\n"

View File

@ -43,6 +43,7 @@ const char* dialog_message(int ID, bool* updateText = NULL);
#ifndef _WIN32
enum {
IDC_FILTER,
IDC_HALF_SCREEN_TS,
IDC_TRI_FILTER,
IDC_SKIPDRAWHACK,
IDC_SKIPDRAWHACKEDIT,

View File

@ -640,12 +640,13 @@ void GSHacksDlg::OnInit()
CheckDlgButton(m_hWnd, IDC_MEMORY_WRAPPING, theApp.GetConfigB("wrap_gs_mem"));
CheckDlgButton(m_hWnd, IDC_MERGE_PP_SPRITE, theApp.GetConfigB("UserHacks_merge_pp_sprite"));
ComboBoxInit(IDC_HALF_SCREEN_TS, theApp.m_gs_generic_list, theApp.GetConfigI("UserHacks_Half_Bottom_Override"));
ComboBoxInit(IDC_TRI_FILTER, theApp.m_gs_trifilter, theApp.GetConfigI("UserHacks_TriFilter"));
ComboBoxInit(IDC_OFFSETHACK, theApp.m_gs_offset_hack, theApp.GetConfigI("UserHacks_HalfPixelOffset"));
ComboBoxInit(IDC_ROUND_SPRITE, theApp.m_gs_hack, theApp.GetConfigI("UserHacks_round_sprite_offset"));
ComboBoxInit(IDC_GEOMETRY_SHADER_OVERRIDE, theApp.m_gs_gl_ext, theApp.GetConfigI("override_geometry_shader"));
ComboBoxInit(IDC_IMAGE_LOAD_STORE, theApp.m_gs_gl_ext, theApp.GetConfigI("override_GL_ARB_shader_image_load_store"));
ComboBoxInit(IDC_SPARSE_TEXTURE, theApp.m_gs_gl_ext, theApp.GetConfigI("override_GL_ARB_sparse_texture"));
ComboBoxInit(IDC_GEOMETRY_SHADER_OVERRIDE, theApp.m_gs_generic_list, theApp.GetConfigI("override_geometry_shader"));
ComboBoxInit(IDC_IMAGE_LOAD_STORE, theApp.m_gs_generic_list, theApp.GetConfigI("override_GL_ARB_shader_image_load_store"));
ComboBoxInit(IDC_SPARSE_TEXTURE, theApp.m_gs_generic_list, theApp.GetConfigI("override_GL_ARB_sparse_texture"));
SendMessage(GetDlgItem(m_hWnd, IDC_SKIPDRAWOFFSET), UDM_SETRANGE, 0, MAKELPARAM(10000, 0));
SendMessage(GetDlgItem(m_hWnd, IDC_SKIPDRAWOFFSET), UDM_SETPOS, 0, MAKELPARAM(theApp.GetConfigI("UserHacks_SkipDraw_Offset"), 0));
@ -666,6 +667,10 @@ void GSHacksDlg::OnInit()
EnableWindow(GetDlgItem(m_hWnd, IDC_SAFE_FEATURES), hwhacks);
EnableWindow(GetDlgItem(m_hWnd, IDC_MEMORY_WRAPPING), hwhacks);
// Half-screen bottom hack:
EnableWindow(GetDlgItem(m_hWnd, IDC_HALF_SCREEN_TS), hwhacks);
EnableWindow(GetDlgItem(m_hWnd, IDC_HALF_SCREEN_TS_TEXT), hwhacks);
// Skipdraw hack:
EnableWindow(GetDlgItem(m_hWnd, IDC_SKIPDRAWHACK_TEXT), hwhacks);
EnableWindow(GetDlgItem(m_hWnd, IDC_SKIPDRAWOFFSETEDIT), hwhacks);
@ -726,6 +731,7 @@ void GSHacksDlg::OnInit()
AddTooltip(IDC_AUTO_FLUSH_HW);
AddTooltip(IDC_SAFE_FEATURES);
AddTooltip(IDC_MEMORY_WRAPPING);
AddTooltip(IDC_HALF_SCREEN_TS);
AddTooltip(IDC_TRI_FILTER);
AddTooltip(IDC_MERGE_PP_SPRITE);
AddTooltip(IDC_GEOMETRY_SHADER_OVERRIDE);
@ -782,6 +788,10 @@ bool GSHacksDlg::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
case IDOK:
{
INT_PTR data;
if (ComboBoxGetSelData(IDC_HALF_SCREEN_TS, data))
{
theApp.SetConfig("UserHacks_Half_Bottom_Override", (int)data);
}
if (ComboBoxGetSelData(IDC_TRI_FILTER, data))
{
theApp.SetConfig("UserHacks_TriFilter", (int)data);

View File

@ -101,6 +101,8 @@
#define IDC_SKIPDRAWHACKEDIT 2126
#define IDC_SKIPDRAWOFFSET 2127
#define IDC_SKIPDRAWOFFSETEDIT 2128
#define IDC_HALF_SCREEN_TS 2129
#define IDC_HALF_SCREEN_TS_TEXT 2130
// Shader:
#define IDC_SHADEBOOST 2140
#define IDC_FXAA 2141