4#include <Jolt/Core/JobSystemWithBarrier.h>
41 return reinterpret_cast<JoltJob*
>(memory +
static_cast<size_t>(index) *
sizeof(
JoltJob));
47 JPH::JobSystemWithBarrier(maxBarriers),
57 for (uint32_t i = maxJobs; i-- > 0;)
65 JPH::JobHandle
CreateJob(
char const* name, JPH::ColorArg color, JobFunction
const& function,
66 JPH::uint32 dependencyCount = 0)
override
76 JoltJob* job = std::construct_at(
JobAt(index), name, color,
this, function, dependencyCount);
77 JPH::JobHandle handle(job);
78 if (dependencyCount == 0)
85 JPH::JobSystemWithBarrier::WaitForJobs(barrier);
91 char const* name =
"Jolt";
92#if defined(JPH_EXTERNAL_PROFILE) || defined(JPH_PROFILE_ENABLED)
93 name = job->GetName();
100 for (JPH::uint i = 0; i < count; ++i)
107 auto* pointer =
reinterpret_cast<std::byte*
>(job);
108 size_t const byteOffset =
static_cast<size_t>(pointer - begin);
109 uint32_t
const index =
static_cast<uint32_t
>(byteOffset /
sizeof(
JoltJob));
#define GLOBAL_ALLOC
Definition Allocator.hpp:240
#define CHECK(expr)
Definition Logging.hpp:92
Allocator interface (noexcept)
Definition Allocator.hpp:29
Definition JobSystem.hpp:135
size_t GetMaxConcurrency() const noexcept
Definition JobSystem.hpp:184
JobHandle CreateJob(StringView name, JobPriority priority, Fn &&function, uint32_t dependencyCount=0)
Definition JobSystem.hpp:187
Definition JoltCommon.hpp:10
size_t mMaxJobs
Definition JoltCommon.hpp:32
void WaitForJobs(Barrier *barrier) override
Definition JoltCommon.hpp:83
JoltJob * JobAt(uint32_t index) const noexcept
Definition JoltCommon.hpp:38
Core::Vector< uint32_t > mFreelist
Definition JoltCommon.hpp:34
Core::ScopedArena mJobArena
Definition JoltCommon.hpp:33
void QueueJob(JoltJob *job) override
Definition JoltCommon.hpp:89
int GetMaxConcurrency() const override
Definition JoltCommon.hpp:63
void FreeJob(JoltJob *job) override
Definition JoltCommon.hpp:104
~FoundationJoltJobSystem() override
Definition JoltCommon.hpp:61
Core::Mutex mFreelistMutex
Definition JoltCommon.hpp:35
void QueueJobs(JoltJob **jobs, JPH::uint count) override
Definition JoltCommon.hpp:98
Core::JobSystem * mJobs
Definition JoltCommon.hpp:36
FoundationJoltJobSystem(Core::JobSystem *jobs, uint32_t maxJobs, uint32_t maxBarriers, Core::Allocator *allocator=GLOBAL_ALLOC)
Definition JoltCommon.hpp:45
JPH::JobHandle CreateJob(char const *name, JPH::ColorArg color, JobFunction const &function, JPH::uint32 dependencyCount=0) override
Definition JoltCommon.hpp:65
Core::Allocator * mAllocator
Definition JoltCommon.hpp:31
JPH::JobSystem::Job JoltJob
Definition JoltCommon.hpp:11
std::vector< T, StlAllocator< T > > Vector
std::vector with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:149
std::mutex Mutex
Definition Thread.hpp:10
Definition JoltCommon.hpp:8
pointer memory
Definition Allocator.hpp:22
RAII wrapper for an arena allocated from an Allocator.
Definition Allocator.hpp:49
Arena arena
Definition Allocator.hpp:51
Definition JoltCommon.hpp:14
QueuedJob(QueuedJob &&other) noexcept
Definition JoltCommon.hpp:20
QueuedJob(QueuedJob const &)=delete
QueuedJob & operator=(QueuedJob &&)=delete
QueuedJob(JoltJob *value)
Definition JoltCommon.hpp:17
JoltJob * job
Definition JoltCommon.hpp:15
QueuedJob & operator=(QueuedJob const &)=delete
void operator()() const
Definition JoltCommon.hpp:28
~QueuedJob()
Definition JoltCommon.hpp:22