[Bf-blender-cvs] [c29f20a5215] master: Cleanup: Remove unused code paths in the depsgraph copy-on-write

Sergey Sharybin noreply at git.blender.org
Wed Oct 13 15:47:55 CEST 2021


Commit: c29f20a52151b90734edb7b4ebbd9b7b49e65d73
Author: Sergey Sharybin
Date:   Wed Oct 13 12:57:49 2021 +0200
Branches: master
https://developer.blender.org/rBc29f20a52151b90734edb7b4ebbd9b7b49e65d73

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

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

M	source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
M	source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.h

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

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.
  */



More information about the Bf-blender-cvs mailing list