[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