[Bf-blender-cvs] [fdc653e] master: Nodes: Remove hardcoded BLENDER_MAX_THREADS number of threads
Sergey Sharybin
noreply at git.blender.org
Mon Apr 13 12:40:54 CEST 2015
Commit: fdc653e8ce77a188138dc707207139c3d1e6b166
Author: Sergey Sharybin
Date: Mon Apr 13 14:45:56 2015 +0500
Branches: master
https://developer.blender.org/rBfdc653e8ce77a188138dc707207139c3d1e6b166
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.
===================================================================
M source/blender/nodes/intern/node_exec.c
M source/blender/nodes/intern/node_exec.h
M source/blender/nodes/shader/node_shader_tree.c
M source/blender/nodes/texture/node_texture_tree.c
===================================================================
diff --git a/source/blender/nodes/intern/node_exec.c b/source/blender/nodes/intern/node_exec.c
index 2347564..0782668 100644
--- a/source/blender/nodes/intern/node_exec.c
+++ b/source/blender/nodes/intern/node_exec.c
@@ -29,6 +29,7 @@
* \ingroup nodes
*/
+#include <stdlib.h> /* 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 a0023d0..8bb8c77 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 f18ee1d..57cc1ea 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 79923c5..93ce469 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]);
More information about the Bf-blender-cvs
mailing list