mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
embree: Update to 4.3.1
This commit is contained in:
parent
d2f9245ddc
commit
c43eab55a4
219 changed files with 12630 additions and 6085 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue