7 #ifndef PXR_EXEC_VDF_NETWORK_H
8 #define PXR_EXEC_VDF_NETWORK_H
22 #include "tbb/concurrent_queue.h"
23 #include "tbb/concurrent_unordered_map.h"
24 #include "tbb/concurrent_vector.h"
31 #include <unordered_map>
46 class VdfPoolChainIndexer;
48 class Vdf_InputAndOutputSpecsRegistry;
49 class Vdf_ScheduleInvalidator;
88 return _outputCapacity.load(std::memory_order_acquire);
100 return _nodes.size() - _freeNodeIds.unsafe_size();
106 return i < _nodes.size() ? _nodes[i] :
nullptr;
112 return i < _nodes.size() ? _nodes[i] :
nullptr;
150 virtual void WillClear() = 0;
154 virtual void DidConnect(
const VdfConnection *connection) = 0;
158 virtual void DidAddNode(
const VdfNode *node) = 0;
162 virtual void WillDelete(
const VdfNode *node) = 0;
166 virtual void WillDelete(
const VdfConnection *connection) = 0;
260 return _version.load(std::memory_order_acquire);
274 size_t DumpStats(std::ostream &os)
const;
298 void _RegisterNodeDebugName(
305 void _UnregisterNodeDebugName(
const VdfNode &node);
317 void _DeleteNode(
VdfNode *node);
333 void _RemoveNode(
VdfNode *node);
337 void _DidChangeAffectsMask(
VdfOutput &output);
341 size_t _AcquireOutputId();
345 void _ReleaseOutputId(
const VdfId id);
349 void _IncrementVersion();
366 void _RegisterSchedule(
VdfSchedule *schedule)
const;
370 void _UnregisterSchedule(
VdfSchedule *schedule)
const;
374 Vdf_ScheduleInvalidator* _GetScheduleInvalidator()
const {
375 return _scheduleInvalidator.get();
382 Vdf_InputAndOutputSpecsRegistry &_GetInputOutputSpecsRegistry() {
383 return *_specsRegistry;
387 tbb::concurrent_vector<VdfNode *> _nodes;
390 tbb::concurrent_queue<VdfId> _freeNodeIds;
396 std::atomic<uint32_t> _outputCapacity;
399 tbb::concurrent_queue<VdfId> _freeOutputIds;
403 _EditMonitorVector _monitors;
406 std::unique_ptr<Vdf_ScheduleInvalidator> _scheduleInvalidator;
409 std::unique_ptr<VdfPoolChainIndexer> _poolChainIndexer;
412 std::unique_ptr<Vdf_InputAndOutputSpecsRegistry> _specsRegistry;
415 std::atomic<size_t> _version;
418 using _NodeDebugNamesMap = tbb::concurrent_unordered_map<
420 std::unique_ptr<Vdf_ExecNodeDebugName>,
423 _NodeDebugNamesMap _nodeDebugNames;
uint32_t VdfVersion
The version type for Vdf objects.
VDF_API bool DisconnectAndDelete(VdfNode *node)
#define PXR_NAMESPACE_OPEN_SCOPE
A VdfMask is placed on connections to specify the data flowing through them.
VDF_API const std::string GetNodeDebugName(const VdfNode *node) const
VDF_API VdfConnection * Connect(VdfOutput *output, VdfNode *inputNode, const TfToken &inputName, const VdfMask &mask, int atIndex=AppendConnection)
static const int AppendConnection
size_t GetNumOwnedNodes() const
Contains a specification of how to execute a particular VdfNetwork.
TfHashSet< const VdfOutput *, TfHash > VdfOutputPtrSet
VDF_API void Disconnect(VdfConnection *connection)
size_t GetVersion() const
const VdfNode * GetNode(size_t i) const
VDF_API void ReorderInputConnections(VdfInput *input, const TfSpan< const VdfConnectionVector::size_type > &newToOldIndices)
Class to hold on to an externally owned output and a mask.
VDF_API bool Delete(VdfNode *node)
VDF_API const VdfNode * GetNodeById(const VdfId nodeId) const
VDF_API void UnregisterEditMonitor(EditMonitor *monitor)
#define PXR_NAMESPACE_CLOSE_SCOPE
VdfNode * GetNode(size_t i)
VDF_API size_t DumpStats(std::ostream &os) const
uint32_t GetOutputCapacity() const
size_t GetNodeCapacity() const
VDF_API VdfPoolChainIndex GetPoolChainIndex(const VdfOutput &output) const
VDF_API void RegisterEditMonitor(EditMonitor *monitor)
std::function< std::string()> VdfNodeDebugNameCallback
Type of callback for building a node debug name.
uint64_t VdfId
The unique identifier type for Vdf objects.
uint32_t VdfIndex
The index type for Vdf objects.