summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends
diff options
context:
space:
mode:
authoriwubcode <iwubcode@users.noreply.github.com>2017-09-05 22:07:47 -0500
committeriwubcode <iwubcode@users.noreply.github.com>2017-09-05 23:51:31 -0500
commit1ccfccdcf0cd44ef17d862732ed4ae1b455861ef (patch)
treebd449e72b5f39570c2581d4a03f3d47c9dfe94c8 /Source/Core/VideoBackends
parentb96e4a2bce463e61bf20463e29f3805dd405e378 (diff)
D3D: Properly handle dual source blending
Diffstat (limited to 'Source/Core/VideoBackends')
-rw-r--r--Source/Core/VideoBackends/D3D/D3DState.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/Source/Core/VideoBackends/D3D/D3DState.cpp b/Source/Core/VideoBackends/D3D/D3DState.cpp
index ab67fbf48a..b21af1f217 100644
--- a/Source/Core/VideoBackends/D3D/D3DState.cpp
+++ b/Source/Core/VideoBackends/D3D/D3DState.cpp
@@ -404,14 +404,17 @@ ID3D11BlendState* StateCache::Get(BlendingState state)
if (state.alphaupdate)
tdesc.RenderTargetWriteMask |= D3D11_COLOR_WRITE_ENABLE_ALPHA;
- static constexpr std::array<D3D11_BLEND, 8> src_factors = {
+ const bool use_dual_source = state.usedualsrc;
+ const std::array<D3D11_BLEND, 8> src_factors = {
{D3D11_BLEND_ZERO, D3D11_BLEND_ONE, D3D11_BLEND_DEST_COLOR, D3D11_BLEND_INV_DEST_COLOR,
- D3D11_BLEND_SRC1_ALPHA, D3D11_BLEND_INV_SRC1_ALPHA, D3D11_BLEND_DEST_ALPHA,
- D3D11_BLEND_INV_DEST_ALPHA}};
- static constexpr std::array<D3D11_BLEND, 8> dst_factors = {
+ use_dual_source ? D3D11_BLEND_SRC1_ALPHA : D3D11_BLEND_SRC_ALPHA,
+ use_dual_source ? D3D11_BLEND_INV_SRC1_ALPHA : D3D11_BLEND_INV_SRC_ALPHA,
+ D3D11_BLEND_DEST_ALPHA, D3D11_BLEND_INV_DEST_ALPHA}};
+ const std::array<D3D11_BLEND, 8> dst_factors = {
{D3D11_BLEND_ZERO, D3D11_BLEND_ONE, D3D11_BLEND_SRC_COLOR, D3D11_BLEND_INV_SRC_COLOR,
- D3D11_BLEND_SRC1_ALPHA, D3D11_BLEND_INV_SRC1_ALPHA, D3D11_BLEND_DEST_ALPHA,
- D3D11_BLEND_INV_DEST_ALPHA}};
+ use_dual_source ? D3D11_BLEND_SRC1_ALPHA : D3D11_BLEND_SRC_ALPHA,
+ use_dual_source ? D3D11_BLEND_INV_SRC1_ALPHA : D3D11_BLEND_INV_SRC_ALPHA,
+ D3D11_BLEND_DEST_ALPHA, D3D11_BLEND_INV_DEST_ALPHA}};
tdesc.SrcBlend = src_factors[state.srcfactor];
tdesc.SrcBlendAlpha = src_factors[state.srcfactoralpha];