Sophie

Sophie

distrib > Mandriva > 2008.0 > x86_64 > by-pkgid > 8c1a96618c5f76e0d4006fa5d8b85d82 > files > 9

blender-2.45-2.1mdv2008.0.src.rpm

--- blender-2.42a/source/creator/creator.c.morethreads	2006-07-12 22:01:48.000000000 +0200
+++ blender-2.42a/source/creator/creator.c	2006-08-09 15:30:42.000000000 +0200
@@ -96,6 +96,9 @@
 # include <sys/rtprio.h>
 #endif
 
+#include <unistd.h>
+#include <stdlib.h>
+
 // from buildinfo.c
 #ifdef BUILD_DATE
 extern char * build_date;
@@ -222,17 +225,36 @@
 double PIL_check_seconds_timer(void);
 extern void winlay_get_screensize(int *width_r, int *height_r);
 
+extern int ncpus_system;
+extern int blender_nthreads;
+
 int main(int argc, char **argv)
 {
 	int a, i, stax, stay, sizx, sizy;
 	SYS_SystemHandle syshandle;
 	Scene *sce;
+	char *blender_nthreads_env;
 
 #if defined(WIN32) || defined (__linux__)
 	int audio = 1;
 #else
 	int audio = 0;
 #endif
+
+	ncpus_system = (int) sysconf(_SC_NPROCESSORS_ONLN);
+
+	if (ncpus_system < 1)
+		ncpus_system = 1;
+                
+	if ((blender_nthreads_env = getenv("BLENDER_NTHREADS")) != NULL)
+		blender_nthreads = atol(blender_nthreads_env);
+                                
+	if (blender_nthreads > ncpus_system)
+		blender_nthreads = ncpus_system;
+
+	if (blender_nthreads < 1)
+		blender_nthreads = 1;
+
 	setCallbacks();
 #ifdef __APPLE__
 		/* patch to ignore argument finder gives us (pid?) */
--- blender-2.42a/source/creator/buildinfo.c.morethreads	2006-08-09 15:19:29.000000000 +0200
+++ blender-2.42a/source/creator/buildinfo.c	2006-08-09 15:27:43.000000000 +0200
@@ -44,3 +44,6 @@
 #include "winbuildinfo.h"
 #endif
 #endif
+
+int ncpus_system = 1;
+int blender_nthreads = 2;
--- blender-2.42a/source/blender/blenkernel/intern/node.c.morethreads	2006-07-09 13:54:41.000000000 +0200
+++ blender-2.42a/source/blender/blenkernel/intern/node.c	2006-08-09 15:25:07.000000000 +0200
@@ -2016,6 +2016,7 @@
 	return NULL;
 }
 
+extern int blender_nthreads;
 
 /* optimized tree execute test for compositing */
 void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview)
@@ -2028,7 +2029,7 @@
 	if(ntree==NULL) return;
 	
 	if(rd->mode & R_THREADS)
-		maxthreads= 2;
+		maxthreads= blender_nthreads;
 	else
 		maxthreads= 1;
 	
--- blender-2.42a/source/blender/render/intern/source/pipeline.c.morethreads	2006-08-09 14:15:32.000000000 +0200
+++ blender-2.42a/source/blender/render/intern/source/pipeline.c	2006-08-09 15:25:31.000000000 +0200
@@ -1091,6 +1091,8 @@
 	re->i.infostr= NULL;
 }
 
+extern int blender_nthreads;
+
 static void threaded_tile_processor(Render *re)
 {
 	ListBase threads;
@@ -1120,7 +1122,7 @@
 		IMB_exrtile_begin_write(rr->exrhandle, str, rr->rectx, rr->recty, rr->rectx/re->xparts, rr->recty/re->yparts);
 	}
 	
-	if(re->r.mode & R_THREADS) maxthreads= 2;
+	if(re->r.mode & R_THREADS) maxthreads= blender_nthreads;
 	else maxthreads= 1;
 	
 	BLI_init_threads(&threads, do_part_thread, maxthreads);
--- blender-2.42a/source/blender/blenlib/intern/threads.c.morethreads	2006-03-13 12:01:17.000000000 +0100
+++ blender-2.42a/source/blender/blenlib/intern/threads.c	2006-08-09 15:25:51.000000000 +0200
@@ -38,6 +38,7 @@
 #include "BLI_blenlib.h"
 #include "BLI_threads.h"
 
+extern int blender_nthreads;
 
 /* ********** basic thread control API ************ 
 
@@ -50,7 +51,7 @@
 A sample loop can look like this (pseudo c);
 
 	ListBase lb;
-	int maxthreads= 2;
+	int maxthreads= blender_nthreads;
 	int cont= 1;
 
 	BLI_init_threads(&lb, do_something_func, maxthreads);