From fdc653e8ce77a188138dc707207139c3d1e6b166 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 13 Apr 2015 14:45:56 +0500 Subject: Nodes: Remove hardcoded BLENDER_MAX_THREADS number of threads Use actual available number of threads now, which will make it easier to increase max number of threads, without having some sloppy memory usage and without doing some redundant checks on thread data which was never used. --- source/blender/nodes/intern/node_exec.c | 3 ++- source/blender/nodes/intern/node_exec.h | 1 + source/blender/nodes/shader/node_shader_tree.c | 5 +++-- source/blender/nodes/texture/node_texture_tree.c | 7 ++++--- 4 files changed, 10 insertions(+), 6 deletions(-) (limited to 'source/blender/nodes') diff --git a/source/blender/nodes/intern/node_exec.c b/source/blender/nodes/intern/node_exec.c index 2347564c696..07826686634 100644 --- a/source/blender/nodes/intern/node_exec.c +++ b/source/blender/nodes/intern/node_exec.c @@ -29,6 +29,7 @@ * \ingroup nodes */ +#include /* for abort() */ #include "DNA_node_types.h" @@ -262,7 +263,7 @@ bNodeThreadStack *ntreeGetThreadStack(bNodeTreeExec *exec, int thread) { ListBase *lb = &exec->threadstack[thread]; bNodeThreadStack *nts; - + BLI_assert(thread < exec->tot_thread); for (nts = lb->first; nts; nts = nts->next) { if (!nts->used) { nts->used = true; diff --git a/source/blender/nodes/intern/node_exec.h b/source/blender/nodes/intern/node_exec.h index a0023d02295..8bb8c77a88c 100644 --- a/source/blender/nodes/intern/node_exec.h +++ b/source/blender/nodes/intern/node_exec.h @@ -65,6 +65,7 @@ typedef struct bNodeTreeExec { int stacksize; struct bNodeStack *stack; /* socket data stack */ /* only used by material and texture trees to keep one stack for each thread */ + int tot_thread; ListBase *threadstack; /* one instance of the stack for each thread */ } bNodeTreeExec; diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c index f18ee1d649f..57cc1eab929 100644 --- a/source/blender/nodes/shader/node_shader_tree.c +++ b/source/blender/nodes/shader/node_shader_tree.c @@ -234,7 +234,8 @@ bNodeTreeExec *ntreeShaderBeginExecTree_internal(bNodeExecContext *context, bNod exec = ntree_exec_begin(context, ntree, parent_key); /* allocate the thread stack listbase array */ - exec->threadstack = MEM_callocN(BLENDER_MAX_THREADS * sizeof(ListBase), "thread stack array"); + exec->tot_thread = BLI_system_thread_count(); + exec->threadstack = MEM_callocN(exec->tot_thread * sizeof(ListBase), "thread stack array"); for (node = exec->nodetree->nodes.first; node; node = node->next) node->need_exec = 1; @@ -271,7 +272,7 @@ void ntreeShaderEndExecTree_internal(bNodeTreeExec *exec) int a; if (exec->threadstack) { - for (a = 0; a < BLENDER_MAX_THREADS; a++) { + for (a = 0; a < exec->tot_thread; a++) { for (nts = exec->threadstack[a].first; nts; nts = nts->next) if (nts->stack) MEM_freeN(nts->stack); BLI_freelistN(&exec->threadstack[a]); diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c index 79923c5f7d5..93ce469c150 100644 --- a/source/blender/nodes/texture/node_texture_tree.c +++ b/source/blender/nodes/texture/node_texture_tree.c @@ -232,7 +232,8 @@ bNodeTreeExec *ntreeTexBeginExecTree_internal(bNodeExecContext *context, bNodeTr exec = ntree_exec_begin(context, ntree, parent_key); /* allocate the thread stack listbase array */ - exec->threadstack = MEM_callocN(BLENDER_MAX_THREADS * sizeof(ListBase), "thread stack array"); + exec->tot_thread = BLI_system_thread_count(); + exec->threadstack = MEM_callocN(exec->tot_thread * sizeof(ListBase), "thread stack array"); for (node = exec->nodetree->nodes.first; node; node = node->next) node->need_exec = 1; @@ -270,7 +271,7 @@ static void tex_free_delegates(bNodeTreeExec *exec) bNodeStack *ns; int th, a; - for (th = 0; th < BLENDER_MAX_THREADS; th++) + for (th = 0; th < exec->tot_thread; th++) for (nts = exec->threadstack[th].first; nts; nts = nts->next) for (ns = nts->stack, a = 0; a < exec->stacksize; a++, ns++) if (ns->data && !ns->is_copy) @@ -285,7 +286,7 @@ void ntreeTexEndExecTree_internal(bNodeTreeExec *exec) if (exec->threadstack) { tex_free_delegates(exec); - for (a = 0; a < BLENDER_MAX_THREADS; a++) { + for (a = 0; a < exec->tot_thread; a++) { for (nts = exec->threadstack[a].first; nts; nts = nts->next) if (nts->stack) MEM_freeN(nts->stack); BLI_freelistN(&exec->threadstack[a]); -- cgit v1.2.3