diff --git a/plugins/GSdx/GSLinuxDialog.cpp b/plugins/GSdx/GSLinuxDialog.cpp index f4bc29b8f8..a4a490f157 100644 --- a/plugins/GSdx/GSLinuxDialog.cpp +++ b/plugins/GSdx/GSLinuxDialog.cpp @@ -352,10 +352,10 @@ void populate_hack_table(GtkWidget* hack_table) GtkWidget* hack_tco_entry = CreateTextBox("UserHacks_TCOffset"); GtkWidget* align_sprite_check = CreateCheckBox("Align sprite hack", "UserHacks_align_sprite_X"); GtkWidget* preload_gs_check = CreateCheckBox("Preload Frame", "preload_frame_with_gs_data"); - GtkWidget* hack_safe_fbmask = CreateCheckBox("Safe Accurate Blending", "UserHacks_safe_fbmask"); GtkWidget* hack_fast_inv = CreateCheckBox("Fast Texture Invalidation", "UserHacks_DisablePartialInvalidation"); GtkWidget* hack_depth_check = CreateCheckBox("Disable Depth Emulation", "UserHacks_DisableDepthSupport"); GtkWidget* hack_auto_flush = CreateCheckBox("Auto Flush Primitives", "UserHacks_AutoFlush"); + GtkWidget* hack_unscale_prim = CreateCheckBox("Unscale Point&Line Primitives", "UserHacks_unscale_point_line"); GtkWidget* hack_sprite_box = CreateComboBoxFromVector(theApp.m_gs_hack, "UserHacks_SpriteHack"); GtkWidget* hack_sprite_label = left_label("Alpha-Sprite Hack:"); @@ -373,16 +373,16 @@ void populate_hack_table(GtkWidget* hack_table) AddTooltip(align_sprite_check, IDC_ALIGN_SPRITE); AddTooltip(stretch_hack_label, stretch_hack_box, IDC_ROUND_SPRITE); AddTooltip(preload_gs_check, IDC_PRELOAD_GS); - AddTooltip(hack_safe_fbmask, IDC_SAFE_FBMASK); AddTooltip(hack_fast_inv, IDC_FAST_TC_INV); AddTooltip(hack_depth_check, IDC_TC_DEPTH); AddTooltip(hack_auto_flush, IDC_AUTO_FLUSH); + AddTooltip(hack_unscale_prim, IDC_UNSCALE_POINT_LINE); s_table_line = 0; InsertWidgetInTable(hack_table , hack_wild_check , align_sprite_check); InsertWidgetInTable(hack_table , hack_offset_check , preload_gs_check); - InsertWidgetInTable(hack_table , hack_safe_fbmask , hack_fast_inv); + InsertWidgetInTable(hack_table , hack_unscale_prim , hack_fast_inv); InsertWidgetInTable(hack_table , hack_depth_check , hack_auto_flush); InsertWidgetInTable(hack_table , hack_sprite_label , hack_sprite_box ); InsertWidgetInTable(hack_table , stretch_hack_label , stretch_hack_box ); diff --git a/plugins/GSdx/GSRendererOGL.cpp b/plugins/GSdx/GSRendererOGL.cpp index a3f9931ea6..bd5e0b2f62 100644 --- a/plugins/GSdx/GSRendererOGL.cpp +++ b/plugins/GSdx/GSRendererOGL.cpp @@ -37,7 +37,6 @@ GSRendererOGL::GSRendererOGL() UserHacks_TCOffset = theApp.GetConfigI("UserHacks_TCOffset"); UserHacks_TCO_x = (UserHacks_TCOffset & 0xFFFF) / -1000.0f; UserHacks_TCO_y = ((UserHacks_TCOffset >> 16) & 0xFFFF) / -1000.0f; - UserHacks_safe_fbmask = theApp.GetConfigB("UserHacks_safe_fbmask"); UserHacks_merge_sprite = theApp.GetConfigB("UserHacks_merge_pp_sprite"); UserHacks_unscale_pt_ln = theApp.GetConfigB("UserHacks_unscale_point_line"); @@ -48,7 +47,6 @@ GSRendererOGL::GSRendererOGL() UserHacks_TCOffset = 0; UserHacks_TCO_x = 0; UserHacks_TCO_y = 0; - UserHacks_safe_fbmask = false; UserHacks_merge_sprite = false; UserHacks_unscale_pt_ln = false; } @@ -455,7 +453,8 @@ void GSRendererOGL::EmulateTextureShuffleAndFbmask() TextureBarrier() will guarantee that writes have completed and caches have been invalidated before subsequent Draws are executed. */ - if (!(~ff_fbmask & ~zero_fbmask & 0x7) && !UserHacks_safe_fbmask) { + // Safe option was removed. Likely nobody never use it. Keep the code commented if it becomes useful one day + if (!(~ff_fbmask & ~zero_fbmask & 0x7) /*&& !UserHacks_safe_fbmask*/) { GL_INS("FBMASK Unsafe SW emulated fb_mask:%x on %d bits format", m_context->FRAME.FBMSK, (GSLocalMemory::m_psm[m_context->FRAME.PSM].fmt == 2) ? 16 : 32); m_require_one_barrier = true; diff --git a/plugins/GSdx/GSRendererOGL.h b/plugins/GSdx/GSRendererOGL.h index 12bf0be25f..a633d203e5 100644 --- a/plugins/GSdx/GSRendererOGL.h +++ b/plugins/GSdx/GSRendererOGL.h @@ -52,7 +52,6 @@ class GSRendererOGL final : public GSRendererHW unsigned int UserHacks_TCOffset; float UserHacks_TCO_x, UserHacks_TCO_y; - bool UserHacks_safe_fbmask; bool UserHacks_merge_sprite; bool UserHacks_unscale_pt_ln; diff --git a/plugins/GSdx/GSSetting.cpp b/plugins/GSdx/GSSetting.cpp index 96d56f8b73..3f68611fd4 100644 --- a/plugins/GSdx/GSSetting.cpp +++ b/plugins/GSdx/GSSetting.cpp @@ -102,9 +102,6 @@ const char* dialog_message(int ID, bool* updateText) { "High:\nExtend it to destination alpha blending and color wrapping. (help shadow and fog effect). A good CPU is required.\n\n" "Full:\nExcept few cases, the blending unit will be fully emulated by the shader. It is ultra slow! It is intended for debug.\n\n" "Ultra:\nThe blending unit will be completely emulated by the shader. It is ultra slow! It is intended for debug."; - case IDC_SAFE_FBMASK: - return "By default, accurate blending relies on undefined hardware behavior to be fast.\n" - "This option enables a slower but safer behavior if anyone encounters an issue.\n"; case IDC_TC_DEPTH: return "Disable the support of Depth buffer in the texture cache.\n" "It can help to increase speed but it will likely create various glitches."; diff --git a/plugins/GSdx/GSSetting.h b/plugins/GSdx/GSSetting.h index 2fdd99c86b..68fce81dee 100644 --- a/plugins/GSdx/GSSetting.h +++ b/plugins/GSdx/GSSetting.h @@ -60,7 +60,6 @@ enum { IDC_TCOFFSETY2, IDC_PALTEX, IDC_ACCURATE_BLEND_UNIT, - IDC_SAFE_FBMASK, IDC_ACCURATE_DATE, IDC_TC_DEPTH, IDC_CRC_LEVEL, diff --git a/plugins/GSdx/GSSettingsDlg.cpp b/plugins/GSdx/GSSettingsDlg.cpp index a60a1af627..72db456c26 100644 --- a/plugins/GSdx/GSSettingsDlg.cpp +++ b/plugins/GSdx/GSSettingsDlg.cpp @@ -667,7 +667,6 @@ void GSHacksDlg::OnInit() CheckDlgButton(m_hWnd, IDC_ALPHASTENCIL, theApp.GetConfigB("UserHacks_AlphaStencil")); CheckDlgButton(m_hWnd, IDC_PRELOAD_GS, theApp.GetConfigB("preload_frame_with_gs_data")); CheckDlgButton(m_hWnd, IDC_ALIGN_SPRITE, theApp.GetConfigB("UserHacks_align_sprite_X")); - CheckDlgButton(m_hWnd, IDC_SAFE_FBMASK, theApp.GetConfigB("UserHacks_safe_fbmask")); CheckDlgButton(m_hWnd, IDC_TC_DEPTH, theApp.GetConfigB("UserHacks_DisableDepthSupport")); CheckDlgButton(m_hWnd, IDC_FAST_TC_INV, theApp.GetConfigB("UserHacks_DisablePartialInvalidation")); CheckDlgButton(m_hWnd, IDC_AUTO_FLUSH, theApp.GetConfigB("UserHacks_AutoFlush")); @@ -687,7 +686,6 @@ void GSHacksDlg::OnInit() ShowWindow(GetDlgItem(m_hWnd, IDC_ALPHASTENCIL), ogl ? SW_HIDE : SW_SHOW); ShowWindow(GetDlgItem(m_hWnd, IDC_ALPHAHACK), ogl ? SW_HIDE : SW_SHOW); - ShowWindow(GetDlgItem(m_hWnd, IDC_SAFE_FBMASK), ogl ? SW_SHOW : SW_HIDE); EnableWindow(GetDlgItem(m_hWnd, IDC_TC_DEPTH), ogl); EnableWindow(GetDlgItem(m_hWnd, IDC_UNSCALE_POINT_LINE), ogl && !native); EnableWindow(GetDlgItem(m_hWnd, IDC_MSAACB), !ogl); @@ -715,7 +713,6 @@ void GSHacksDlg::OnInit() AddTooltip(IDC_TCOFFSETY); AddTooltip(IDC_TCOFFSETY2); AddTooltip(IDC_PRELOAD_GS); - AddTooltip(IDC_SAFE_FBMASK); AddTooltip(IDC_TC_DEPTH); AddTooltip(IDC_FAST_TC_INV); AddTooltip(IDC_AUTO_FLUSH); @@ -754,7 +751,6 @@ bool GSHacksDlg::OnMessage(UINT message, WPARAM wParam, LPARAM lParam) theApp.SetConfig("UserHacks_AlphaStencil", (int)IsDlgButtonChecked(m_hWnd, IDC_ALPHASTENCIL)); theApp.SetConfig("preload_frame_with_gs_data", (int)IsDlgButtonChecked(m_hWnd, IDC_PRELOAD_GS)); theApp.SetConfig("Userhacks_align_sprite_X", (int)IsDlgButtonChecked(m_hWnd, IDC_ALIGN_SPRITE)); - theApp.SetConfig("UserHacks_safe_fbmask", (int)IsDlgButtonChecked(m_hWnd, IDC_SAFE_FBMASK)); theApp.SetConfig("UserHacks_DisableDepthSupport", (int)IsDlgButtonChecked(m_hWnd, IDC_TC_DEPTH)); theApp.SetConfig("UserHacks_DisablePartialInvalidation", (int)IsDlgButtonChecked(m_hWnd, IDC_FAST_TC_INV)); theApp.SetConfig("UserHacks_AutoFlush", (int)IsDlgButtonChecked(m_hWnd, IDC_AUTO_FLUSH)); diff --git a/plugins/GSdx/GSVertexTrace.cpp b/plugins/GSdx/GSVertexTrace.cpp index 395330e556..193c1ea984 100644 --- a/plugins/GSdx/GSVertexTrace.cpp +++ b/plugins/GSdx/GSVertexTrace.cpp @@ -446,6 +446,11 @@ void GSVertexTrace::FindMinMax(const void* vertex, const uint32* index, int coun } } + // FIXME/WARNING. A division by 2 is done on the depth. I suspect to avoid + // negative value. However it means that we lost the lsb bit. m_eq.z could + // be true if depth isn't constant but close enough. It also imply that + // pmin.z & 1 == 0 and pax.z & 1 == 0 + #if _M_SSE >= 0x401 pmin = pmin.blend16<0x30>(pmin.srl32(1)); diff --git a/plugins/GSdx/GSdx.cpp b/plugins/GSdx/GSdx.cpp index b3aaa04858..7515170b61 100644 --- a/plugins/GSdx/GSdx.cpp +++ b/plugins/GSdx/GSdx.cpp @@ -346,7 +346,6 @@ void GSdxApp::Init() m_default_configuration["UserHacks_MSAA"] = "0"; m_default_configuration["UserHacks_unscale_point_line"] = "0"; m_default_configuration["UserHacks_round_sprite_offset"] = "0"; - m_default_configuration["UserHacks_safe_fbmask"] = "0"; m_default_configuration["UserHacks_SkipDraw"] = "0"; m_default_configuration["UserHacks_SpriteHack"] = "0"; m_default_configuration["UserHacks_TCOffset"] = "0"; diff --git a/plugins/GSdx/GSdx.rc b/plugins/GSdx/GSdx.rc index 88e28f372b..ad1135ba04 100644 --- a/plugins/GSdx/GSdx.rc +++ b/plugins/GSdx/GSdx.rc @@ -128,8 +128,8 @@ BEGIN CONTROL "Half-pixel Offset",IDC_OFFSETHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,51,70,8 COMBOBOX IDC_MSAACB,88,17,58,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Wild Arms Offset",IDC_WILDHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,64,70,8 - CONTROL "Safe Accurate Blending",IDC_SAFE_FBMASK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,77,90,8 - CONTROL "Alpha Stencil",IDC_ALPHASTENCIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,77,57,8 + CONTROL "Unscale Point Line", IDC_UNSCALE_POINT_LINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,77,90,8 + CONTROL "Alpha Stencil",IDC_ALPHASTENCIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,88,77,57,8 CONTROL "Align Sprite",IDC_ALIGN_SPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,88,51,58,8 CONTROL "Disable Depth Emulation",IDC_TC_DEPTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,90,92,8 RTEXT "TC Offset X:",IDC_STATIC,40,179,44,8 @@ -142,8 +142,7 @@ BEGIN RTEXT "Sprite:",IDC_SPRITEHACK_TEXT,62,160,22,8 COMBOBOX IDC_SPRITEHACK,88,158,58,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Fast Texture Invalidation",IDC_FAST_TC_INV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,102,92,8 - CONTROL "Auto Flush", IDC_AUTO_FLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,88,128,45,8 - CONTROL "Unscale Point Line", IDC_UNSCALE_POINT_LINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,128,70,8 + CONTROL "Auto Flush", IDC_AUTO_FLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,128,70,8 RTEXT "TC Offset Y:",IDC_STATIC,40,197,44,8 END diff --git a/plugins/GSdx/resource.h b/plugins/GSdx/resource.h index cbe8017862..f28cd8a400 100644 --- a/plugins/GSdx/resource.h +++ b/plugins/GSdx/resource.h @@ -101,7 +101,6 @@ #define IDC_MIPMAP 2097 #define IDC_PRELOAD_GS 2098 #define IDC_TVSHADER 2099 -#define IDC_SAFE_FBMASK 2100 #define IDC_FAST_TC_INV 2101 #define IDC_LARGE_FB 2102 #define IDC_AUTO_FLUSH 2103