7 #ifndef PXR_EXEC_VDF_PARALLEL_TASK_SYNC_H
8 #define PXR_EXEC_VDF_PARALLEL_TASK_SYNC_H
47 , _taskGraph(taskGraph)
57 void Reset(
const size_t num);
85 inline void MarkDone(
const size_t idx);
90 enum _TaskState : uint8_t {
97 std::unique_ptr<std::atomic<uint8_t>[]> _state;
100 std::unique_ptr<VdfParallelTaskWaitlist::HeadPtr[]> _waiting;
119 uint8_t
state = _state[idx].load(std::memory_order_acquire);
122 if (state == _TaskStateDone) {
128 else if (state == _TaskStateUnclaimed &&
129 _state[idx].compare_exchange_strong(state, _TaskStateClaimed)) {
135 return _waitlists.
WaitOn(&_waiting[idx], successor)
144 _state[idx].store(_TaskStateDone, std::memory_order_release);
VdfParallelTaskSync(const VdfParallelTaskSync &)=delete
#define PXR_NAMESPACE_OPEN_SCOPE
State Claim(const size_t idx, WorkTaskGraph::BaseTask *successor)
VdfParallelTaskSync(WorkTaskGraph *taskGraph)
The task is already done.
VdfParallelTaskSync & operator=(const VdfParallelTaskSync &)=delete
void MarkDone(const size_t idx)
VDF_API bool WaitOn(HeadPtr *headPtr, WorkTaskGraph::BaseTask *successor)
#define PXR_NAMESPACE_CLOSE_SCOPE
VDF_API bool CloseAndNotify(HeadPtr *headPtr, WorkTaskGraph *taskGraph)
VDF_API void Reset(const size_t num)
Instances of this class are used to synchronize dynamic, acyclic task graphs, allowing tasks to claim...