[Bf-blender-cvs] [fc5f7a1e2d5] master: Cleanup: Use topology cache of group output node
Iliya Katueshenock
noreply at git.blender.org
Fri Dec 9 23:11:33 CET 2022
Commit: fc5f7a1e2d5ec9a3a10b83ef09fdf5bb77cf18fd
Author: Iliya Katueshenock
Date: Fri Dec 9 15:35:38 2022 -0600
Branches: master
https://developer.blender.org/rBfc5f7a1e2d5ec9a3a10b83ef09fdf5bb77cf18fd
Cleanup: Use topology cache of group output node
Using a cache greatly simplifies access to the output node.
I touched on the most common and understandable cases for me.
The texture nodes were touched because it looked pretty generic.
Differential Revision: https://developer.blender.org/D16699
===================================================================
M source/blender/blenkernel/intern/node_tree_update.cc
M source/blender/nodes/shader/nodes/node_shader_common.cc
M source/blender/nodes/texture/nodes/node_texture_common.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/node_tree_update.cc b/source/blender/blenkernel/intern/node_tree_update.cc
index bb063dadb06..ef4076a9b6e 100644
--- a/source/blender/blenkernel/intern/node_tree_update.cc
+++ b/source/blender/blenkernel/intern/node_tree_update.cc
@@ -509,20 +509,15 @@ static void determine_group_output_states(const bNodeTree &tree,
FieldInferencingInterface &new_inferencing_interface,
const Span<SocketFieldState> field_state_by_socket_id)
{
- for (const bNode *group_output_node : tree.nodes_by_type("NodeGroupOutput")) {
- /* Ignore inactive group output nodes. */
- if (!(group_output_node->flag & NODE_DO_OUTPUT)) {
- continue;
- }
- /* Determine dependencies of all group outputs. */
- for (const bNodeSocket *group_output_socket :
- group_output_node->input_sockets().drop_back(1)) {
- OutputFieldDependency field_dependency = find_group_output_dependencies(
- *group_output_socket, field_state_by_socket_id);
- new_inferencing_interface.outputs[group_output_socket->index()] = std::move(
- field_dependency);
- }
- break;
+ const bNode *group_output_node = tree.group_output_node();
+ if (!group_output_node) {
+ return;
+ }
+
+ for (const bNodeSocket *group_output_socket : group_output_node->input_sockets().drop_back(1)) {
+ OutputFieldDependency field_dependency = find_group_output_dependencies(
+ *group_output_socket, field_state_by_socket_id);
+ new_inferencing_interface.outputs[group_output_socket->index()] = std::move(field_dependency);
}
}
diff --git a/source/blender/nodes/shader/nodes/node_shader_common.cc b/source/blender/nodes/shader/nodes/node_shader_common.cc
index 613fa101d29..48937b1213b 100644
--- a/source/blender/nodes/shader/nodes/node_shader_common.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_common.cc
@@ -43,19 +43,20 @@ static void group_gpu_copy_inputs(bNode *gnode, GPUNodeStack *in, bNodeStack *gs
*/
static void group_gpu_move_outputs(bNode *gnode, GPUNodeStack *out, bNodeStack *gstack)
{
- bNodeTree *ngroup = (bNodeTree *)gnode->id;
+ const bNodeTree &ngroup = *reinterpret_cast<bNodeTree *>(gnode->id);
- for (bNode *node : ngroup->all_nodes()) {
- if (node->type == NODE_GROUP_OUTPUT && (node->flag & NODE_DO_OUTPUT)) {
- int a;
- LISTBASE_FOREACH_INDEX (bNodeSocket *, sock, &node->inputs, a) {
- bNodeStack *ns = node_get_socket_stack(gstack, sock);
- if (ns) {
- /* convert the node stack data result back to gpu stack */
- node_gpu_stack_from_data(&out[a], sock->type, ns);
- }
- }
- break; /* only one active output node */
+ ngroup.ensure_topology_cache();
+ const bNode *group_output_node = ngroup.group_output_node();
+ if (!group_output_node) {
+ return;
+ }
+
+ int a;
+ LISTBASE_FOREACH_INDEX (bNodeSocket *, sock, &group_output_node->inputs, a) {
+ bNodeStack *ns = node_get_socket_stack(gstack, sock);
+ if (ns) {
+ /* convert the node stack data result back to gpu stack */
+ node_gpu_stack_from_data(&out[a], sock->type, ns);
}
}
}
diff --git a/source/blender/nodes/texture/nodes/node_texture_common.cc b/source/blender/nodes/texture/nodes/node_texture_common.cc
index 5302182a6f6..603e2d39046 100644
--- a/source/blender/nodes/texture/nodes/node_texture_common.cc
+++ b/source/blender/nodes/texture/nodes/node_texture_common.cc
@@ -84,24 +84,24 @@ static void group_copy_inputs(bNode *gnode, bNodeStack **in, bNodeStack *gstack)
*/
static void group_copy_outputs(bNode *gnode, bNodeStack **out, bNodeStack *gstack)
{
- bNodeTree *ngroup = (bNodeTree *)gnode->id;
- bNode *node;
- bNodeSocket *sock;
- bNodeStack *ns;
+ const bNodeTree &ngroup = *reinterpret_cast<bNodeTree *>(gnode->id);
+
+ ngroup.ensure_topology_cache();
+ const bNode *group_output_node = ngroup.group_output_node();
+ if (!group_output_node) {
+ return;
+ }
+
int a;
+ LISTBASE_FOREACH_INDEX (bNodeSocket *, sock, &group_output_node->inputs, a) {
+ if (!out[a]) {
+ /* shouldn't need to check this T36694. */
+ continue;
+ }
- for (node = static_cast<bNode *>(ngroup->nodes.first); node; node = node->next) {
- if (node->type == NODE_GROUP_OUTPUT && (node->flag & NODE_DO_OUTPUT)) {
- for (sock = static_cast<bNodeSocket *>(node->inputs.first), a = 0; sock;
- sock = sock->next, a++) {
- if (out[a]) { /* shouldn't need to check this T36694. */
- ns = node_get_socket_stack(gstack, sock);
- if (ns) {
- copy_stack(out[a], ns);
- }
- }
- }
- break; /* only one active output node */
+ bNodeStack *ns = node_get_socket_stack(gstack, sock);
+ if (ns) {
+ copy_stack(out[a], ns);
}
}
}
More information about the Bf-blender-cvs
mailing list