gsdx-gui: Separate opengl and direct3d blending options.

A short summary how d3d option behaves compared to gl.

None d3d-> behaves the same
Basic d3d-> even less than 1/3 of Basic opengl.
Medium d3d -> less than 1/3 of Basic opengl.
High d3d -> 1/3 of Basic opengl.

Note: Medium and High options are mostly intended for debug use.
This commit is contained in:
lightningterror 2019-04-22 23:23:32 +02:00
parent d4b62444d1
commit c3f36ad430
10 changed files with 44 additions and 9 deletions

View File

@ -302,6 +302,11 @@ void GSdxApp::Init()
m_gs_acc_blend_level.push_back(GSSetting(4, "Full", "Very Slow")); m_gs_acc_blend_level.push_back(GSSetting(4, "Full", "Very Slow"));
m_gs_acc_blend_level.push_back(GSSetting(5, "Ultra", "Ultra Slow")); m_gs_acc_blend_level.push_back(GSSetting(5, "Ultra", "Ultra Slow"));
m_gs_acc_blend_level_d3d11.push_back(GSSetting(0, "None", "Fastest"));
m_gs_acc_blend_level_d3d11.push_back(GSSetting(1, "Basic", "Recommended"));
m_gs_acc_blend_level_d3d11.push_back(GSSetting(2, "Medium", "Debug"));
m_gs_acc_blend_level_d3d11.push_back(GSSetting(3, "High", "Debug"));
m_gs_tv_shaders.push_back(GSSetting(0, "None", "")); m_gs_tv_shaders.push_back(GSSetting(0, "None", ""));
m_gs_tv_shaders.push_back(GSSetting(1, "Scanline filter", "")); m_gs_tv_shaders.push_back(GSSetting(1, "Scanline filter", ""));
m_gs_tv_shaders.push_back(GSSetting(2, "Diagonal filter", "")); m_gs_tv_shaders.push_back(GSSetting(2, "Diagonal filter", ""));
@ -339,6 +344,9 @@ void GSdxApp::Init()
m_default_configuration["CaptureVideoCodecDisplayName"] = ""; m_default_configuration["CaptureVideoCodecDisplayName"] = "";
m_default_configuration["dx_break_on_severity"] = "0"; m_default_configuration["dx_break_on_severity"] = "0";
// D3D Blending option
m_default_configuration["accurate_blending_unit_d3d11"] = "1";
// OpenCL device. Windows only for now. // OpenCL device. Windows only for now.
m_default_configuration["ocldev"] = ""; m_default_configuration["ocldev"] = "";

View File

@ -83,6 +83,7 @@ public:
std::vector<GSSetting> m_gs_crc_level; std::vector<GSSetting> m_gs_crc_level;
std::vector<GSSetting> m_gs_acc_date_level; std::vector<GSSetting> m_gs_acc_date_level;
std::vector<GSSetting> m_gs_acc_blend_level; std::vector<GSSetting> m_gs_acc_blend_level;
std::vector<GSSetting> m_gs_acc_blend_level_d3d11;
std::vector<GSSetting> m_gs_tv_shaders; std::vector<GSSetting> m_gs_tv_shaders;
std::vector<GSSetting> m_gpu_renderers; std::vector<GSSetting> m_gpu_renderers;

View File

@ -324,6 +324,7 @@ BEGIN
COMBOBOX IDC_ACCURATE_DATE,104,253,127,118,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_ACCURATE_DATE,104,253,127,118,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Accurate Blending:",IDC_ACCURATE_BLEND_UNIT_TEXT,22,271,79,8 LTEXT "Accurate Blending:",IDC_ACCURATE_BLEND_UNIT_TEXT,22,271,79,8
COMBOBOX IDC_ACCURATE_BLEND_UNIT,104,269,127,118,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_ACCURATE_BLEND_UNIT,104,269,127,118,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_ACCURATE_BLEND_UNIT_D3D11,104,269,127,118,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
// Software Renderer Settings: // Software Renderer Settings:
GROUPBOX "Software Renderer Settings",IDC_STATIC,6,295,230,40,BS_CENTER GROUPBOX "Software Renderer Settings",IDC_STATIC,6,295,230,40,BS_CENTER
CONTROL "Edge Anti-aliasing (Del)",IDC_AA1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,306,91,10 CONTROL "Edge Anti-aliasing (Del)",IDC_AA1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,306,91,10

