Commit 977c68a2 authored by Mason Freed's avatar Mason Freed Committed by Commit Bot

Do not draw opacity:0 backdrop-filters in software renderer

In the case that the element with backdrop-filter also has
opacity set to zero, there is no need to perform the backdrop
filtering operation. This also avoids degradation of the painted
output when backdrop_filter_quality is < 1 and opacity is 0,
as in crbug.com/1002225.

Bug: 1002225
Change-Id: I8334f6cc46f18eeda412cab7b885b1612c0315a1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1833925
Commit-Queue: vmpstr <vmpstr@chromium.org>
Reviewed-by: default avatarvmpstr <vmpstr@chromium.org>
Auto-Submit: Mason Freed <masonfreed@chromium.org>
Cr-Commit-Position: refs/heads/master@{#702023}
parent 0bb0abd2
...@@ -649,9 +649,12 @@ void SoftwareRenderer::GenerateMipmap() { ...@@ -649,9 +649,12 @@ void SoftwareRenderer::GenerateMipmap() {
} }
bool SoftwareRenderer::ShouldApplyBackdropFilters( bool SoftwareRenderer::ShouldApplyBackdropFilters(
const cc::FilterOperations* backdrop_filters) const { const cc::FilterOperations* backdrop_filters,
const RenderPassDrawQuad* quad) const {
if (!backdrop_filters) if (!backdrop_filters)
return false; return false;
if (quad->shared_quad_state->opacity == 0.f)
return false;
DCHECK(!backdrop_filters->IsEmpty()); DCHECK(!backdrop_filters->IsEmpty());
return true; return true;
} }
...@@ -755,7 +758,7 @@ sk_sp<SkShader> SoftwareRenderer::GetBackdropFilterShader( ...@@ -755,7 +758,7 @@ sk_sp<SkShader> SoftwareRenderer::GetBackdropFilterShader(
SkTileMode content_tile_mode) const { SkTileMode content_tile_mode) const {
const cc::FilterOperations* backdrop_filters = const cc::FilterOperations* backdrop_filters =
BackdropFiltersForPass(quad->render_pass_id); BackdropFiltersForPass(quad->render_pass_id);
if (!ShouldApplyBackdropFilters(backdrop_filters)) if (!ShouldApplyBackdropFilters(backdrop_filters, quad))
return nullptr; return nullptr;
base::Optional<gfx::RRectF> backdrop_filter_bounds_input = base::Optional<gfx::RRectF> backdrop_filter_bounds_input =
BackdropFilterBoundsForPass(quad->render_pass_id); BackdropFilterBoundsForPass(quad->render_pass_id);
......
...@@ -79,8 +79,8 @@ class VIZ_SERVICE_EXPORT SoftwareRenderer : public DirectRenderer { ...@@ -79,8 +79,8 @@ class VIZ_SERVICE_EXPORT SoftwareRenderer : public DirectRenderer {
void DrawTextureQuad(const TextureDrawQuad* quad); void DrawTextureQuad(const TextureDrawQuad* quad);
void DrawTileQuad(const TileDrawQuad* quad); void DrawTileQuad(const TileDrawQuad* quad);
void DrawUnsupportedQuad(const DrawQuad* quad); void DrawUnsupportedQuad(const DrawQuad* quad);
bool ShouldApplyBackdropFilters( bool ShouldApplyBackdropFilters(const cc::FilterOperations* backdrop_filters,
const cc::FilterOperations* backdrop_filters) const; const RenderPassDrawQuad* quad) const;
sk_sp<SkImage> ApplyImageFilter(SkImageFilter* filter, sk_sp<SkImage> ApplyImageFilter(SkImageFilter* filter,
const RenderPassDrawQuad* quad, const RenderPassDrawQuad* quad,
const SkBitmap& to_filter, const SkBitmap& to_filter,
......
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