| Index: cc/layers/delegated_renderer_layer.cc
|
| diff --git a/cc/layers/delegated_renderer_layer.cc b/cc/layers/delegated_renderer_layer.cc
|
| index a92b70106deefab1a3b5872cda4204442a24b8f2..4cc0bf86ba4fdf55abcf7e5f3d65c371110daaae 100644
|
| --- a/cc/layers/delegated_renderer_layer.cc
|
| +++ b/cc/layers/delegated_renderer_layer.cc
|
| @@ -107,7 +107,7 @@ void DelegatedRendererLayer::SetDisplaySize(gfx::Size size) {
|
| SetNeedsCommit();
|
| }
|
|
|
| -static bool FrameDataHasFilter(DelegatedFrameData* frame) {
|
| +static bool FrameDataRequiresOffscreenContext(const DelegatedFrameData* frame) {
|
| for (size_t i = 0; i < frame->render_pass_list.size(); ++i) {
|
| const QuadList& quad_list = frame->render_pass_list[i]->quad_list;
|
| for (size_t j = 0; j < quad_list.size(); ++j) {
|
| @@ -116,7 +116,9 @@ static bool FrameDataHasFilter(DelegatedFrameData* frame) {
|
| const RenderPassDrawQuad* render_pass_quad =
|
| RenderPassDrawQuad::MaterialCast(quad_list[j]);
|
| if (!render_pass_quad->filters.IsEmpty() ||
|
| - !render_pass_quad->background_filters.IsEmpty())
|
| + !render_pass_quad->background_filters.IsEmpty() ||
|
| + render_pass_quad->shared_quad_state->blend_mode !=
|
| + SkXfermode::kSrcOver_Mode)
|
| return true;
|
| }
|
| }
|
| @@ -135,7 +137,8 @@ bool DelegatedRendererLayer::Update(ResourceUpdateQueue* queue,
|
|
|
| // If any quad has a filter operation, then we need a filter context to draw
|
| // this layer's content.
|
| - if (FrameDataHasFilter(frame_data_) && layer_tree_host())
|
| + if (layer_tree_host() && !layer_tree_host()->needs_offscreen_context() &&
|
| + FrameDataRequiresOffscreenContext(frame_data_))
|
| layer_tree_host()->set_needs_filter_context();
|
|
|
| return true;
|
|
|