Commit 70e5be36 authored by Richard Li's avatar Richard Li Committed by Commit Bot

Change blend mode in color conversion pass from kSrcOver to kSrc

The color conversion pass using kSrcOver blending mode may cause
blending error when alpha channel exists in child pass. Using kSrc
as blending mode will avoid this problem.

Bug: 1045800,1062184
Change-Id: If03bf0ff7b366f8810a11f2f02e9c57aa904d6cd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2306909
Commit-Queue: Richard Li <richard.li@intel.com>
Reviewed-by: default avatarSunny Sachanandani <sunnyps@chromium.org>
Cr-Commit-Position: refs/heads/master@{#790710}
parent 94907325
......@@ -184,6 +184,8 @@ BlendMode BlendModeFromSkXfermode(SkBlendMode mode) {
return BLEND_MODE_COLOR;
case SkBlendMode::kLuminosity:
return BLEND_MODE_LUMINOSITY;
case SkBlendMode::kSrc:
return BLEND_MODE_NONE;
default:
NOTREACHED();
return BLEND_MODE_NONE;
......
......@@ -820,6 +820,8 @@ void SurfaceAggregator::AddColorConversionPass() {
auto* shared_quad_state =
color_conversion_pass->CreateAndAppendSharedQuadState();
// Do NOT set blend mode here to SkBlendMode::kSrcOver, which will cause
// blending with empty (black) root pass when child pass has alpha.
shared_quad_state->SetAll(
/*quad_to_target_transform=*/gfx::Transform(),
/*quad_layer_rect=*/output_rect,
......@@ -827,7 +829,7 @@ void SurfaceAggregator::AddColorConversionPass() {
/*rounded_corner_bounds=*/gfx::RRectF(),
/*clip_rect=*/gfx::Rect(),
/*is_clipped=*/false, /*are_contents_opaque=*/false, /*opacity=*/1.f,
/*blend_mode=*/SkBlendMode::kSrcOver, /*sorting_context_id=*/0);
/*blend_mode=*/SkBlendMode::kSrc, /*sorting_context_id=*/0);
auto* quad =
color_conversion_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment