[Vulkan] Use dedicated alpha blend factor map for alpha srcb/dest blend
Matches D3D12. Co-authored-by: Herman S. <429230+has207@users.noreply.github.com>
This commit is contained in:
committed by
Radosław Gliński
parent
2d5b41080c
commit
53061c63fe
@@ -1126,15 +1126,37 @@ void VulkanPipelineCache::WritePipelineRenderTargetDescription(
|
||||
/* 15 */ PipelineBlendFactor::kOneMinusConstantAlpha,
|
||||
/* 16 */ PipelineBlendFactor::kSrcAlphaSaturate,
|
||||
};
|
||||
// Like kBlendFactorMap, but with the color factors changed to their alpha
|
||||
// equivalents. Alpha is scalar, so hardware treats a _COLOR factor in the
|
||||
// alpha slot as the matching _ALPHA factor.
|
||||
static constexpr PipelineBlendFactor kBlendFactorAlphaMap[32] = {
|
||||
/* 0 */ PipelineBlendFactor::kZero,
|
||||
/* 1 */ PipelineBlendFactor::kOne,
|
||||
/* 2 */ PipelineBlendFactor::kZero, // ?
|
||||
/* 3 */ PipelineBlendFactor::kZero, // ?
|
||||
/* 4 */ PipelineBlendFactor::kSrcAlpha,
|
||||
/* 5 */ PipelineBlendFactor::kOneMinusSrcAlpha,
|
||||
/* 6 */ PipelineBlendFactor::kSrcAlpha,
|
||||
/* 7 */ PipelineBlendFactor::kOneMinusSrcAlpha,
|
||||
/* 8 */ PipelineBlendFactor::kDstAlpha,
|
||||
/* 9 */ PipelineBlendFactor::kOneMinusDstAlpha,
|
||||
/* 10 */ PipelineBlendFactor::kDstAlpha,
|
||||
/* 11 */ PipelineBlendFactor::kOneMinusDstAlpha,
|
||||
/* 12 */ PipelineBlendFactor::kConstantAlpha,
|
||||
/* 13 */ PipelineBlendFactor::kOneMinusConstantAlpha,
|
||||
/* 14 */ PipelineBlendFactor::kConstantAlpha,
|
||||
/* 15 */ PipelineBlendFactor::kOneMinusConstantAlpha,
|
||||
/* 16 */ PipelineBlendFactor::kSrcAlphaSaturate,
|
||||
};
|
||||
render_target_out.src_color_blend_factor =
|
||||
kBlendFactorMap[uint32_t(blend_control.color_srcblend)];
|
||||
render_target_out.dst_color_blend_factor =
|
||||
kBlendFactorMap[uint32_t(blend_control.color_destblend)];
|
||||
render_target_out.color_blend_op = blend_control.color_comb_fcn;
|
||||
render_target_out.src_alpha_blend_factor =
|
||||
kBlendFactorMap[uint32_t(blend_control.alpha_srcblend)];
|
||||
kBlendFactorAlphaMap[uint32_t(blend_control.alpha_srcblend)];
|
||||
render_target_out.dst_alpha_blend_factor =
|
||||
kBlendFactorMap[uint32_t(blend_control.alpha_destblend)];
|
||||
kBlendFactorAlphaMap[uint32_t(blend_control.alpha_destblend)];
|
||||
render_target_out.alpha_blend_op = blend_control.alpha_comb_fcn;
|
||||
if (!command_processor_.GetVulkanDevice()
|
||||
->properties()
|
||||
|
||||
Reference in New Issue
Block a user