[Bf-blender-cvs] [f56a9fbad52] blender2.8: Depsgraph: Remove the "disable-copy-on-write" option completely

Joshua Leung noreply at git.blender.org
Thu May 31 13:49:30 CEST 2018


Commit: f56a9fbad528c7aebce23f065842aa71450c75eb
Author: Joshua Leung
Date:   Thu May 31 13:42:55 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBf56a9fbad528c7aebce23f065842aa71450c75eb

Depsgraph: Remove the "disable-copy-on-write" option completely

After discussion with Sergey and Dalai, we have decided to remove
this option completely. We're getting to the point where it is almost
impossible to really use 2.8 without COW, and keeping the old option
running ends up diverting dev resources away towards tracking down
and fixing problems with a parallel system that will be going away.

===================================================================

M	source/blender/blenkernel/intern/DerivedMesh.c
M	source/blender/depsgraph/DEG_depsgraph.h
M	source/blender/depsgraph/intern/builder/deg_builder.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.h
M	source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M	source/blender/depsgraph/intern/depsgraph.cc
M	source/blender/depsgraph/intern/depsgraph_build.cc
M	source/blender/depsgraph/intern/depsgraph_tag.cc
M	source/blender/depsgraph/intern/eval/deg_eval.cc
M	source/blender/depsgraph/intern/nodes/deg_node_id.cc
M	source/creator/creator_args.c

===================================================================

diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 3c9e0efa12e..8de4b7f741d 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -2934,9 +2934,6 @@ static bool calc_modifiers_skip_orco(Depsgraph *depsgraph,
 
 static void mesh_finalize_eval(Object *object)
 {
-	if (!DEG_depsgraph_use_copy_on_write()) {
-		return;
-	}
 	Mesh *mesh = (Mesh *)object->data;
 	Mesh *mesh_eval = object->runtime.mesh_eval;
 	/* Special Tweaks for cases when evaluated mesh came from
diff --git a/source/blender/depsgraph/DEG_depsgraph.h b/source/blender/depsgraph/DEG_depsgraph.h
index d79ee9aa86b..fbd267924a9 100644
--- a/source/blender/depsgraph/DEG_depsgraph.h
+++ b/source/blender/depsgraph/DEG_depsgraph.h
@@ -91,9 +91,6 @@ enum {
 extern "C" {
 #endif
 
-bool DEG_depsgraph_use_copy_on_write(void);
-void DEG_depsgraph_disable_copy_on_write(void);
-
 /* ************************************************ */
 /* Depsgraph API */
 
diff --git a/source/blender/depsgraph/intern/builder/deg_builder.cc b/source/blender/depsgraph/intern/builder/deg_builder.cc
index 2fcad233044..e2fc1efd455 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder.cc
@@ -46,7 +46,6 @@ namespace DEG {
 
 void deg_graph_build_finalize(Main *bmain, Depsgraph *graph)
 {
-	const bool use_copy_on_write = DEG_depsgraph_use_copy_on_write();
 	/* Re-tag IDs for update if it was tagged before the relations
 	 * update tag.
 	 */
@@ -59,9 +58,7 @@ void deg_graph_build_finalize(Main *bmain, Depsgraph *graph)
 		/* TODO(sergey): This is not ideal at all, since this forces
 		 * re-evaluaiton of the whole tree.
 		 */
-		if (use_copy_on_write) {
-			DEG_id_tag_update_ex(bmain, id_node->id_orig, DEG_TAG_COPY_ON_WRITE);
-		}
+		DEG_id_tag_update_ex(bmain, id_node->id_orig, DEG_TAG_COPY_ON_WRITE);
 	}
 }
 
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index fbf94293236..677dcfbfb8d 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -150,9 +150,6 @@ DepsgraphNodeBuilder::~DepsgraphNodeBuilder()
 
 IDDepsNode *DepsgraphNodeBuilder::add_id_node(ID *id)
 {
-	if (!DEG_depsgraph_use_copy_on_write()) {
-		return graph_->add_id_node(id);
-	}
 	IDDepsNode *id_node = NULL;
 	ID *id_cow = (ID *)BLI_ghash_lookup(cow_id_hash_, id);
 	if (id_cow != NULL) {
@@ -324,22 +321,21 @@ ID *DepsgraphNodeBuilder::ensure_cow_id(ID *id_orig)
 
 /* **** Build functions for entity nodes **** */
 
-void DepsgraphNodeBuilder::begin_build() {
-	if (DEG_depsgraph_use_copy_on_write()) {
-		/* Store existing copy-on-write versions of datablock, so we can re-use
-		 * them for new ID nodes.
-		 */
-		cow_id_hash_ = BLI_ghash_ptr_new("Depsgraph id hash");
-		foreach (IDDepsNode *id_node, graph_->id_nodes) {
-			if (deg_copy_on_write_is_expanded(id_node->id_cow)) {
-				if (id_node->id_orig == id_node->id_cow) {
-					continue;
-				}
-				BLI_ghash_insert(cow_id_hash_,
-				                 id_node->id_orig,
-				                 id_node->id_cow);
-				id_node->id_cow = NULL;
+void DepsgraphNodeBuilder::begin_build()
+{
+	/* Store existing copy-on-write versions of datablock, so we can re-use
+	 * them for new ID nodes.
+	 */
+	cow_id_hash_ = BLI_ghash_ptr_new("Depsgraph id hash");
+	foreach (IDDepsNode *id_node, graph_->id_nodes) {
+		if (deg_copy_on_write_is_expanded(id_node->id_cow)) {
+			if (id_node->id_orig == id_node->id_cow) {
+				continue;
 			}
+			BLI_ghash_insert(cow_id_hash_,
+			                 id_node->id_orig,
+			                 id_node->id_cow);
+			id_node->id_cow = NULL;
 		}
 	}
 
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index 8b9d2d1a010..b7c5a33f2c0 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -33,7 +33,7 @@
 #include "intern/builder/deg_builder_map.h"
 #include "intern/depsgraph_types.h"
 
-#include "DEG_depsgraph.h"  /* used for DEG_depsgraph_use_copy_on_write() */
+#include "DEG_depsgraph.h"
 
 struct Base;
 struct CacheFile;
@@ -92,12 +92,7 @@ struct DepsgraphNodeBuilder {
 	/* For a given COW datablock get corresponding original one. */
 	template<typename T>
 	T *get_orig_datablock(const T *cow) const {
-		if (DEG_depsgraph_use_copy_on_write()) {
-			return (T *)cow->id.orig_id;
-		}
-		else {
-			return (T *)cow;
-		}
+		return (T *)cow->id.orig_id;
 	}
 
 	void begin_build();
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
index c48381481f5..d3c4ce01674 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
@@ -145,16 +145,8 @@ void DepsgraphNodeBuilder::build_splineik_pose(Object *object,
 void DepsgraphNodeBuilder::build_rig(Object *object)
 {
 	bArmature *armature = (bArmature *)object->data;
-	Scene *scene_cow;
-	Object *object_cow;
-	if (DEG_depsgraph_use_copy_on_write()) {
-		scene_cow = get_cow_datablock(scene_);
-		object_cow = get_cow_datablock(object);
-	}
-	else {
-		scene_cow = scene_;
-		object_cow = object;
-	}
+	Scene *scene_cow = get_cow_datablock(scene_);
+	Object *object_cow = get_cow_datablock(object);
 	OperationDepsNode *op_node;
 
 	/* Animation and/or drivers linking posebones to base-armature used to
@@ -324,13 +316,7 @@ void DepsgraphNodeBuilder::build_proxy_rig(Object *object)
 {
 	bArmature *arm = (bArmature *)object->data;
 	OperationDepsNode *op_node;
-	Object *object_cow;
-	if (DEG_depsgraph_use_copy_on_write()) {
-		object_cow = get_cow_datablock(object);
-	}
-	else {
-		object_cow = object;
-	}
+	Object *object_cow = get_cow_datablock(object);
 	/* Sanity check. */
 	BLI_assert(object->pose != NULL);
 	/* Animation. */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
index fd4b975e53f..3fc97ee3fcf 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
@@ -96,13 +96,7 @@ void DepsgraphNodeBuilder::build_view_layer(
 	scene_ = scene;
 	view_layer_ = view_layer;
 	/* Get pointer to a CoW version of scene ID. */
-	Scene *scene_cow;
-	if (DEG_depsgraph_use_copy_on_write()) {
-		scene_cow = get_cow_datablock(scene);
-	}
-	else {
-		scene_cow = scene;
-	}
+	Scene *scene_cow = get_cow_datablock(scene);
 	/* Scene objects. */
 	int select_color = 1;
 	/* NOTE: Base is used for function bindings as-is, so need to pass CoW base,
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index c4be03eee8c..a422de5b9a4 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -1028,14 +1028,12 @@ void DepsgraphRelationBuilder::build_animdata_curves_targets(
 		/* It is possible that animation is writing to a nested ID datablock,
 		 * need to make sure animation is evaluated after target ID is copied.
 		 */
-		if (DEG_depsgraph_use_copy_on_write()) {
-			const IDDepsNode *id_node_from = operation_from->owner->owner;
-			const IDDepsNode *id_node_to = operation_to->owner->owner;
-			if (id_node_from != id_node_to) {
-				ComponentKey cow_key(id_node_to->id_orig,
-				                     DEG_NODE_TYPE_COPY_ON_WRITE);
-				add_relation(cow_key, adt_key, "Target CoW -> Animation", true);
-			}
+		const IDDepsNode *id_node_from = operation_from->owner->owner;
+		const IDDepsNode *id_node_to = operation_to->owner->owner;
+		if (id_node_from != id_node_to) {
+			ComponentKey cow_key(id_node_to->id_orig,
+			                     DEG_NODE_TYPE_COPY_ON_WRITE);
+			add_relation(cow_key, adt_key, "Target CoW -> Animation", true);
 		}
 	}
 }
@@ -1209,7 +1207,7 @@ void DepsgraphRelationBuilder::build_driver_data(ID *id, FCurve *fcu)
 		 * datablock, which means driver execution should wait for that
 		 * datablock to be copied.
 		 */
-		if (DEG_depsgraph_use_copy_on_write()) {
+		{
 			PointerRNA id_ptr;
 			PointerRNA ptr;
 			RNA_id_pointer_create(id, &id_ptr);
@@ -1886,18 +1884,16 @@ void DepsgraphRelationBuilder::build_lamp(Object *object)
 		build_nested_nodetree(&lamp->id, lamp->nodetree);
 	}
 
-	if (DEG_depsgraph_use_copy_on_write()) {
-		/* Make sure copy on write of lamp data is always properly updated for
-		 * visible lamps.
-		 */
-		OperationKey ob_copy_on_write_key(&object->id,
-		                                  DEG_NODE_TYPE_COPY_ON_WRITE,
-		                                  DEG_OPCODE_COPY_ON_WRITE);
-		OperationKey lamp_copy_on_write_key(&lamp->id,
-		                                    DEG_NODE_TYPE_COPY_ON_WRITE,
-		                                    DEG_OPCODE_COPY_ON_WRITE);
-		add_relation(lamp_copy_on_write_key, ob_copy_on_write_key, "Eval Order");
-	}
+	/* Make sure copy on write of lamp data is always properly updated for
+	 * visible lamps.
+	 */
+	OperationKey ob_copy_on_write_key(&object->id,
+	                                  DEG_NODE_TYPE_COPY_ON_WRITE,
+	                                  DEG_OPCODE_COPY_ON_WRITE);
+	OperationKey lamp_copy_on_write_key(&lamp->id,
+	                                    DEG_NODE_TYPE_COPY_ON_WRITE,
+	                                    DEG_OPCODE_COPY_ON_WRITE);
+	add_relation(lamp_copy_on_write_key, ob_copy_on_write_key, "Eval Order");
 }
 
 void DepsgraphRelationBuilder::build_nodetree(bNodeTree *ntree)
@@ -2085,9 +2081,6 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations()
  */
 void DepsgraphRelationBuilder::build_nested_datablock(ID *owner, ID *id)
 {
-	if (!DEG_depsgraph_use_copy_on_write()) {
-		return;
-	}
 	OperationKey owner_copy_on_write_key(owner,
 	                              

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list