diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2013-12-20 03:43:26 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2013-12-20 03:43:26 +0400 |
commit | 29e3b098253270d4c5cf8337ad068bf4e98d7bdb (patch) | |
tree | 2e3b0b29ed17a172e2ecfb040aa23c723fa88900 /source/blender/compositor/intern/COM_WorkScheduler.cpp | |
parent | 8ed0878f0f6b2b37c709fffa514e11cac24ec94d (diff) |
Fix T37890: compositor did not take number of thread setting into account.
Diffstat (limited to 'source/blender/compositor/intern/COM_WorkScheduler.cpp')
-rw-r--r-- | source/blender/compositor/intern/COM_WorkScheduler.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/source/blender/compositor/intern/COM_WorkScheduler.cpp b/source/blender/compositor/intern/COM_WorkScheduler.cpp index 57e996fe3b2..76a3d92eb6c 100644 --- a/source/blender/compositor/intern/COM_WorkScheduler.cpp +++ b/source/blender/compositor/intern/COM_WorkScheduler.cpp @@ -271,7 +271,7 @@ static void clContextError(const char *errinfo, const void *private_info, size_t printf("OPENCL error: %s\n", errinfo); } -void WorkScheduler::initialize(bool use_opencl) +void WorkScheduler::initialize(bool use_opencl, int num_cpu_threads) { /* initialize highlighting */ if (!g_highlightInitialized) { @@ -287,11 +287,23 @@ void WorkScheduler::initialize(bool use_opencl) } #if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE + /* deinitialize if number of threads doesn't match */ + if (g_cpudevices.size() != num_cpu_threads) { + Device *device; + + while (g_cpudevices.size() > 0) { + device = g_cpudevices.back(); + g_cpudevices.pop_back(); + device->deinitialize(); + delete device; + } + + g_cpuInitialized = false; + } + /* initialize CPU threads */ if (!g_cpuInitialized) { - int numberOfCPUThreads = BLI_system_thread_count(); - - for (int index = 0; index < numberOfCPUThreads; index++) { + for (int index = 0; index < num_cpu_threads; index++) { CPUDevice *device = new CPUDevice(); device->initialize(); g_cpudevices.push_back(device); |