diff options
author | Aaron Carlisle <carlisle.b3d@gmail.com> | 2022-01-26 23:28:05 +0300 |
---|---|---|
committer | Aaron Carlisle <carlisle.b3d@gmail.com> | 2022-01-26 23:29:31 +0300 |
commit | 710e46cb2d966d4a05064e3284aefe71e1bc99b2 (patch) | |
tree | 9f5c4c4054db296123ff06a32639c64b7f8613ca | |
parent | cab1f1d9a2347c52a07697d2305f4416ff0de84d (diff) |
Cleanup: Move specific node tree execution functions into respective module
`node_exec` had some code that was specific to texture/shader nodes.
These functions arent used outside there module so limit there declarations.
Also make a function static that is only used in `node_exec.c`
Reviewed By: JacquesLucke
Differential Revision: https://developer.blender.org/D13899
-rw-r--r-- | source/blender/nodes/intern/node_exec.cc | 59 | ||||
-rw-r--r-- | source/blender/nodes/intern/node_exec.h | 20 | ||||
-rw-r--r-- | source/blender/nodes/shader/node_shader_util.hh | 5 | ||||
-rw-r--r-- | source/blender/nodes/texture/node_texture_tree.c | 57 | ||||
-rw-r--r-- | source/blender/nodes/texture/node_texture_util.h | 12 |
5 files changed, 75 insertions, 78 deletions
diff --git a/source/blender/nodes/intern/node_exec.cc b/source/blender/nodes/intern/node_exec.cc index 4ff662036c3..788d938ca6f 100644 --- a/source/blender/nodes/intern/node_exec.cc +++ b/source/blender/nodes/intern/node_exec.cc @@ -35,7 +35,7 @@ #include "node_exec.h" #include "node_util.h" -int node_exec_socket_use_stack(bNodeSocket *sock) +static int node_exec_socket_use_stack(bNodeSocket *sock) { /* NOTE: INT supported as FLOAT. Only for EEVEE. */ return ELEM(sock->type, SOCK_INT, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA, SOCK_SHADER); @@ -276,60 +276,3 @@ void ntree_exec_end(bNodeTreeExec *exec) MEM_freeN(exec); } - -/**** Material/Texture trees ****/ - -bNodeThreadStack *ntreeGetThreadStack(bNodeTreeExec *exec, int thread) -{ - ListBase *lb = &exec->threadstack[thread]; - bNodeThreadStack *nts; - - for (nts = (bNodeThreadStack *)lb->first; nts; nts = nts->next) { - if (!nts->used) { - nts->used = true; - break; - } - } - - if (!nts) { - nts = MEM_cnew<bNodeThreadStack>("bNodeThreadStack"); - nts->stack = (bNodeStack *)MEM_dupallocN(exec->stack); - nts->used = true; - BLI_addtail(lb, nts); - } - - return nts; -} - -void ntreeReleaseThreadStack(bNodeThreadStack *nts) -{ - nts->used = false; -} - -bool ntreeExecThreadNodes(bNodeTreeExec *exec, bNodeThreadStack *nts, void *callerdata, int thread) -{ - bNodeStack *nsin[MAX_SOCKET] = {nullptr}; /* arbitrary... watch this */ - bNodeStack *nsout[MAX_SOCKET] = {nullptr}; /* arbitrary... watch this */ - bNodeExec *nodeexec; - bNode *node; - int n; - - /* nodes are presorted, so exec is in order of list */ - - for (n = 0, nodeexec = exec->nodeexec; n < exec->totnodes; n++, nodeexec++) { - node = nodeexec->node; - if (node->need_exec) { - node_get_stack(node, nts->stack, nsin, nsout); - /* Handle muted nodes... - * If the mute func is not set, assume the node should never be muted, - * and hence execute it! - */ - if (node->typeinfo->exec_fn && !(node->flag & NODE_MUTED)) { - node->typeinfo->exec_fn(callerdata, thread, node, &nodeexec->data, nsin, nsout); - } - } - } - - /* signal to that all went OK, for render */ - return true; -} diff --git a/source/blender/nodes/intern/node_exec.h b/source/blender/nodes/intern/node_exec.h index b2e1c6564b6..115389afd67 100644 --- a/source/blender/nodes/intern/node_exec.h +++ b/source/blender/nodes/intern/node_exec.h @@ -71,9 +71,6 @@ typedef struct bNodeThreadStack { bool used; } bNodeThreadStack; -/** Supported socket types in old nodes. */ -int node_exec_socket_use_stack(struct bNodeSocket *sock); - /** For a given socket, find the actual stack entry. */ struct bNodeStack *node_get_socket_stack(struct bNodeStack *stack, struct bNodeSocket *sock); void node_get_stack(struct bNode *node, @@ -86,23 +83,6 @@ struct bNodeTreeExec *ntree_exec_begin(struct bNodeExecContext *context, bNodeInstanceKey parent_key); void ntree_exec_end(struct bNodeTreeExec *exec); -struct bNodeThreadStack *ntreeGetThreadStack(struct bNodeTreeExec *exec, int thread); -void ntreeReleaseThreadStack(struct bNodeThreadStack *nts); -bool ntreeExecThreadNodes(struct bNodeTreeExec *exec, - struct bNodeThreadStack *nts, - void *callerdata, - int thread); - -struct bNodeTreeExec *ntreeShaderBeginExecTree_internal(struct bNodeExecContext *context, - struct bNodeTree *ntree, - bNodeInstanceKey parent_key); -void ntreeShaderEndExecTree_internal(struct bNodeTreeExec *exec); - -struct bNodeTreeExec *ntreeTexBeginExecTree_internal(struct bNodeExecContext *context, - struct bNodeTree *ntree, - bNodeInstanceKey parent_key); -void ntreeTexEndExecTree_internal(struct bNodeTreeExec *exec); - #ifdef __cplusplus } #endif diff --git a/source/blender/nodes/shader/node_shader_util.hh b/source/blender/nodes/shader/node_shader_util.hh index 5a5b4f613f3..31229c8693b 100644 --- a/source/blender/nodes/shader/node_shader_util.hh +++ b/source/blender/nodes/shader/node_shader_util.hh @@ -101,6 +101,11 @@ void node_shader_gpu_tex_mapping(struct GPUMaterial *mat, struct GPUNodeStack *in, struct GPUNodeStack *out); +struct bNodeTreeExec *ntreeShaderBeginExecTree_internal(struct bNodeExecContext *context, + struct bNodeTree *ntree, + bNodeInstanceKey parent_key); +void ntreeShaderEndExecTree_internal(struct bNodeTreeExec *exec); + void ntreeExecGPUNodes(struct bNodeTreeExec *exec, struct GPUMaterial *mat, struct bNode *output_node); diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c index 3d914d486c3..82ed43be779 100644 --- a/source/blender/nodes/texture/node_texture_tree.c +++ b/source/blender/nodes/texture/node_texture_tree.c @@ -170,6 +170,63 @@ void register_node_tree_type_tex(void) ntreeTypeAdd(tt); } +/**** Material/Texture trees ****/ + +bNodeThreadStack *ntreeGetThreadStack(bNodeTreeExec *exec, int thread) +{ + ListBase *lb = &exec->threadstack[thread]; + bNodeThreadStack *nts; + + for (nts = (bNodeThreadStack *)lb->first; nts; nts = nts->next) { + if (!nts->used) { + nts->used = true; + break; + } + } + + if (!nts) { + nts = MEM_callocN(sizeof(bNodeThreadStack), "bNodeThreadStack"); + nts->stack = (bNodeStack *)MEM_dupallocN(exec->stack); + nts->used = true; + BLI_addtail(lb, nts); + } + + return nts; +} + +void ntreeReleaseThreadStack(bNodeThreadStack *nts) +{ + nts->used = false; +} + +bool ntreeExecThreadNodes(bNodeTreeExec *exec, bNodeThreadStack *nts, void *callerdata, int thread) +{ + bNodeStack *nsin[MAX_SOCKET] = {NULL}; /* arbitrary... watch this */ + bNodeStack *nsout[MAX_SOCKET] = {NULL}; /* arbitrary... watch this */ + bNodeExec *nodeexec; + bNode *node; + int n; + + /* nodes are presorted, so exec is in order of list */ + + for (n = 0, nodeexec = exec->nodeexec; n < exec->totnodes; n++, nodeexec++) { + node = nodeexec->node; + if (node->need_exec) { + node_get_stack(node, nts->stack, nsin, nsout); + /* Handle muted nodes... + * If the mute func is not set, assume the node should never be muted, + * and hence execute it! + */ + if (node->typeinfo->exec_fn && !(node->flag & NODE_MUTED)) { + node->typeinfo->exec_fn(callerdata, thread, node, &nodeexec->data, nsin, nsout); + } + } + } + + /* signal to that all went OK, for render */ + return true; +} + bNodeTreeExec *ntreeTexBeginExecTree_internal(bNodeExecContext *context, bNodeTree *ntree, bNodeInstanceKey parent_key) diff --git a/source/blender/nodes/texture/node_texture_util.h b/source/blender/nodes/texture/node_texture_util.h index d53000058a3..7c8e39925bc 100644 --- a/source/blender/nodes/texture/node_texture_util.h +++ b/source/blender/nodes/texture/node_texture_util.h @@ -123,6 +123,18 @@ void tex_output(bNode *node, void params_from_cdata(TexParams *out, TexCallData *in); +struct bNodeThreadStack *ntreeGetThreadStack(struct bNodeTreeExec *exec, int thread); +void ntreeReleaseThreadStack(struct bNodeThreadStack *nts); +bool ntreeExecThreadNodes(struct bNodeTreeExec *exec, + struct bNodeThreadStack *nts, + void *callerdata, + int thread); + +struct bNodeTreeExec *ntreeTexBeginExecTree_internal(struct bNodeExecContext *context, + struct bNodeTree *ntree, + bNodeInstanceKey parent_key); +void ntreeTexEndExecTree_internal(struct bNodeTreeExec *exec); + #ifdef __cplusplus } #endif |