aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.OpenGL/Pipeline.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2020-10-12 21:50:41 -0300
committerGitHub <noreply@github.com>2020-10-12 21:50:41 -0300
commit6a51b628f910deb6356974c2eb6fb2dba1dfdb34 (patch)
tree9ed7b7825f41aaf3e88f0e6c69a080e5b0038bc0 /Ryujinx.Graphics.OpenGL/Pipeline.cs
parente4777717cdf70c61365494cdb91568172fa5bfe8 (diff)
Fix error when dual source blend is used (#1610)
* Fix error when dual source blend is used * Ensure framebuffer
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Pipeline.cs')
-rw-r--r--Ryujinx.Graphics.OpenGL/Pipeline.cs26
1 files changed, 26 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.OpenGL/Pipeline.cs b/Ryujinx.Graphics.OpenGL/Pipeline.cs
index 78e37ed6..5e754d80 100644
--- a/Ryujinx.Graphics.OpenGL/Pipeline.cs
+++ b/Ryujinx.Graphics.OpenGL/Pipeline.cs
@@ -557,6 +557,32 @@ namespace Ryujinx.Graphics.OpenGL
(BlendingFactorSrc)blend.AlphaSrcFactor.Convert(),
(BlendingFactorDest)blend.AlphaDstFactor.Convert());
+ static bool IsDualSource(BlendFactor factor)
+ {
+ switch (factor)
+ {
+ case BlendFactor.Src1Color:
+ case BlendFactor.Src1ColorGl:
+ case BlendFactor.Src1Alpha:
+ case BlendFactor.Src1AlphaGl:
+ case BlendFactor.OneMinusSrc1Color:
+ case BlendFactor.OneMinusSrc1ColorGl:
+ case BlendFactor.OneMinusSrc1Alpha:
+ case BlendFactor.OneMinusSrc1AlphaGl:
+ return true;
+ }
+
+ return false;
+ }
+
+ EnsureFramebuffer();
+
+ _framebuffer.SetDualSourceBlend(
+ IsDualSource(blend.ColorSrcFactor) ||
+ IsDualSource(blend.ColorDstFactor) ||
+ IsDualSource(blend.AlphaSrcFactor) ||
+ IsDualSource(blend.AlphaDstFactor));
+
if (_blendConstant != blend.BlendConstant)
{
_blendConstant = blend.BlendConstant;