View File

@ -25,6 +25,7 @@
GSRendererDX11::GSRendererDX11() GSRendererDX11::GSRendererDX11()
: GSRendererHW(new GSTextureCache11(this)) : GSRendererHW(new GSTextureCache11(this))
{ {
m_sw_blending = theApp.GetConfigI("accurate_blending_unit_d3d11");
if (theApp.GetConfigB("UserHacks")) if (theApp.GetConfigB("UserHacks"))
UserHacks_AlphaStencil = theApp.GetConfigB("UserHacks_AlphaStencil"); UserHacks_AlphaStencil = theApp.GetConfigB("UserHacks_AlphaStencil");
else else

View File

@ -40,7 +40,6 @@ GSRendererHW::GSRendererHW(GSTextureCache* tc)
m_upscale_multiplier = theApp.GetConfigI("upscale_multiplier"); m_upscale_multiplier = theApp.GetConfigI("upscale_multiplier");
m_large_framebuffer = theApp.GetConfigB("large_framebuffer"); m_large_framebuffer = theApp.GetConfigB("large_framebuffer");
m_accurate_date = theApp.GetConfigI("accurate_date"); m_accurate_date = theApp.GetConfigI("accurate_date");
m_sw_blending = theApp.GetConfigI("accurate_blending_unit");
if (theApp.GetConfigB("UserHacks")) { if (theApp.GetConfigB("UserHacks")) {
m_userhacks_enabled_gs_mem_clear = !theApp.GetConfigB("UserHacks_Disable_Safe_Features"); m_userhacks_enabled_gs_mem_clear = !theApp.GetConfigB("UserHacks_Disable_Safe_Features");
m_userHacks_enabled_unscale_ptln = !theApp.GetConfigB("UserHacks_Disable_Safe_Features"); m_userHacks_enabled_unscale_ptln = !theApp.GetConfigB("UserHacks_Disable_Safe_Features");

View File

@ -26,6 +26,7 @@
GSRendererOGL::GSRendererOGL() GSRendererOGL::GSRendererOGL()
: GSRendererHW(new GSTextureCacheOGL(this)) : GSRendererHW(new GSTextureCacheOGL(this))
{ {
m_sw_blending = theApp.GetConfigI("accurate_blending_unit");
if (theApp.GetConfigB("UserHacks")) if (theApp.GetConfigB("UserHacks"))
UserHacks_tri_filter = static_cast<TriFiltering>(theApp.GetConfigI("UserHacks_TriFilter")); UserHacks_tri_filter = static_cast<TriFiltering>(theApp.GetConfigI("UserHacks_TriFilter"));
else else

View File

@ -75,10 +75,6 @@ const char* dialog_message(int ID, bool* updateText) {
case IDC_WILDHACK: case IDC_WILDHACK:
return "Lowers the GS precision to avoid gaps between pixels when upscaling.\n" return "Lowers the GS precision to avoid gaps between pixels when upscaling.\n"
"Fixes the text on Wild Arms games."; "Fixes the text on Wild Arms games.";
case IDC_ALPHASTENCIL:
return "Extend stencil based emulation of destination alpha to perform stencil operations while drawing.\n\n"
"Improves many shadows which are normally overdrawn in parts, may affect other effects.\n"
"Will disable partial transparency in some games or even prevent drawing some elements altogether.";
case IDC_ALIGN_SPRITE: case IDC_ALIGN_SPRITE:
return "Fixes issues with upscaling(vertical lines) in Namco games like Ace Combat, Tekken, Soul Calibur, etc."; return "Fixes issues with upscaling(vertical lines) in Namco games like Ace Combat, Tekken, Soul Calibur, etc.";
case IDC_ROUND_SPRITE: case IDC_ROUND_SPRITE:
@ -121,8 +117,7 @@ const char* dialog_message(int ID, bool* updateText) {
"Full:\nExcept few cases, the blending unit will be fully emulated by the shader. It is ultra slow!\n" "Full:\nExcept few cases, the blending unit will be fully emulated by the shader. It is ultra slow!\n"
"It is intended for debug.\n\n" "It is intended for debug.\n\n"
"Ultra:\nThe blending unit will be completely emulated by the shader. It is ultra slow!\n" "Ultra:\nThe blending unit will be completely emulated by the shader. It is ultra slow!\n"
"It is intended for debug.\n\n" "It is intended for debug.";
"Note: Blending is very limited on Direct3D and only Basic mode is partially available.";
case IDC_TC_DEPTH: case IDC_TC_DEPTH:
return "Disable the support of Depth buffer in the texture cache.\n" 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."; "It can help to increase speed but it will likely create various glitches.";
@ -200,6 +195,24 @@ const char* dialog_message(int ID, bool* updateText) {
"It increases GPU/memory requirements.\n\n" "It increases GPU/memory requirements.\n\n"
"Note: It should be disabled for Armored Core, Destroy All Humans, and Gran Turismo.\n" "Note: It should be disabled for Armored Core, Destroy All Humans, and Gran Turismo.\n"
"It will amplify RAM/VRAM spikes. Other games might be affected as well."; "It will amplify RAM/VRAM spikes. Other games might be affected as well.";
// Windows only options.
#ifdef _WIN32
case IDC_ALPHASTENCIL:
return "Extend stencil based emulation of destination alpha to perform stencil operations while drawing.\n\n"
"Improves many shadows which are normally overdrawn in parts, may affect other effects.\n"
"Will disable partial transparency in some games or even prevent drawing some elements altogether.";
case IDC_ACCURATE_BLEND_UNIT_D3D11:
return "Control the accuracy level of the GS blending unit emulation.\n\n"
"None:\nFast but introduces various rendering issues.\n"
"It is intended for slow computer.\n\n"
"Basic:\nEmulate correctly some of the effects with a limited speed penalty.\n"
"This is the recommended setting.\n\n"
"Medium:\nExtend it to color shuffling. Performance impact remains reasonable..\n"
"It is intended for debug.\n\n"
"High:\nExtend it to triangle based primitives. It is ultra slow!\n"
"It is intended for debug.\n\n"
"Note: Direct3D and OpenGL blending options aren't the same, even High blending on Direct3D is like 1/3 of Basic blending on OpenGL.";
#endif
default: default:
if (updateText) if (updateText)
*updateText = false; *updateText = false;

View File

@ -51,7 +51,6 @@ enum {
IDC_OFFSETHACK, IDC_OFFSETHACK,
IDC_SPRITEHACK, IDC_SPRITEHACK,
IDC_WILDHACK, IDC_WILDHACK,
IDC_ALPHASTENCIL,
IDC_ALIGN_SPRITE, IDC_ALIGN_SPRITE,
IDC_ROUND_SPRITE, IDC_ROUND_SPRITE,
IDC_TCOFFSETX, IDC_TCOFFSETX,

View File

@ -125,6 +125,7 @@ void GSSettingsDlg::OnInit()
ComboBoxInit(IDC_FILTER, theApp.m_gs_bifilter, theApp.GetConfigI("filter")); ComboBoxInit(IDC_FILTER, theApp.m_gs_bifilter, theApp.GetConfigI("filter"));
ComboBoxInit(IDC_ACCURATE_DATE, theApp.m_gs_acc_date_level, theApp.GetConfigI("accurate_date")); ComboBoxInit(IDC_ACCURATE_DATE, theApp.m_gs_acc_date_level, theApp.GetConfigI("accurate_date"));
ComboBoxInit(IDC_ACCURATE_BLEND_UNIT, theApp.m_gs_acc_blend_level, theApp.GetConfigI("accurate_blending_unit")); ComboBoxInit(IDC_ACCURATE_BLEND_UNIT, theApp.m_gs_acc_blend_level, theApp.GetConfigI("accurate_blending_unit"));
ComboBoxInit(IDC_ACCURATE_BLEND_UNIT_D3D11, theApp.m_gs_acc_blend_level_d3d11, theApp.GetConfigI("accurate_blending_unit_d3d11"));
ComboBoxInit(IDC_CRC_LEVEL, theApp.m_gs_crc_level, theApp.GetConfigI("crc_hack_level")); ComboBoxInit(IDC_CRC_LEVEL, theApp.m_gs_crc_level, theApp.GetConfigI("crc_hack_level"));
CheckDlgButton(m_hWnd, IDC_PALTEX, theApp.GetConfigB("paltex")); CheckDlgButton(m_hWnd, IDC_PALTEX, theApp.GetConfigB("paltex"));
@ -149,6 +150,7 @@ void GSSettingsDlg::OnInit()
AddTooltip(IDC_PALTEX); AddTooltip(IDC_PALTEX);
AddTooltip(IDC_ACCURATE_DATE); AddTooltip(IDC_ACCURATE_DATE);
AddTooltip(IDC_ACCURATE_BLEND_UNIT); AddTooltip(IDC_ACCURATE_BLEND_UNIT);
AddTooltip(IDC_ACCURATE_BLEND_UNIT_D3D11);
AddTooltip(IDC_AFCOMBO); AddTooltip(IDC_AFCOMBO);
AddTooltip(IDC_AA1); AddTooltip(IDC_AA1);
AddTooltip(IDC_MIPMAP_HW); AddTooltip(IDC_MIPMAP_HW);
@ -262,6 +264,11 @@ bool GSSettingsDlg::OnCommand(HWND hWnd, UINT id, UINT code)
theApp.SetConfig("accurate_blending_unit", (int)data); theApp.SetConfig("accurate_blending_unit", (int)data);
} }
if(ComboBoxGetSelData(IDC_ACCURATE_BLEND_UNIT_D3D11, data))
{
theApp.SetConfig("accurate_blending_unit_d3d11", (int)data);
}
if (ComboBoxGetSelData(IDC_CRC_LEVEL, data)) if (ComboBoxGetSelData(IDC_CRC_LEVEL, data))
{ {
theApp.SetConfig("crc_hack_level", (int)data); theApp.SetConfig("crc_hack_level", (int)data);
@ -384,7 +391,11 @@ void GSSettingsDlg::UpdateControls()
EnableWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_DATE), hw); EnableWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_DATE), hw);
EnableWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_DATE_TEXT), hw); EnableWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_DATE_TEXT), hw);
EnableWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_BLEND_UNIT), hw); EnableWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_BLEND_UNIT), hw);
EnableWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_BLEND_UNIT_D3D11), hw);
EnableWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_BLEND_UNIT_TEXT), hw); EnableWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_BLEND_UNIT_TEXT), hw);
ShowWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_BLEND_UNIT), ogl ? SW_SHOW : SW_HIDE);
ShowWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_BLEND_UNIT_D3D11), dx11 ? SW_SHOW : SW_HIDE);
ShowWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_BLEND_UNIT_TEXT), !null ? SW_SHOW : SW_HIDE);
// Software mode settings // Software mode settings
EnableWindow(GetDlgItem(m_hWnd, IDC_MIPMAP_SW), sw); EnableWindow(GetDlgItem(m_hWnd, IDC_MIPMAP_SW), sw);

View File

@ -42,7 +42,8 @@
#define IDC_ACCURATE_DATE 2046 #define IDC_ACCURATE_DATE 2046
#define IDC_ACCURATE_DATE_TEXT 2047 #define IDC_ACCURATE_DATE_TEXT 2047
#define IDC_ACCURATE_BLEND_UNIT 2048 #define IDC_ACCURATE_BLEND_UNIT 2048
#define IDC_ACCURATE_BLEND_UNIT_TEXT 2049 #define IDC_ACCURATE_BLEND_UNIT_D3D11 2049
#define IDC_ACCURATE_BLEND_UNIT_TEXT 2050
// Software Renderer Settings: // Software Renderer Settings:
#define IDC_MIPMAP_SW 2060 #define IDC_MIPMAP_SW 2060
#define IDC_AA1 2061 #define IDC_AA1 2061