Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/jolt_physics/Jolt/Core/JobSystemSingleThreaded.h
9906 views
1
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2
// SPDX-FileCopyrightText: 2023 Jorrit Rouwe
3
// SPDX-License-Identifier: MIT
4
5
#pragma once
6
7
#include <Jolt/Core/JobSystem.h>
8
#include <Jolt/Core/FixedSizeFreeList.h>
9
10
JPH_NAMESPACE_BEGIN
11
12
/// Implementation of a JobSystem without threads, runs jobs as soon as they are added
13
class JPH_EXPORT JobSystemSingleThreaded final : public JobSystem
14
{
15
public:
16
JPH_OVERRIDE_NEW_DELETE
17
18
/// Constructor
19
JobSystemSingleThreaded() = default;
20
explicit JobSystemSingleThreaded(uint inMaxJobs) { Init(inMaxJobs); }
21
22
/// Initialize the job system
23
/// @param inMaxJobs Max number of jobs that can be allocated at any time
24
void Init(uint inMaxJobs);
25
26
// See JobSystem
27
virtual int GetMaxConcurrency() const override { return 1; }
28
virtual JobHandle CreateJob(const char *inName, ColorArg inColor, const JobFunction &inJobFunction, uint32 inNumDependencies = 0) override;
29
virtual Barrier * CreateBarrier() override;
30
virtual void DestroyBarrier(Barrier *inBarrier) override;
31
virtual void WaitForJobs(Barrier *inBarrier) override;
32
33
protected:
34
// Dummy implementation of Barrier, all jobs are executed immediately
35
class BarrierImpl : public Barrier
36
{
37
public:
38
JPH_OVERRIDE_NEW_DELETE
39
40
// See Barrier
41
virtual void AddJob(const JobHandle &inJob) override { /* We don't need to track jobs */ }
42
virtual void AddJobs(const JobHandle *inHandles, uint inNumHandles) override { /* We don't need to track jobs */ }
43
44
protected:
45
/// Called by a Job to mark that it is finished
46
virtual void OnJobFinished(Job *inJob) override { /* We don't need to track jobs */ }
47
};
48
49
// See JobSystem
50
virtual void QueueJob(Job *inJob) override;
51
virtual void QueueJobs(Job **inJobs, uint inNumJobs) override;
52
virtual void FreeJob(Job *inJob) override;
53
54
/// Shared barrier since the barrier implementation does nothing
55
BarrierImpl mDummyBarrier;
56
57
/// Array of jobs (fixed size)
58
using AvailableJobs = FixedSizeFreeList<Job>;
59
AvailableJobs mJobs;
60
};
61
62
JPH_NAMESPACE_END
63
64