diff options
Diffstat (limited to 'source/blender/depsgraph')
12 files changed, 41 insertions, 108 deletions
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, DEG_NODE_TYPE_COPY_ON_WRITE, DEG_OPCODE_COPY_ON_WRITE); diff --git a/source/blender/depsgraph/intern/depsgraph.cc b/source/blender/depsgraph/intern/depsgraph.cc index 32cbee7597c..a247b458cc7 100644 --- a/source/blender/depsgraph/intern/depsgraph.cc +++ b/source/blender/depsgraph/intern/depsgraph.cc @@ -70,18 +70,6 @@ extern "C" { #include "intern/depsgraph_intern.h" #include "util/deg_util_foreach.h" -static bool use_copy_on_write = true; - -bool DEG_depsgraph_use_copy_on_write(void) -{ - return use_copy_on_write; -} - -void DEG_depsgraph_disable_copy_on_write(void) -{ - use_copy_on_write = false; -} - namespace DEG { static DEG_EditorUpdateIDCb deg_editor_update_id_cb = NULL; @@ -340,7 +328,7 @@ IDDepsNode *Depsgraph::add_id_node(ID *id, ID *id_cow_hint) void Depsgraph::clear_id_nodes() { /* Free memory used by ID nodes. */ - if (use_copy_on_write) { + { /* Stupid workaround to ensure we free IDs in a proper order. */ foreach (IDDepsNode *id_node, id_nodes) { if (id_node->id_cow == NULL) { diff --git a/source/blender/depsgraph/intern/depsgraph_build.cc b/source/blender/depsgraph/intern/depsgraph_build.cc index 84b9bad17c9..c39f6222a13 100644 --- a/source/blender/depsgraph/intern/depsgraph_build.cc +++ b/source/blender/depsgraph/intern/depsgraph_build.cc @@ -231,9 +231,7 @@ void DEG_graph_build_from_view_layer(Depsgraph *graph, DEG::DepsgraphRelationBuilder relation_builder(bmain, deg_graph); relation_builder.begin_build(); relation_builder.build_view_layer(scene, view_layer); - if (DEG_depsgraph_use_copy_on_write()) { - relation_builder.build_copy_on_write_relations(); - } + relation_builder.build_copy_on_write_relations(); /* Detect and solve cycles. */ DEG::deg_graph_detect_cycles(deg_graph); diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc index 8e63bc85499..e22dc331605 100644 --- a/source/blender/depsgraph/intern/depsgraph_tag.cc +++ b/source/blender/depsgraph/intern/depsgraph_tag.cc @@ -284,7 +284,7 @@ void depsgraph_tag_component(Depsgraph *graph, } } /* If component depends on copy-on-write, tag it as well. */ - if (DEG_depsgraph_use_copy_on_write() && component_node->depends_on_cow()) { + if (component_node->depends_on_cow()) { ComponentDepsNode *cow_comp = id_node->find_component(DEG_NODE_TYPE_COPY_ON_WRITE); cow_comp->tag_update(graph); diff --git a/source/blender/depsgraph/intern/eval/deg_eval.cc b/source/blender/depsgraph/intern/eval/deg_eval.cc index 95084717dad..f911383b273 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval.cc @@ -228,9 +228,6 @@ static void depsgraph_ensure_view_layer(Depsgraph *graph) * - It was tagged for update of CoW component. * This allows us to have proper view layer pointer. */ - if (!DEG_depsgraph_use_copy_on_write()) { - return; - } Scene *scene_cow = graph->scene_cow; if (!deg_copy_on_write_is_expanded(&scene_cow->id) || scene_cow->id.recalc & ID_RECALC_COPY_ON_WRITE) diff --git a/source/blender/depsgraph/intern/nodes/deg_node_id.cc b/source/blender/depsgraph/intern/nodes/deg_node_id.cc index 9f161db73ad..956c23978ab 100644 --- a/source/blender/depsgraph/intern/nodes/deg_node_id.cc +++ b/source/blender/depsgraph/intern/nodes/deg_node_id.cc @@ -112,14 +112,6 @@ void IDDepsNode::init(const ID *id, const char *UNUSED(subdata)) void IDDepsNode::init_copy_on_write(ID *id_cow_hint) { - /* Early output for non-copy-on-write case: we keep CoW pointer same as - * an original one. - */ - if (!DEG_depsgraph_use_copy_on_write()) { - UNUSED_VARS(id_cow_hint); - id_cow = id_orig; - return; - } /* Create pointer as early as possible, so we can use it for function * bindings. Rest of data we'll be copying to the new datablock when * it is actually needed. |