diff --git a/plugins/GSdx/GLLoader.cpp b/plugins/GSdx/GLLoader.cpp index e3845a8113..b7ef058879 100644 --- a/plugins/GSdx/GLLoader.cpp +++ b/plugins/GSdx/GLLoader.cpp @@ -447,9 +447,8 @@ namespace GLLoader { // GL4.2 if (ext.compare("GL_ARB_shading_language_420pack") == 0) found_GL_ARB_shading_language_420pack = true; if (ext.compare("GL_ARB_texture_storage") == 0) found_GL_ARB_texture_storage = true; - // Only enable this extension on nvidia - // It is too costly on perf (big upscaling), code need to updated to reduce the number of draw stage - //if (nvidia_buggy_driver && ext.compare("GL_ARB_shader_image_load_store") == 0) found_GL_ARB_shader_image_load_store = true; + // (I'm not sure AMD supports correctly GL_ARB_shader_image_load_store + if (ext.compare("GL_ARB_shader_image_load_store") == 0) found_GL_ARB_shader_image_load_store = true; // GL4.3 if (ext.compare("GL_ARB_copy_image") == 0) found_GL_ARB_copy_image = true; if (ext.compare("GL_ARB_explicit_uniform_location") == 0) found_GL_ARB_explicit_uniform_location = true; diff --git a/plugins/GSdx/GSLinuxDialog.cpp b/plugins/GSdx/GSLinuxDialog.cpp index 9693e94459..c073596a74 100644 --- a/plugins/GSdx/GSLinuxDialog.cpp +++ b/plugins/GSdx/GSLinuxDialog.cpp @@ -290,11 +290,14 @@ void populate_hw_table(GtkWidget* hw_table) GtkWidget* paltex_check = CreateCheckBox("Allow 8 bits textures", "paltex"); GtkWidget* fba_check = CreateCheckBox("Alpha correction (FBA)", "fba", true); + GtkWidget* acc_blend_check = CreateCheckBox("Accurate Blend", "accurate_blend", false); + GtkWidget* acc_date_check = CreateCheckBox("Accurate Date", "accurate_date", false); s_table_line = 0; InsertWidgetInTable(hw_table, filter_label, filter_combo_box); InsertWidgetInTable(hw_table, af_label, af_combo_box); InsertWidgetInTable(hw_table, paltex_check, fba_check); + InsertWidgetInTable(hw_table, acc_blend_check, acc_date_check); } void populate_gl_table(GtkWidget* gl_table) diff --git a/plugins/GSdx/GSRendererOGL.cpp b/plugins/GSdx/GSRendererOGL.cpp index 5f3a8777cb..69b297fd8a 100644 --- a/plugins/GSdx/GSRendererOGL.cpp +++ b/plugins/GSdx/GSRendererOGL.cpp @@ -27,16 +27,29 @@ GSRendererOGL::GSRendererOGL() : GSRendererHW(new GSTextureCacheOGL(this)) { - m_fba = !!theApp.GetConfig("fba", 1); - UserHacks_AlphaHack = !!theApp.GetConfig("UserHacks_AlphaHack", 0) && !!theApp.GetConfig("UserHacks", 0); - UserHacks_AlphaStencil = !!theApp.GetConfig("UserHacks_AlphaStencil", 0) && !!theApp.GetConfig("UserHacks", 0); - UserHacks_DateGL4 = !!theApp.GetConfig("UserHacks_DateGL4", 0); + m_fba = theApp.GetConfig("fba", 1); m_pixelcenter = GSVector2(-0.5f, -0.5f); - UserHacks_Unscale_sprite = !!theApp.GetConfig("UserHacks", 0) ? theApp.GetConfig("UserHacks_UnscaleSprite", 0) : 0; - UserHacks_TCOffset = !!theApp.GetConfig("UserHacks", 0) ? theApp.GetConfig("UserHacks_TCOffset", 0) : 0; - UserHacks_TCO_x = (UserHacks_TCOffset & 0xFFFF) / -1000.0f; - UserHacks_TCO_y = ((UserHacks_TCOffset >> 16) & 0xFFFF) / -1000.0f; + m_accurate_blend = theApp.GetConfig("accurate_blend", 0); + m_accurate_date = theApp.GetConfig("accurate_date", 0); + + UserHacks_AlphaHack = theApp.GetConfig("UserHacks_AlphaHack", 0); + UserHacks_AlphaStencil = theApp.GetConfig("UserHacks_AlphaStencil", 0); + UserHacks_DateGL4 = theApp.GetConfig("UserHacks_DateGL4", 0); + UserHacks_Unscale_sprite = theApp.GetConfig("UserHacks_UnscaleSprite", 0); + UserHacks_TCOffset = theApp.GetConfig("UserHacks_TCOffset", 0); + UserHacks_TCO_x = (UserHacks_TCOffset & 0xFFFF) / -1000.0f; + UserHacks_TCO_y = ((UserHacks_TCOffset >> 16) & 0xFFFF) / -1000.0f; + + if (!theApp.GetConfig("UserHacks", 0)) { + UserHacks_AlphaHack = false; + UserHacks_AlphaStencil = false; + UserHacks_DateGL4 = false; + UserHacks_Unscale_sprite = 0; + UserHacks_TCOffset = 0; + UserHacks_TCO_x = 0; + UserHacks_TCO_y = 0; + } } bool GSRendererOGL::CreateDevice(GSDevice* dev) @@ -246,7 +259,7 @@ void GSRendererOGL::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour DATE_GL45 = true; DATE = false; } else if (om_csel.wa && (!context->TEST.ATE || context->TEST.ATST == ATST_ALWAYS)) { - DATE_GL42 = GLLoader::found_GL_ARB_shader_image_load_store && !UserHacks_AlphaStencil; + DATE_GL42 = m_accurate_date && GLLoader::found_GL_ARB_shader_image_load_store && !UserHacks_AlphaStencil; } } diff --git a/plugins/GSdx/GSRendererOGL.h b/plugins/GSdx/GSRendererOGL.h index 774aa16272..b5f60e2086 100644 --- a/plugins/GSdx/GSRendererOGL.h +++ b/plugins/GSdx/GSRendererOGL.h @@ -32,6 +32,9 @@ class GSRendererOGL : public GSRendererHW private: GSVector2 m_pixelcenter; bool m_fba; + bool m_accurate_blend; + bool m_accurate_date; + bool UserHacks_AlphaHack; bool UserHacks_AlphaStencil; bool UserHacks_DateGL4;