[Bf-blender-cvs] [d4daf9c00d3] blender2.8: Depsgraph: Forbid update flush to go from copy-on-write to animation
Sergey Sharybin
noreply at git.blender.org
Thu May 31 18:11:10 CEST 2018
Commit: d4daf9c00d36a2dc7073a0a0716fec1936b212da
Author: Sergey Sharybin
Date: Thu May 31 12:54:42 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBd4daf9c00d36a2dc7073a0a0716fec1936b212da
Depsgraph: Forbid update flush to go from copy-on-write to animation
===================================================================
M source/blender/depsgraph/intern/builder/deg_builder_relations.cc
===================================================================
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index a422de5b9a4..1833f19d4e5 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -2112,6 +2112,7 @@ void DepsgraphRelationBuilder::build_nested_shapekey(ID *owner, Key *key)
void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node)
{
ID *id_orig = id_node->id_orig;
+ ID_Type id_type = GS(id_orig->name);
TimeSourceKey time_source_key;
OperationKey copy_on_write_key(id_orig,
@@ -2135,12 +2136,18 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node
/* Component explicitly requests to not add relation. */
continue;
}
+ int rel_flag = 0;
+ if (comp_node->type == DEG_NODE_TYPE_ANIMATION && id_type != ID_AC) {
+ rel_flag |= DEPSREL_FLAG_NO_FLUSH;
+ }
/* All entry operations of each component should wait for a proper
* copy of ID.
*/
OperationDepsNode *op_entry = comp_node->get_entry_operation();
if (op_entry != NULL) {
- graph_->add_new_relation(op_cow, op_entry, "CoW Dependency");
+ DepsRelation *rel = graph_->add_new_relation(
+ op_cow, op_entry, "CoW Dependency");
+ rel->flag |= rel_flag;
}
/* All dangling operations should also be executed after copy-on-write. */
GHASH_FOREACH_BEGIN(OperationDepsNode *, op_node, comp_node->operations_map)
@@ -2149,22 +2156,27 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node
continue;
}
if (op_node->inlinks.size() == 0) {
- graph_->add_new_relation(op_cow, op_node, "CoW Dependency");
+ DepsRelation *rel = graph_->add_new_relation(
+ op_cow, op_node, "CoW Dependency");
+ rel->flag |= rel_flag;
}
else {
bool has_same_comp_dependency = false;
- foreach (DepsRelation *rel, op_node->inlinks) {
- if (rel->from->type != DEG_NODE_TYPE_OPERATION) {
+ foreach (DepsRelation *rel_current, op_node->inlinks) {
+ if (rel_current->from->type != DEG_NODE_TYPE_OPERATION) {
continue;
}
- OperationDepsNode *op_node_from = (OperationDepsNode *)rel->from;
+ OperationDepsNode *op_node_from =
+ (OperationDepsNode *)rel_current->from;
if (op_node_from->owner == op_node->owner) {
has_same_comp_dependency = true;
break;
}
}
if (!has_same_comp_dependency) {
- graph_->add_new_relation(op_cow, op_node, "CoW Dependency");
+ DepsRelation *rel = graph_->add_new_relation(
+ op_cow, op_node, "CoW Dependency");
+ rel->flag |= rel_flag;
}
}
}
More information about the Bf-blender-cvs
mailing list