[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