diff options
Diffstat (limited to 'thirdparty/embree/common/tasking/taskschedulerinternal.cpp')
-rw-r--r-- | thirdparty/embree/common/tasking/taskschedulerinternal.cpp | 36 |
1 files changed, 11 insertions, 25 deletions
diff --git a/thirdparty/embree/common/tasking/taskschedulerinternal.cpp b/thirdparty/embree/common/tasking/taskschedulerinternal.cpp index ad438588a3..88b88a30ec 100644 --- a/thirdparty/embree/common/tasking/taskschedulerinternal.cpp +++ b/thirdparty/embree/common/tasking/taskschedulerinternal.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "taskschedulerinternal.h" -#include "../math/math.h" +#include "../math/emath.h" #include "../sys/sysinfo.h" #include <algorithm> @@ -50,11 +50,11 @@ namespace embree thread.task = this; // -- GODOT start -- // try { - // if (thread.scheduler->cancellingException == nullptr) + // if (context->cancellingException == nullptr) closure->execute(); // } catch (...) { - // if (thread.scheduler->cancellingException == nullptr) - // thread.scheduler->cancellingException = std::current_exception(); + // if (context->cancellingException == nullptr) + // context->cancellingException = std::current_exception(); // } // -- GODOT end -- thread.task = prevTask; @@ -152,7 +152,8 @@ namespace embree { Lock<MutexSys> lock(g_mutex); assert(newNumThreads); - newNumThreads = min(newNumThreads, (size_t) getNumberOfLogicalThreads()); + if (newNumThreads == std::numeric_limits<size_t>::max()) + newNumThreads = (size_t) getNumberOfLogicalThreads(); numThreads = newNumThreads; if (!startThreads && !running) return; @@ -232,7 +233,8 @@ namespace embree TaskScheduler::TaskScheduler() : threadCounter(0), anyTasksRunning(0), hasRootTask(false) { - threadLocal.resize(2*getNumberOfLogicalThreads()); // FIXME: this has to be 2x as in the compatibility join mode with rtcCommitScene the worker threads also join. When disallowing rtcCommitScene to join a build we can remove the 2x. + assert(threadPool); + threadLocal.resize(2 * TaskScheduler::threadCount()); // FIXME: this has to be 2x as in the compatibility join mode with rtcCommitScene the worker threads also join. When disallowing rtcCommitScene to join a build we can remove the 2x. for (size_t i=0; i<threadLocal.size(); i++) threadLocal[i].store(nullptr); } @@ -293,11 +295,7 @@ namespace embree size_t threadIndex = allocThreadIndex(); condition.wait(mutex, [&] () { return hasRootTask.load(); }); mutex.unlock(); - // -- GODOT start -- - // std::exception_ptr except = thread_loop(threadIndex); - // if (except != nullptr) std::rethrow_exception(except); thread_loop(threadIndex); - // -- GODOT end -- } void TaskScheduler::reset() { @@ -321,18 +319,15 @@ namespace embree return old; } - dll_export bool TaskScheduler::wait() + dll_export void TaskScheduler::wait() { Thread* thread = TaskScheduler::thread(); - if (thread == nullptr) return true; + if (thread == nullptr) + return; while (thread->tasks.execute_local_internal(*thread,thread->task)) {}; - return thread->scheduler->cancellingException == nullptr; } -// -- GODOT start -- -// std::exception_ptr TaskScheduler::thread_loop(size_t threadIndex) void TaskScheduler::thread_loop(size_t threadIndex) -// -- GODOT end -- { /* allocate thread structure */ std::unique_ptr<Thread> mthread(new Thread(threadIndex,this)); // too large for stack allocation @@ -354,11 +349,6 @@ namespace embree threadLocal[threadIndex].store(nullptr); swapThread(oldThread); - /* remember exception to throw */ - // -- GODOT start -- - // std::exception_ptr except = nullptr; - // if (cancellingException != nullptr) except = cancellingException; - // -- GODOT end -- /* wait for all threads to terminate */ threadCounter--; #if defined(__WIN32__) @@ -376,10 +366,6 @@ namespace embree yield(); #endif } - // -- GODOT start -- - // return except; - return; - // -- GODOT end -- } bool TaskScheduler::steal_from_other_threads(Thread& thread) |