Commit 1f609726 authored by Michael Ludwig's avatar Michael Ludwig Committed by Commit Bot

SkiaRenderer: Calculate clipping offset for backdrop filters

Needed when an RPDQ is partially offscreen

Bug: 968160, 948128
Change-Id: Ic9f400dafa9997d367fc3a93cac44e640f01ace0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1637778Reviewed-by: default avatarweiliangc <weiliangc@chromium.org>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Cr-Commit-Position: refs/heads/master@{#665242}
parent 08e4338b
...@@ -81,14 +81,6 @@ INSTANTIATE_TEST_SUITE_P(, ...@@ -81,14 +81,6 @@ INSTANTIATE_TEST_SUITE_P(,
LayerTreeTest::RENDERER_SKIA_GL, LayerTreeTest::RENDERER_SKIA_GL,
LayerTreeTest::RENDERER_SOFTWARE)); LayerTreeTest::RENDERER_SOFTWARE));
using LayerTreeHostFiltersPixelTestNonSkia = LayerTreeHostFiltersPixelTest;
// TODO(crbug.com/948128): Enable these tests for Skia.
INSTANTIATE_TEST_SUITE_P(,
LayerTreeHostFiltersPixelTestNonSkia,
::testing::Values(LayerTreeTest::RENDERER_GL,
LayerTreeTest::RENDERER_SOFTWARE));
using LayerTreeHostFiltersPixelTestGL = LayerTreeHostFiltersPixelTest; using LayerTreeHostFiltersPixelTestGL = LayerTreeHostFiltersPixelTest;
// TODO(crbug.com/948128): Enable these tests for Skia. // TODO(crbug.com/948128): Enable these tests for Skia.
...@@ -662,7 +654,7 @@ TEST_P(LayerTreeHostFiltersPixelTest, ImageRenderSurfaceScaled) { ...@@ -662,7 +654,7 @@ TEST_P(LayerTreeHostFiltersPixelTest, ImageRenderSurfaceScaled) {
.InsertBeforeExtensionASCII(GetRendererSuffix())); .InsertBeforeExtensionASCII(GetRendererSuffix()));
} }
TEST_P(LayerTreeHostFiltersPixelTestNonSkia, ZoomFilter) { TEST_P(LayerTreeHostFiltersPixelTest, ZoomFilter) {
scoped_refptr<SolidColorLayer> root = scoped_refptr<SolidColorLayer> root =
CreateSolidColorLayer(gfx::Rect(300, 300), SK_ColorWHITE); CreateSolidColorLayer(gfx::Rect(300, 300), SK_ColorWHITE);
......
...@@ -1632,8 +1632,19 @@ SkiaRenderer::DrawRPDQParams SkiaRenderer::CalculateRPDQParams( ...@@ -1632,8 +1632,19 @@ SkiaRenderer::DrawRPDQParams SkiaRenderer::CalculateRPDQParams(
// Convert CC image filters for the backdrop into a SkImageFilter root node // Convert CC image filters for the backdrop into a SkImageFilter root node
if (backdrop_filters) { if (backdrop_filters) {
DCHECK(!backdrop_filters->IsEmpty()); DCHECK(!backdrop_filters->IsEmpty());
// Must account for clipping that occurs for backdrop filters, since their
// input content has already been clipped to the output rect.
gfx::Rect deviceRect = gfx::ToEnclosingRect(cc::MathUtil::MapClippedRect(
params->content_device_transform, gfx::RectF(quad->rect)));
gfx::Rect outRect = MoveFromDrawToWindowSpace(
current_frame()->current_render_pass->output_rect);
outRect.Intersect(deviceRect);
gfx::Vector2dF offset = (deviceRect.top_right() - outRect.top_right()) +
(deviceRect.bottom_left() - outRect.bottom_left());
auto bg_paint_filter = cc::RenderSurfaceFilters::BuildImageFilter( auto bg_paint_filter = cc::RenderSurfaceFilters::BuildImageFilter(
*backdrop_filters, filter_size); *backdrop_filters, gfx::SizeF(outRect.size()), offset);
auto sk_bg_filter = auto sk_bg_filter =
bg_paint_filter ? bg_paint_filter->cached_sk_filter_ : nullptr; bg_paint_filter ? bg_paint_filter->cached_sk_filter_ : nullptr;
......
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