summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/Render.cpp
diff options
context:
space:
mode:
authorMarkus Wick <degasus@users.noreply.github.com>2016-10-31 12:37:09 +0100
committerGitHub <noreply@github.com>2016-10-31 12:37:09 +0100
commit22779473bcfcb7f90f512606c0f584f0db450ba5 (patch)
treeda6d5d21407cf4a9333c80105a78103f57c39092 /Source/Core/VideoBackends/OGL/Render.cpp
parent9ac4598c0989bca485e44e3b3b85f98324d4bca0 (diff)
parentd0e60492cfd31c7ea19620a92b8cb1b19fb708b3 (diff)
Merge pull request #4402 from Armada651/dualsrc-bug
OGL: Fall back to the old dual-source blending behaviour.
Diffstat (limited to 'Source/Core/VideoBackends/OGL/Render.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/Render.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp
index f1e263d8db..ab6576915e 100644
--- a/Source/Core/VideoBackends/OGL/Render.cpp
+++ b/Source/Core/VideoBackends/OGL/Render.cpp
@@ -445,8 +445,7 @@ Renderer::Renderer()
g_Config.backend_info.bSupportsDualSourceBlend =
(GLExtensions::Supports("GL_ARB_blend_func_extended") ||
- GLExtensions::Supports("GL_EXT_blend_func_extended")) &&
- !DriverDetails::HasBug(DriverDetails::BUG_BROKEN_DUAL_SOURCE_BLENDING);
+ GLExtensions::Supports("GL_EXT_blend_func_extended"));
g_Config.backend_info.bSupportsPrimitiveRestart =
!DriverDetails::HasBug(DriverDetails::BUG_PRIMITIVERESTART) &&
((GLExtensions::Version() >= 310) || GLExtensions::Supports("GL_NV_primitive_restart"));
@@ -1244,6 +1243,10 @@ void Renderer::SetBlendMode(bool forceUpdate)
bool useDstAlpha = bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && target_has_alpha;
bool useDualSource = g_ActiveConfig.backend_info.bSupportsDualSourceBlend;
+ // Only use dual-source blending when required on drivers that don't support it very well.
+ if (DriverDetails::HasBug(DriverDetails::BUG_BROKEN_DUAL_SOURCE_BLENDING) && !useDstAlpha)
+ useDualSource = false;
+
const GLenum glSrcFactors[8] = {
GL_ZERO,
GL_ONE,