7 #ifndef PXR_EXEC_VDF_SPARSE_VECTORIZED_OUTPUT_TRAVERSER_H
8 #define PXR_EXEC_VDF_SPARSE_VECTORIZED_OUTPUT_TRAVERSER_H
22 #include <tbb/concurrent_unordered_map.h>
46 using NodeCallback = std::function<bool (const VdfNode &, size_t)>;
66 struct _PoolDependency {
72 struct _Dependencies {
81 struct _OutputAndMask {
88 using _VisitedOutputs =
92 using _OutputStack = std::vector<_OutputAndMask>;
95 using _PoolQueue = std::map<const VdfPoolChainIndex, _OutputAndMask>;
100 const _OutputAndMask &outputAndMask,
101 _VisitedOutputs *visitedOutputs);
110 void _TraverseOutput(
112 const _OutputAndMask &outputAndMask,
118 void _QueuePoolOutput(
120 const _OutputAndMask &outputAndMask,
124 bool _TakePoolShortcut(
125 const _OutputAndMask &outputAndMask,
130 const _Dependencies &_GetDependencies(
131 const _OutputAndMask &outputAndMask);
134 void _ComputeDependencies(
135 const _OutputAndMask &outputAndMask,
136 _Dependencies *dependencies);
139 using _DependencyMap = tbb::concurrent_unordered_map<
141 _DependencyMap _dependencyMap;
#define PXR_NAMESPACE_OPEN_SCOPE
A VdfMask is placed on connections to specify the data flowing through them.
VDF_API void Traverse(const VdfMaskedOutputVector &outputs, const NodeCallback &callback)
std::function< bool(const VdfNode &, size_t)> NodeCallback
VDF_API void Invalidate()
*get result *(waiting if necessary)*A common idiom is to fire a bunch of sub tasks at the queue
Class to hold on to an externally owned output and a mask.
#define PXR_NAMESPACE_CLOSE_SCOPE
std::vector< VdfMaskedOutput > VdfMaskedOutputVector