summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/PixelShaderManager.cpp
diff options
context:
space:
mode:
authorMarkus Wick <degasus@users.noreply.github.com>2018-01-05 23:42:43 +0100
committerGitHub <noreply@github.com>2018-01-05 23:42:43 +0100
commitdc08b73db19b8d59ec9ba373a4fb8d7d8639c9e3 (patch)
treef637ed6ba4099e0505b31283d141a0da2ff0db26 /Source/Core/VideoCommon/PixelShaderManager.cpp
parent1cf1e7cde07abf5642c48da1f9a0f82b99b9de24 (diff)
parentc709f3c2d150ed35a33a32e45f7c3fe9605f682f (diff)
Merge pull request #6141 from JonnyH/WIP/shader-framebuffer-fetch2
Implement dual-source blending in shader
Diffstat (limited to 'Source/Core/VideoCommon/PixelShaderManager.cpp')
-rw-r--r--Source/Core/VideoCommon/PixelShaderManager.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/PixelShaderManager.cpp b/Source/Core/VideoCommon/PixelShaderManager.cpp
index 0fa3614bdb..8ada00ef3b 100644
--- a/Source/Core/VideoCommon/PixelShaderManager.cpp
+++ b/Source/Core/VideoCommon/PixelShaderManager.cpp
@@ -473,6 +473,43 @@ void PixelShaderManager::SetBlendModeChanged()
constants.dither = dither;
dirty = true;
}
+ BlendingState state = {};
+ state.Generate(bpmem);
+ if (constants.blend_enable != state.blendenable)
+ {
+ constants.blend_enable = state.blendenable;
+ dirty = true;
+ }
+ if (constants.blend_src_factor != state.srcfactor)
+ {
+ constants.blend_src_factor = state.srcfactor;
+ dirty = true;
+ }
+ if (constants.blend_src_factor_alpha != state.srcfactoralpha)
+ {
+ constants.blend_src_factor_alpha = state.srcfactoralpha;
+ dirty = true;
+ }
+ if (constants.blend_dst_factor != state.dstfactor)
+ {
+ constants.blend_dst_factor = state.dstfactor;
+ dirty = true;
+ }
+ if (constants.blend_dst_factor_alpha != state.dstfactoralpha)
+ {
+ constants.blend_dst_factor_alpha = state.dstfactoralpha;
+ dirty = true;
+ }
+ if (constants.blend_subtract != state.subtract)
+ {
+ constants.blend_subtract = state.subtract;
+ dirty = true;
+ }
+ if (constants.blend_subtract_alpha != state.subtractAlpha)
+ {
+ constants.blend_subtract_alpha = state.subtractAlpha;
+ dirty = true;
+ }
s_bDestAlphaDirty = true;
}