[Bf-blender-cvs] [aa0c2c0f47c] master: Cleanup: move some data from bNodeTree to run-time data

Jacques Lucke noreply at git.blender.org
Wed Nov 23 14:05:53 CET 2022


Commit: aa0c2c0f47cfee729d5aa8dccaff0b73f1837dc4
Author: Jacques Lucke
Date:   Wed Nov 23 14:05:30 2022 +0100
Branches: master
https://developer.blender.org/rBaa0c2c0f47cfee729d5aa8dccaff0b73f1837dc4

Cleanup: move some data from bNodeTree to run-time data

No functional changes are expected.

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

M	source/blender/blenkernel/BKE_node_runtime.hh
M	source/blender/blenkernel/intern/node.cc
M	source/blender/blenkernel/intern/texture.cc
M	source/blender/compositor/intern/COM_ExecutionGroup.cc
M	source/blender/compositor/intern/COM_ExecutionSystem.cc
M	source/blender/compositor/intern/COM_FullFrameExecutionModel.cc
M	source/blender/compositor/intern/COM_NodeOperation.h
M	source/blender/compositor/intern/COM_TiledExecutionModel.cc
M	source/blender/compositor/intern/COM_compositor.cc
M	source/blender/compositor/operations/COM_OutputFileOperation.cc
M	source/blender/compositor/operations/COM_TextureOperation.cc
M	source/blender/editors/sculpt_paint/paint_cursor.cc
M	source/blender/editors/sculpt_paint/paint_image.cc
M	source/blender/editors/sculpt_paint/sculpt.cc
M	source/blender/editors/space_node/node_edit.cc
M	source/blender/editors/space_node/node_relationships.cc
M	source/blender/makesdna/DNA_node_types.h
M	source/blender/nodes/shader/node_shader_tree.cc
M	source/blender/nodes/texture/node_texture_tree.cc
M	source/blender/render/intern/pipeline.cc

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

