[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56576] trunk/blender/source: Fix #35240: command line -t number of threads option did not work for cycles.

Brecht Van Lommel brechtvanlommel at pandora.be
Wed May 8 15:23:17 CEST 2013


Revision: 56576
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56576
Author:   blendix
Date:     2013-05-08 13:23:17 +0000 (Wed, 08 May 2013)
Log Message:
-----------
Fix #35240: command line -t number of threads option did not work for cycles.
Now it works for blender internal, cycles and other multithreading code in
Blender in both background and UI mode.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_scene.h
    trunk/blender/source/blender/blenkernel/intern/particle_system.c
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/blenkernel/intern/softbody.c
    trunk/blender/source/blender/blenlib/BLI_threads.h
    trunk/blender/source/blender/blenlib/intern/threads.c
    trunk/blender/source/blender/editors/armature/editarmature_retarget.c
    trunk/blender/source/blender/editors/object/object_bake.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_image_proj.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/render/intern/source/pipeline.c
    trunk/blender/source/creator/creator.c

Modified: trunk/blender/source/blender/blenkernel/BKE_scene.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_scene.h	2013-05-08 13:23:13 UTC (rev 56575)
+++ trunk/blender/source/blender/blenkernel/BKE_scene.h	2013-05-08 13:23:17 UTC (rev 56576)
@@ -119,6 +119,9 @@
 int BKE_scene_check_color_management_enabled(const struct Scene *scene);
 int BKE_scene_check_rigidbody_active(const struct Scene *scene);
 
