From 8f647c548dd06f5fea330fde993ef7cbfe5c4731 Mon Sep 17 00:00:00 2001 From: Gliniak Date: Thu, 24 Apr 2025 19:30:47 +0200 Subject: [PATCH] [D3D12] Removed GBV warning related to incorrect blend setup in specific conditions --- src/xenia/gpu/d3d12/pipeline_cache.cc | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/xenia/gpu/d3d12/pipeline_cache.cc b/src/xenia/gpu/d3d12/pipeline_cache.cc index 4e898c244..fbe6f8697 100644 --- a/src/xenia/gpu/d3d12/pipeline_cache.cc +++ b/src/xenia/gpu/d3d12/pipeline_cache.cc @@ -3170,13 +3170,21 @@ ID3D12PipelineState* PipelineCache::CreateD3D12Pipeline( rt.dest_blend_alpha != PipelineBlendFactor::kZero || rt.blend_op_alpha != xenos::BlendOp::kAdd) { blend_desc.BlendEnable = true; - blend_desc.SrcBlend = kBlendFactorMap[uint32_t(rt.src_blend)]; - blend_desc.DestBlend = kBlendFactorMap[uint32_t(rt.dest_blend)]; blend_desc.BlendOp = kBlendOpMap[uint32_t(rt.blend_op)]; - blend_desc.SrcBlendAlpha = - kBlendFactorMap[uint32_t(rt.src_blend_alpha)]; - blend_desc.DestBlendAlpha = - kBlendFactorMap[uint32_t(rt.dest_blend_alpha)]; + if (blend_desc.BlendOp == D3D12_BLEND_OP_MIN || + blend_desc.BlendOp == D3D12_BLEND_OP_MAX) { + blend_desc.SrcBlend = D3D12_BLEND_ONE; + blend_desc.DestBlend = D3D12_BLEND_ONE; + blend_desc.SrcBlendAlpha = D3D12_BLEND_ONE; + blend_desc.DestBlendAlpha = D3D12_BLEND_ONE; + } else { + blend_desc.SrcBlend = kBlendFactorMap[uint32_t(rt.src_blend)]; + blend_desc.DestBlend = kBlendFactorMap[uint32_t(rt.dest_blend)]; + blend_desc.SrcBlendAlpha = + kBlendFactorMap[uint32_t(rt.src_blend_alpha)]; + blend_desc.DestBlendAlpha = + kBlendFactorMap[uint32_t(rt.dest_blend_alpha)]; + } blend_desc.BlendOpAlpha = kBlendOpMap[uint32_t(rt.blend_op_alpha)]; } blend_desc.RenderTargetWriteMask = rt.write_mask;