diff --git a/source/blender/blenkernel/BKE_node_runtime.hh b/source/blender/blenkernel/BKE_node_runtime.hh
index 3e712ea6523..9fddd4ec4b9 100644
--- a/source/blender/blenkernel/BKE_node_runtime.hh
+++ b/source/blender/blenkernel/BKE_node_runtime.hh
@@ -46,6 +46,30 @@ class bNodeTreeRuntime : NonCopyable, NonMovable {
    */
   uint8_t runtime_flag = 0;
 
+  /** Flag to prevent re-entrant update calls. */
+  short is_updating = 0;
+  /** Generic temporary flag for recursion check (DFS/BFS). */
+  short done = 0;
+
+  /** Execution data.
+   *
+   * XXX It would be preferable to completely move this data out of the underlying node tree,
+   * so node tree execution could finally run independent of the tree itself.
+   * This would allow node trees to be merely linked by other data (materials, textures, etc.),
+   * as ID data is supposed to.
+   * Execution data is generated from the tree once at execution start and can then be used
+   * as long as necessary, even while the tree is being modified.
+   */
+  struct bNodeTreeExec *execdata = nullptr;
+
+  /* Callbacks. */
+  void (*progress)(void *, float progress) = nullptr;
+  /** \warning may be called by different threads */
+  void (*stats_draw)(void *, const char *str) = nullptr;
+  bool (*test_break)(void *) = nullptr;
+  void (*update_draw)(void *) = nullptr;
+  void *tbh = nullptr, *prh = nullptr, *sdh = nullptr, *udh = nullptr;
+
   /** Information about how inputs and outputs of the node group interact with fields. */
   std::unique_ptr<nodes::FieldInferencingInterface> field_inferencing_interface;
 
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 2dde8ccba39..adb1b5c2d3c 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -138,7 +138,7 @@ static void ntree_copy_data(Main * /*bmain*/, ID *id_dst, const ID *id_src, cons
   ntree_dst->runtime = MEM_new<bNodeTreeRuntime>(__func__);
 
   /* in case a running nodetree is copied */
-  ntree_dst->execdata = nullptr;
+  ntree_dst->runtime->execdata = nullptr;
 
   BLI_listbase_clear(&ntree_dst->nodes);
   BLI_listbase_clear(&ntree_dst->links);
@@ -225,14 +225,14 @@ static void ntree_free_data(ID *id)
    * This should be removed when old tree types no longer require it.
    * Currently the execution data for texture nodes remains in the tree
    * after execution, until the node tree is updated or freed. */
-  if (ntree->execdata) {
+  if (ntree->runtime->execdata) {
     switch (ntree->type) {
       case NTREE_SHADER:
-        ntreeShaderEndExecTree(ntree->execdata);
+        ntreeShaderEndExecTree(ntree->runtime->execdata);
         break;
       case NTREE_TEXTURE:
-        ntreeTexEndExecTree(ntree->execdata);
-        ntree->execdata = nullptr;
+        ntreeTexEndExecTree(ntree->runtime->execdata);
+        ntree->runtime->execdata = nullptr;
         break;
     }
   }
@@ -615,10 +615,8 @@ static void ntree_blend_write(BlendWriter *writer, ID *id, const void *id_addres
   bNodeTree *ntree = (bNodeTree *)id;
 
   /* Clean up, important in undo case to reduce false detection of changed datablocks. */
-  ntree->is_updating = false;
   ntree->typeinfo = nullptr;
-  ntree->progress = nullptr;
-  ntree->execdata = nullptr;
+  ntree->runtime->execdata = nullptr;
 
   BLO_write_id_struct(writer, bNodeTree, id_address, &ntree->id);
 
@@ -668,11 +666,8 @@ void ntreeBlendReadData(BlendDataReader *reader, ID *owner_id, bNodeTree *ntree)
   ntree->owner_id = owner_id;
 
   /* NOTE: writing and reading goes in sync, for speed. */
-  ntree->is_updating = false;
   ntree->typeinfo = nullptr;
 
-  ntree->progress = nullptr;
-  ntree->execdata = nullptr;
   ntree->runtime = MEM_new<bNodeTreeRuntime>(__func__);
   BKE_ntree_update_tag_missing_runtime_data(ntree);
 
@@ -2949,9 +2944,9 @@ static void node_free_node(bNodeTree *ntree, bNode *node)
     }
 
     /* texture node has bad habit of keeping exec data around */
-    if (ntree->type == NTREE_TEXTURE && ntree->execdata) {
-      ntreeTexEndExecTree(ntree->execdata);
-      ntree->execdata = nullptr;
+    if (ntree->type == NTREE_TEXTURE && ntree->runtime->execdata) {
+      ntreeTexEndExecTree(ntree->runtime->execdata);
+      ntree->runtime->execdata = nullptr;
     }
   }
 
diff --git a/source/blender/blenkernel/intern/texture.cc b/source/blender/blenkernel/intern/texture.cc
index 2ceecf579b3..d60680fbe12 100644
--- a/source/blender/blenkernel/intern/texture.cc
+++ b/source/blender/blenkernel/intern/texture.cc
@@ -48,6 +48,7 @@
 #include "BKE_lib_query.h"
 #include "BKE_material.h"
 #include "BKE_node.h"
+#include "BKE_node_runtime.hh"
 #include "BKE_scene.h"
 #include "BKE_texture.h"
 
@@ -85,8 +86,8 @@ static void texture_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const i
     texture_dst->coba = static_cast<ColorBand *>(MEM_dupallocN(texture_dst->coba));
   }
   if (texture_src->nodetree) {
-    if (texture_src->nodetree->execdata) {
-      ntreeTexEndExecTree(texture_src->nodetree->execdata);
+    if (texture_src->nodetree->runtime->execdata) {
+      ntreeTexEndExecTree(texture_src->nodetree->runtime->execdata);
     }
 
     if (is_localized) {
diff --git a/source/blender/compositor/intern/COM_ExecutionGroup.cc b/source/blender/compositor/intern/COM_ExecutionGroup.cc
index c9002b535ed..7ec204bf862 100644
--- a/source/blender/compositor/intern/COM_ExecutionGroup.cc
+++ b/source/blender/compositor/intern/COM_ExecutionGroup.cc
@@ -294,7 +294,7 @@ void ExecutionGroup::execute(ExecutionSystem *graph)
   if (width_ == 0 || height_ == 0) {
     return;
   } /** \note Break out... no pixels to calculate. */
-  if (bTree->test_break && bTree->test_break(bTree->tbh)) {
+  if (bTree->runtime->test_break && bTree->runtime->test_break(bTree->runtime->tbh)) {
     return;
   } /** \note Early break out for blur and preview nodes. */
   if (chunks_len_ == 0) {
@@ -335,8 +335,8 @@ void ExecutionGroup::execute(ExecutionSystem *graph)
           start_evaluated = true;
           number_evaluated++;
 
-          if (bTree->update_draw) {
-            bTree->update_draw(bTree->udh);
+          if (bTree->runtime->update_draw) {
+            bTree->runtime->update_draw(bTree->runtime->udh);
           }
           break;
         }
@@ -356,7 +356,7 @@ void ExecutionGroup::execute(ExecutionSystem *graph)
 
     WorkScheduler::finish();
 
-    if (bTree->test_break && bTree->test_break(bTree->tbh)) {
+    if (bTree->runtime->test_break && bTree->runtime->test_break(bTree->runtime->tbh)) {
       breaked = true;
     }
   }
@@ -414,12 +414,12 @@ void ExecutionGroup::finalize_chunk_execution(int chunk_number, MemoryBuffer **m
     /* Status report is only performed for top level Execution Groups. */
     float progress = chunks_finished_;
     progress /= chunks_len_;
-    bTree_->progress(bTree_->prh, progress);
+    bTree_->runtime->progress(bTree_->runtime->prh, progress);
 
     char buf[128];
     BLI_snprintf(
         buf, sizeof(buf), TIP_("Compositing | Tile %u-%u"), chunks_finished_, chunks_len_);
-    bTree_->stats_draw(bTree_->sdh, buf);
+    bTree_->runtime->stats_draw(bTree_->runtime->sdh, buf);
   }
 }
 
diff --git a/source/blender/compositor/intern/COM_ExecutionSystem.cc b/source/blender/compositor/intern/COM_ExecutionSystem.cc
index c850585148a..9c5e151b670 100644
--- a/source/blender/compositor/intern/COM_ExecutionSystem.cc
+++ b/source/blender/compositor/intern/COM_ExecutionSystem.cc
@@ -163,7 +163,7 @@ void ExecutionSystem::execute_work(const rcti &work_rect,
 bool ExecutionSystem::is_breaked() const
 {
   const bNodeTree *btree = context_.get_bnodetree();
-  return btree->test_break(btree->tbh);
+  return btree->runtime->test_break(btree->runtime->tbh);
 }
 
 }  // namespace blender::compositor
diff --git a/source/blender/compositor/intern/COM_FullFrameExecutionModel.cc b/source/blender/compositor/intern/COM_FullFrameExecutionModel.cc
index 11e3c1507d9..fd6890a60c1 100644
--- a/source/blender/compositor/intern/COM_FullFrameExecutionModel.cc
+++ b/source/blender/compositor/intern/COM_FullFrameExecutionModel.cc
@@ -32,7 +32,8 @@ FullFrameExecutionModel::FullFrameExecutionModel(CompositorContext &context,
 void FullFrameExecutionModel::execute(ExecutionSystem &exec_system)
 {
   const bNodeTree *node_tree = this->context_.get_bnodetree();
-  node_tree->stats_draw(node_tree->sdh, TIP_("Compositing | Initializing execution"));
+  node_tree->runtime->stats_draw(node_tree->runtime->sdh,
+                                 TIP_("Compositing | Initializing execution"));
 
   DebugInfo::graphviz(&exec_system, "compositor_prior_rendering");
 
@@ -272,7 +273,7 @@ void FullFrameExecutionModel::update_progress_bar()
   const bNodeTree *tree = context_.get_bnodetree();
   if (tree) {
     const float progress = num_operations_finished_ / float(operations_.size());
-    tree->progress(tree->prh, progress);
+    tree->runtime->progress(tree->runtime->prh, progress);
 
     char buf[128];
     BLI_snprintf(buf,
@@ -280,7 +281,7 @@ void FullFrameExecutionModel::update_progress_bar()
                  TIP_("Compositing | Operation %i-%li"),
                  num_operations_finished_ + 1,
                  operations_.size());
-    tree->stats_draw(tree->sdh, buf);
+    tree->runtime->stats_draw(tree->runtime->sdh, buf);
   }
 }
 
diff --git a/source/blender/compositor/intern/COM_NodeOperation.h b/source/blender/compositor/intern/COM_NodeOperation.h
index a00ac1352fe..2477306685f 100644
--- a/source/blender/compositor/intern/COM_NodeOperation.h
+++ b/source/blender/compositor/intern/COM_NodeOperation.h
@@ -17,6 +17,8 @@
 #include "COM_MemoryBuffer.h"
 #include "COM_MetaData.h"
 
+#include "BKE_node_runtime.hh"
+
 #include "clew.h"
 
 #include "DNA_node_types.h"
@@ -555,13 +557,13 @@ class NodeOperation {
 
   inline bool is_braked() const
   {
-    return btree_->test_break(btree_->tbh);
+    return btree_->runtime->test_break(btree_->runtime->tbh);
   }
 
   inline void update_draw()
   {
-    if (btree_->update_draw) {
-      btree_->update_draw(btree_->udh);
+    if (btree_->runtime->update_draw) {
+      btree_->runtime->update_draw(btree_->runtime->udh);
     }
   }
 
diff --git a/source/blender/com

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list