+int BKE_scene_num_threads(const struct Scene *scene);
+int BKE_render_num_threads(const struct RenderData *r);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2013-05-08 13:23:13 UTC (rev 56575)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2013-05-08 13:23:17 UTC (rev 56576)
@@ -1439,12 +1439,7 @@
 {
 	ParticleThread *threads;
 	ParticleThreadContext *ctx;
-	int i, totthread;
-
-	if (sim->scene->r.mode & R_FIXED_THREADS)
-		totthread= sim->scene->r.threads;
-	else
-		totthread= BLI_system_thread_count();
+	int i, totthread = BKE_scene_num_threads(sim->scene);
 	
 	threads= MEM_callocN(sizeof(ParticleThread)*totthread, "ParticleThread");
 	ctx= MEM_callocN(sizeof(ParticleThreadContext), "ParticleThreadContext");

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2013-05-08 13:23:13 UTC (rev 56575)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2013-05-08 13:23:17 UTC (rev 56576)
@@ -56,6 +56,7 @@
 #include "BLI_utildefines.h"
 #include "BLI_callbacks.h"
 #include "BLI_string.h"
+#include "BLI_threads.h"
 
 #include "BLF_translation.h"
 
@@ -1469,3 +1470,28 @@
 {
 	return scene && scene->rigidbody_world && scene->rigidbody_world->group && !(scene->rigidbody_world->flag & RBW_FLAG_MUTED);
 }
+
+int BKE_render_num_threads(const RenderData *rd)
+{
+	int threads;
+
+	/* override set from command line? */
+	threads = BLI_system_num_threads_override_get();
+
+	if (threads > 0)
+		return threads;
+
+	/* fixed number of threads specified in scene? */
+	if (rd->mode & R_FIXED_THREADS)
+		threads = rd->threads;
+	else
+		threads = BLI_system_thread_count();
+	
+	return max_ii(threads, 1);
+}
+
+int BKE_scene_num_threads(const Scene *scene)
+{
+	return BKE_render_num_threads(&scene->r);
+}
+

Modified: trunk/blender/source/blender/blenkernel/intern/softbody.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/softbody.c	2013-05-08 13:23:13 UTC (rev 56575)
+++ trunk/blender/source/blender/blenkernel/intern/softbody.c	2013-05-08 13:23:17 UTC (rev 56576)
@@ -79,6 +79,7 @@
 #include "BKE_pointcache.h"
 #include "BKE_deform.h"
 #include "BKE_mesh.h"
+#include "BKE_scene.h"
 
 #include  "PIL_time.h"
 // #include  "ONL_opennl.h" remove linking to ONL for now
@@ -1664,10 +1665,7 @@
 	do_effector= pdInitEffectors(scene, ob, NULL, ob->soft->effector_weights);
 
 	/* figure the number of threads while preventing pretty pointless threading overhead */
-	if (scene->r.mode & R_FIXED_THREADS)
-		totthread= scene->r.threads;
-	else
-		totthread= BLI_system_thread_count();
+	totthread= BKE_scene_num_threads(scene);
 	/* what if we got zillions of CPUs running but less to spread*/
 	while ((totsprings/totthread < lowsprings) && (totthread > 1)) {
 		totthread--;
@@ -2395,10 +2393,7 @@
 	int lowpoints =100; /* wild guess .. may increase with better thread management 'above' or even be UI option sb->spawn_cf_threads_nopts */
 
 	/* figure the number of threads while preventing pretty pointless threading overhead */
-	if (scene->r.mode & R_FIXED_THREADS)
-		totthread= scene->r.threads;
-	else
-		totthread= BLI_system_thread_count();
+	totthread= BKE_scene_num_threads(scene);
 	/* what if we got zillions of CPUs running but less to spread*/
 	while ((totpoint/totthread < lowpoints) && (totthread > 1)) {
 		totthread--;

Modified: trunk/blender/source/blender/blenlib/BLI_threads.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_threads.h	2013-05-08 13:23:13 UTC (rev 56575)
+++ trunk/blender/source/blender/blenlib/BLI_threads.h	2013-05-08 13:23:17 UTC (rev 56576)
@@ -68,6 +68,8 @@
 /* System Information */
 
 int     BLI_system_thread_count(void); /* gets the number of threads the system can make use of */
+void    BLI_system_num_threads_override_set(int num);
+int     BLI_system_num_threads_override_get(void);
 
 /* Global Mutex Locks
  * 

Modified: trunk/blender/source/blender/blenlib/intern/threads.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/threads.c	2013-05-08 13:23:13 UTC (rev 56575)
+++ trunk/blender/source/blender/blenlib/intern/threads.c	2013-05-08 13:23:17 UTC (rev 56576)
@@ -115,6 +115,7 @@
 static pthread_mutex_t _colormanage_lock = PTHREAD_MUTEX_INITIALIZER;
 static pthread_t mainid;
 static int thread_levels = 0;  /* threads can be invoked inside threads */
+static int num_threads_override = 0;
 
 /* just a max for security reasons */
 #define RE_MAX_THREAD BLENDER_MAX_THREADS
@@ -322,6 +323,9 @@
 	t = (int)sysconf(_SC_NPROCESSORS_ONLN);
 #   endif
 #endif
+
+	if (num_threads_override > 0)
+		return num_threads_override;
 	
 	if (t > RE_MAX_THREAD)
 		return RE_MAX_THREAD;
@@ -331,6 +335,16 @@
 	return t;
 }
 
+void BLI_system_num_threads_override_set(int num)
+{
+	num_threads_override = num;
+}
+
+int BLI_system_num_threads_override_get(void)
+{
+	return num_threads_override;
+}
+
 /* Global Mutex Locks */
 
 void BLI_lock_thread(int type)

Modified: trunk/blender/source/blender/editors/armature/editarmature_retarget.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature_retarget.c	2013-05-08 13:23:13 UTC (rev 56575)
+++ trunk/blender/source/blender/editors/armature/editarmature_retarget.c	2013-05-08 13:23:17 UTC (rev 56576)
@@ -40,6 +40,7 @@
 #include "BKE_constraint.h"
 #include "BKE_armature.h"
 #include "BKE_context.h"
+#include "BKE_scene.h"
 
 #include "ED_armature.h"
 #include "ED_util.h"
@@ -283,14 +284,8 @@
 	rg->free_node = NULL;
 	
 #ifdef USE_THREADS
-//	if (G.scene->r.mode & R_FIXED_THREADS)
-//	{
-//		totthread = G.scene->r.threads;
-//	}
-//	else
-//	{
+	//totthread = BKE_scene_num_threads(G.scene);
 	totthread = BLI_system_thread_count();
-//	}
 	
 	rg->worker = BLI_create_worker(exec_retargetArctoArc, totthread, 20); /* fix number of threads */
 #endif

Modified: trunk/blender/source/blender/editors/object/object_bake.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_bake.c	2013-05-08 13:23:13 UTC (rev 56575)
+++ trunk/blender/source/blender/editors/object/object_bake.c	2013-05-08 13:23:17 UTC (rev 56576)
@@ -63,6 +63,7 @@
 #include "BKE_subsurf.h"
 #include "BKE_depsgraph.h"
 #include "BKE_mesh.h"
+#include "BKE_scene.h"
 
 #include "RE_pipeline.h"
 #include "RE_shader_ext.h"
@@ -339,7 +340,7 @@
 		bkr.number_of_rays = scene->r.bake_samples;
 		bkr.raytrace_structure = scene->r.raytrace_structure;
 		bkr.octree_resolution = scene->r.ocres;
-		bkr.threads = scene->r.mode & R_FIXED_THREADS ? scene->r.threads : 0;
+		bkr.threads = BKE_scene_num_threads(scene);
 
 		/* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */
 		bkr.hires_dm = multiresbake_create_hiresdm(scene, ob, &bkr.tot_lvl, &bkr.simple);
@@ -377,7 +378,7 @@
 	bkj->number_of_rays = scene->r.bake_samples;
 	bkj->raytrace_structure = scene->r.raytrace_structure;
 	bkj->octree_resolution = scene->r.ocres;
-	bkj->threads = scene->r.mode & R_FIXED_THREADS ? scene->r.threads : 0;
+	bkj->threads = BKE_scene_num_threads(scene);
 
 	CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases)
 	{

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image_proj.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image_proj.c	2013-05-08 13:23:13 UTC (rev 56575)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image_proj.c	2013-05-08 13:23:17 UTC (rev 56576)
@@ -3047,12 +3047,8 @@
 	 * threads is being able to fill in multiple buckets at once.
 	 * Only use threads for bigger brushes. */
 
-	if (ps->scene->r.mode & R_FIXED_THREADS) {
-		ps->thread_tot = ps->scene->r.threads;
-	}
-	else {
-		ps->thread_tot = BLI_system_thread_count();
-	}
+	ps->thread_tot = BKE_scene_num_threads(ps->scene);
+
 	for (a = 0; a < ps->thread_tot; a++) {
 		ps->arena_mt[a] = BLI_memarena_new(1 << 16, "project paint arena");
 	}

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2013-05-08 13:23:13 UTC (rev 56575)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2013-05-08 13:23:17 UTC (rev 56576)
@@ -671,11 +671,18 @@
 static int rna_RenderSettings_threads_get(PointerRNA *ptr)
 {
 	RenderData *rd = (RenderData *)ptr->data;
+	return BKE_render_num_threads(rd);
+}
 
-	if (rd->mode & R_FIXED_THREADS)
-		return rd->threads;
+static int rna_RenderSettings_threads_mode_get(PointerRNA *ptr)
+{
+	RenderData *rd = (RenderData *)ptr->data;
+	int override = BLI_system_num_threads_override_get();
+
+	if (override > 0)
+		return R_FIXED_THREADS;
 	else
-		return BLI_system_thread_count();
+		return (rd->mode & R_FIXED_THREADS);
 }
 
 static int rna_RenderSettings_is_movie_fomat_get(PointerRNA *ptr)
@@ -4327,6 +4334,7 @@
 	prop = RNA_def_property(srna, "threads_mode", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_bitflag_sdna(prop, NULL, "mode");
 	RNA_def_property_enum_items(prop, threads_mode_items);
+	RNA_def_property_enum_funcs(prop, "rna_RenderSettings_threads_mode_get", NULL, NULL);
 	RNA_def_property_ui_text(prop, "Threads Mode", "Determine the amount of render threads used");
 	RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
 	

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list