[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