aboutsummaryrefslogtreecommitdiff
path: root/NvCloth/samples/SampleBase/utils/JobManager.h
diff options
context:
space:
mode:
authorMarijn Tamis <[email protected]>2018-05-03 18:22:48 +0200
committerMarijn Tamis <[email protected]>2018-05-03 18:22:48 +0200
commitca32c59a58d37c1822e185a2d5f3d0d3e8943593 (patch)
treeb06b9eec03f34344ef8fc31aa147b2714d3962ee /NvCloth/samples/SampleBase/utils/JobManager.h
parentForced rename of platform folders in cmake dir. Git didn't pick this up before. (diff)
downloadnvcloth-ca32c59a58d37c1822e185a2d5f3d0d3e8943593.tar.xz
nvcloth-ca32c59a58d37c1822e185a2d5f3d0d3e8943593.zip
NvCloth 1.1.4 Release. (24070740)
Diffstat (limited to 'NvCloth/samples/SampleBase/utils/JobManager.h')
-rw-r--r--NvCloth/samples/SampleBase/utils/JobManager.h30
1 files changed, 24 insertions, 6 deletions
diff --git a/NvCloth/samples/SampleBase/utils/JobManager.h b/NvCloth/samples/SampleBase/utils/JobManager.h
index 648fa33..7bb88c9 100644
--- a/NvCloth/samples/SampleBase/utils/JobManager.h
+++ b/NvCloth/samples/SampleBase/utils/JobManager.h
@@ -23,8 +23,8 @@
#include <queue>
#include <atomic>
-#include <task/PxTaskManager.h>
-#include <task/PxTask.h>
+#include "task/PxTaskManager.h"
+#include "task/PxTask.h"
namespace nv
{
@@ -78,9 +78,10 @@ class Job
public:
Job() = default;
Job(const Job&);
+ ~Job() { mValid = false; }
void Initialize(JobManager* parent, std::function<void(Job*)> function = std::function<void(Job*)>(), int refcount = 1);
void Reset(int refcount = 1); //Call this before reusing a job that doesn't need to be reinitialized
- void Execute();
+ virtual void Execute();
void AddReference();
void RemoveReference();
void Wait(); //Block until job is finished
@@ -94,6 +95,22 @@ private:
bool mFinished;
std::mutex mFinishedLock;
std::condition_variable mFinishedEvent;
+ bool mValid = true;
+};
+
+//this Job is a dependency to another job
+class JobDependency : public Job
+{
+public:
+ void SetDependentJob(Job* job) { mDependendJob = job; }
+ virtual void Execute() override
+ {
+ auto dependendJob = mDependendJob;
+ Job::Execute();
+ dependendJob->RemoveReference();
+ }
+private:
+ Job* mDependendJob;
};
class JobManager
@@ -134,10 +151,11 @@ public:
function(i);*/
Job finalJob;
finalJob.Initialize(this, std::function<void(Job*)>(), count);
- Job jobs[count];
+ JobDependency jobs[count];
for(int j = 0; j < count; j++)
{
- jobs[j].Initialize(this, [j, &finalJob, function](Job*) {function(j); finalJob.RemoveReference(); });
+ jobs[j].Initialize(this, [j, &finalJob, function](Job*) {function(j); });
+ jobs[j].SetDependentJob(&finalJob);
jobs[j].RemoveReference();
}
finalJob.Wait();
@@ -166,7 +184,7 @@ public:
private:
Job mStartSimulationJob;
Job mEndSimulationJob;
- std::vector<Job> mSimulationChunkJobs;
+ std::vector<JobDependency> mSimulationChunkJobs;
float mDt;