diff options
author | Sergey Sharybin <sergey@blender.org> | 2021-10-13 13:57:49 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey@blender.org> | 2021-10-13 16:47:07 +0300 |
commit | c29f20a52151b90734edb7b4ebbd9b7b49e65d73 (patch) | |
tree | 665ff4d505b5b643cc086ac46b9a5711723655c7 /source/blender/depsgraph/intern | |
parent | e659f78d3e5892f98c4855907a9cf91af12638e8 (diff) |
Cleanup: Remove unused code paths in the depsgraph copy-on-write
Seems to be residue from an early 2.80 days: the placeholder code path
is no longer used.
Remove all the tricky code for this, and make it clear that the
`deg_expand_copy_on_write_datablock` is used on an non-expanded
datablock.
Should be no functional changes. And should help simplify D12850.
Differential Revision: https://developer.blender.org/D12852
Diffstat (limited to 'source/blender/depsgraph/intern')
-rw-r--r-- | source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc | 66 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.h | 12 |
2 files changed, 8 insertions, 70 deletions
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc index a844d23b558..b4a91944b65 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc @@ -511,12 +511,6 @@ inline bool check_datablock_expanded(const ID *id_cow) struct RemapCallbackUserData { /* Dependency graph for which remapping is happening. */ const Depsgraph *depsgraph; - /* Create placeholder for ID nodes for cases when we need to remap original - * ID to it[s CoW version but we don't have required ID node yet. - * - * This happens when expansion happens a ta construction time. */ - DepsgraphNodeBuilder *node_builder; - bool create_placeholders; }; int foreach_libblock_remap_callback(LibraryIDLinkCallbackData *cb_data) @@ -526,38 +520,11 @@ int foreach_libblock_remap_callback(LibraryIDLinkCallbackData *cb_data) return IDWALK_RET_NOP; } - ID *id_self = cb_data->id_self; RemapCallbackUserData *user_data = (RemapCallbackUserData *)cb_data->user_data; const Depsgraph *depsgraph = user_data->depsgraph; ID *id_orig = *id_p; if (deg_copy_on_write_is_needed(id_orig)) { - ID *id_cow; - if (user_data->create_placeholders) { - /* Special workaround to stop creating temp datablocks for - * objects which are coming from scene's collection and which - * are never linked to any of layers. - * - * TODO(sergey): Ideally we need to tell ID looper to ignore - * those or at least make it more reliable check where the - * pointer is coming from. */ - const ID_Type id_type = GS(id_orig->name); - const ID_Type id_type_self = GS(id_self->name); - if (id_type == ID_OB && id_type_self == ID_SCE) { - IDNode *id_node = depsgraph->find_id_node(id_orig); - if (id_node == nullptr) { - id_cow = id_orig; - } - else { - id_cow = id_node->id_cow; - } - } - else { - id_cow = user_data->node_builder->ensure_cow_id(id_orig); - } - } - else { - id_cow = depsgraph->get_cow_id(id_orig); - } + ID *id_cow = depsgraph->get_cow_id(id_orig); BLI_assert(id_cow != nullptr); DEG_COW_PRINT( " Remapping datablock for %s: id_orig=%p id_cow=%p\n", id_orig->name, id_orig, id_cow); @@ -834,34 +801,28 @@ int foreach_libblock_validate_callback(LibraryIDLinkCallbackData *cb_data) return IDWALK_RET_NOP; } -} // namespace - /* Actual implementation of logic which "expands" all the data which was not * yet copied-on-write. * * NOTE: Expects that CoW datablock is empty. */ -ID *deg_expand_copy_on_write_datablock(const Depsgraph *depsgraph, - const IDNode *id_node, - DepsgraphNodeBuilder *node_builder, - bool create_placeholders) +ID *deg_expand_copy_on_write_datablock(const Depsgraph *depsgraph, const IDNode *id_node) { const ID *id_orig = id_node->id_orig; ID *id_cow = id_node->id_cow; const int id_cow_recalc = id_cow->recalc; + /* No need to expand such datablocks, their copied ID is same as original * one already. */ if (!deg_copy_on_write_is_needed(id_orig)) { return id_cow; } + DEG_COW_PRINT( "Expanding datablock for %s: id_orig=%p id_cow=%p\n", id_orig->name, id_orig, id_cow); + /* Sanity checks. */ - /* NOTE: Disabled for now, conflicts when re-using evaluated datablock when - * rebuilding dependencies. */ - if (check_datablock_expanded(id_cow) && create_placeholders) { - deg_free_copy_on_write_datablock(id_cow); - } - // BLI_assert(check_datablock_expanded(id_cow) == false); + BLI_assert(check_datablock_expanded(id_cow) == false); + /* Copy data from original ID to a copied version. */ /* TODO(sergey): Avoid doing full ID copy somehow, make Mesh to reference * original geometry arrays for until those are modified. */ @@ -914,8 +875,6 @@ ID *deg_expand_copy_on_write_datablock(const Depsgraph *depsgraph, /* Perform remapping of the nodes. */ RemapCallbackUserData user_data = {nullptr}; user_data.depsgraph = depsgraph; - user_data.node_builder = node_builder; - user_data.create_placeholders = create_placeholders; BKE_library_foreach_ID_link(nullptr, id_cow, foreach_libblock_remap_callback, @@ -928,16 +887,7 @@ ID *deg_expand_copy_on_write_datablock(const Depsgraph *depsgraph, return id_cow; } -/* NOTE: Depsgraph is supposed to have ID node already. */ -ID *deg_expand_copy_on_write_datablock(const Depsgraph *depsgraph, - ID *id_orig, - DepsgraphNodeBuilder *node_builder, - bool create_placeholders) -{ - IDNode *id_node = depsgraph->find_id_node(id_orig); - BLI_assert(id_node != nullptr); - return deg_expand_copy_on_write_datablock(depsgraph, id_node, node_builder, create_placeholders); -} +} // namespace ID *deg_update_copy_on_write_datablock(const Depsgraph *depsgraph, const IDNode *id_node) { diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.h b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.h index d0bb841caab..70e510b5ef9 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.h +++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.h @@ -50,18 +50,6 @@ struct Depsgraph; class DepsgraphNodeBuilder; struct IDNode; -/* Get fully expanded (ready for use) copy-on-write data-block for the given - * original data-block. - */ -ID *deg_expand_copy_on_write_datablock(const struct Depsgraph *depsgraph, - const IDNode *id_node, - DepsgraphNodeBuilder *node_builder = nullptr, - bool create_placeholders = false); -ID *deg_expand_copy_on_write_datablock(const struct Depsgraph *depsgraph, - struct ID *id_orig, - DepsgraphNodeBuilder *node_builder = nullptr, - bool create_placeholders = false); - /* Makes sure given CoW data-block is brought back to state of the original * data-block. */ |