[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