| Index: cc/trees/draw_property_utils.cc
|
| diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc
|
| index 605bca37d9eb7a22c1675cf580a95d62e39dbb62..a562c2f02bcb41899a7a1ce7932fae43da00c2b7 100644
|
| --- a/cc/trees/draw_property_utils.cc
|
| +++ b/cc/trees/draw_property_utils.cc
|
| @@ -430,6 +430,7 @@ void UpdateRenderSurfaceForLayer(EffectTree* effect_tree,
|
| layer->SetHasRenderSurface(IsRootLayer(layer));
|
| return;
|
| }
|
| +
|
| EffectNode* node = effect_tree->Node(layer->effect_tree_index());
|
|
|
| if (node->owner_id == layer->id() && node->data.has_render_surface)
|
| @@ -601,6 +602,23 @@ void ComputeTransforms(TransformTree* transform_tree) {
|
| transform_tree->set_needs_update(false);
|
| }
|
|
|
| +void UpdateRenderTarget(EffectTree* effect_tree,
|
| + bool can_render_to_separate_surface) {
|
| + for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) {
|
| + EffectNode* node = effect_tree->Node(i);
|
| + if (i == 1) {
|
| + // Render target on the first effect node is root.
|
| + node->data.target_id = 0;
|
| + } else if (!can_render_to_separate_surface) {
|
| + node->data.target_id = 1;
|
| + } else if (effect_tree->parent(node)->data.has_render_surface) {
|
| + node->data.target_id = node->parent_id;
|
| + } else {
|
| + node->data.target_id = effect_tree->parent(node)->data.target_id;
|
| + }
|
| + }
|
| +}
|
| +
|
| void ComputeEffects(EffectTree* effect_tree) {
|
| if (!effect_tree->needs_update())
|
| return;
|
| @@ -622,6 +640,8 @@ static void ComputeVisibleRectsInternal(
|
| }
|
| if (property_trees->transform_tree.needs_update())
|
| property_trees->clip_tree.set_needs_update(true);
|
| + UpdateRenderTarget(&property_trees->effect_tree,
|
| + property_trees->non_root_surfaces_enabled);
|
| ComputeTransforms(&property_trees->transform_tree);
|
| ComputeClips(&property_trees->clip_tree, property_trees->transform_tree,
|
| can_render_to_separate_surface);
|
| @@ -723,6 +743,10 @@ void ComputeVisibleRects(LayerImpl* root_layer,
|
| for (auto* layer : *root_layer->layer_tree_impl()) {
|
| UpdateRenderSurfaceForLayer(&property_trees->effect_tree,
|
| can_render_to_separate_surface, layer);
|
| + EffectNode* node =
|
| + property_trees->effect_tree.Node(layer->effect_tree_index());
|
| + if (node->owner_id == layer->id())
|
| + node->data.render_surface = layer->render_surface();
|
| #if DCHECK_IS_ON()
|
| if (can_render_to_separate_surface)
|
| ValidateRenderSurfaceForLayer(layer);
|
| @@ -910,7 +934,7 @@ static float LayerDrawOpacity(const LayerImpl* layer, const EffectTree& tree) {
|
| return 0.f;
|
|
|
| const EffectNode* target_node =
|
| - tree.Node(layer->render_target()->effect_tree_index());
|
| + tree.Node(layer->render_target()->EffectTreeIndex());
|
| const EffectNode* node = tree.Node(layer->effect_tree_index());
|
| if (node == target_node)
|
| return 1.f;
|
|
|