Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-04-12 12:03:24 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-04-12 12:05:18 +0300
commit31067c975759255c013a2b4d872082155d41479e (patch)
treee0a99168cf06933404e2fe892719b24d4e5c4b29 /source/blender/depsgraph/intern
parent15698f99070f4d196dbfbac63d3634019c4d1ca9 (diff)
Depsgraph: Move CoW tag to ID datablock tag
Unless there is an external action from an user, there should not be need in re-copying original datablock to a copied one. This brings performance up from 5fps to 11fps with Spring runcycle (performance in master is 14fps).
Diffstat (limited to 'source/blender/depsgraph/intern')
-rw-r--r--source/blender/depsgraph/intern/depsgraph_tag.cc7
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval_flush.cc20
2 files changed, 9 insertions, 18 deletions
diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc
index a230732291c..d1de12f4591 100644
--- a/source/blender/depsgraph/intern/depsgraph_tag.cc
+++ b/source/blender/depsgraph/intern/depsgraph_tag.cc
@@ -280,6 +280,13 @@ void depsgraph_tag_component(Depsgraph *graph,
operation_node->tag_update(graph);
}
}
+ /* If component depends on copy-on-write, tag it as well. */
+ if (DEG_depsgraph_use_copy_on_write() && component_node->depends_on_cow()) {
+ ComponentDepsNode *cow_comp =
+ id_node->find_component(DEG_NODE_TYPE_COPY_ON_WRITE);
+ cow_comp->tag_update(graph);
+ id_node->id_orig->recalc |= ID_RECALC_COPY_ON_WRITE;
+ }
}
/* This is a tag compatibility with legacy code.
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc
index c22d27c118b..f7f55610d22 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc
@@ -135,10 +135,8 @@ BLI_INLINE void flush_handle_id_node(IDDepsNode *id_node)
}
/* TODO(sergey): We can reduce number of arguments here. */
-BLI_INLINE void flush_handle_component_node(Depsgraph *graph,
- IDDepsNode *id_node,
+BLI_INLINE void flush_handle_component_node(IDDepsNode *id_node,
ComponentDepsNode *comp_node,
- bool use_copy_on_write,
FlushQueue *queue)
{
/* We only handle component once. */
@@ -146,17 +144,6 @@ BLI_INLINE void flush_handle_component_node(Depsgraph *graph,
return;
}
comp_node->done = COMPONENT_STATE_DONE;
- /* Currently this is needed to get object->mesh to be replaced with
- * original mesh (rather than being evaluated_mesh).
- *
- * TODO(sergey): This is something we need to avoid.
- */
- if (use_copy_on_write && comp_node->depends_on_cow()) {
- ComponentDepsNode *cow_comp =
- id_node->find_component(DEG_NODE_TYPE_COPY_ON_WRITE);
- cow_comp->tag_update(graph);
- id_node->id_orig->recalc |= ID_RECALC_COPY_ON_WRITE;
- }
/* Tag all required operations in component for update. */
foreach (OperationDepsNode *op, comp_node->operations) {
/* We don't want to flush tags in "upstream" direction for
@@ -267,7 +254,6 @@ void flush_editors_id_update(Main *bmain,
*/
void deg_graph_flush_updates(Main *bmain, Depsgraph *graph)
{
- const bool use_copy_on_write = DEG_depsgraph_use_copy_on_write();
/* Sanity checks. */
BLI_assert(bmain != NULL);
BLI_assert(graph != NULL);
@@ -297,10 +283,8 @@ void deg_graph_flush_updates(Main *bmain, Depsgraph *graph)
ComponentDepsNode *comp_node = op_node->owner;
IDDepsNode *id_node = comp_node->owner;
flush_handle_id_node(id_node);
- flush_handle_component_node(graph,
- id_node,
+ flush_handle_component_node(id_node,
comp_node,
- use_copy_on_write,
&queue);
/* Flush to nodes along links. */
op_node = flush_schedule_children(op_node, &queue);