Loading...
Searching...
No Matches
dataManagerBasedExecutor.h
Go to the documentation of this file.
1//
2// Copyright 2025 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
7#ifndef PXR_EXEC_VDF_DATA_MANAGER_BASED_EXECUTOR_H
8#define PXR_EXEC_VDF_DATA_MANAGER_BASED_EXECUTOR_H
9
11
12#include "pxr/pxr.h"
13
15#include "pxr/exec/vdf/output.h"
16#include "pxr/exec/vdf/vector.h"
17
18PXR_NAMESPACE_OPEN_SCOPE
19
29
30template<typename DataManagerType, typename BaseClass>
31class VdfDataManagerBasedExecutor : public BaseClass
32{
33public:
34
38
42 const VdfExecutorInterface *parentExecutor) :
43 BaseClass(parentExecutor)
44 {}
45
49
52 virtual void Resize(const VdfNetwork &network) override {
53 _dataManager.Resize(network);
54 }
55
61 virtual void SetOutputValue(
62 const VdfOutput &output,
63 const VdfVector &value,
64 const VdfMask &mask) override {
65 _dataManager.SetOutputValue(output, value, mask);
66 }
67
70 virtual bool TakeOutputValue(
71 const VdfOutput &output,
72 VdfVector *value,
73 const VdfMask &mask) override {
74 return _dataManager.TakeOutputValue(output, value, mask);
75 }
76
80 virtual void DuplicateOutputData(
81 const VdfOutput &sourceOutput,
82 const VdfOutput &destOutput) override {
83 _dataManager.DuplicateOutputData(sourceOutput, destOutput);
84 }
85
88 virtual bool IsEmpty() const override {
89 return _dataManager.IsEmpty();
90 }
91
96 const VdfOutput &source,
97 const VdfOutput &dest) const override {
98 return _dataManager.HasInvalidationTimestampMismatch(
99 _dataManager.GetDataHandle(source.GetId()),
100 _dataManager.GetDataHandle(dest.GetId()));
101 }
102
103protected:
104
107 virtual const VdfVector *_GetInputValue(
108 const VdfConnection &connection,
109 const VdfMask &mask) const override {
110 return _dataManager.GetInputValue(connection, mask);
111 }
112
116 const VdfOutput &output,
117 const VdfMask &mask) const override {
118 return _dataManager.GetOutputValueForReading(
119 _dataManager.GetDataHandle(output.GetId()), mask);
120 }
121
125 const VdfOutput &output) const override {
126 return _dataManager.GetOrCreateOutputValueForWriting(
127 output, _dataManager.GetDataHandle(output.GetId()));
128 }
129
133 const VdfId outputId, const VdfId nodeId) override {
134 _dataManager.ClearDataForOutput(outputId);
135 }
136
140 virtual bool _IsOutputInvalid(
141 const VdfId outputId,
142 const VdfMask &invalidationMask) const override {
143 return _dataManager.IsOutputInvalid(outputId, invalidationMask);
144 }
145
156 virtual bool _InvalidateOutput(
157 const VdfOutput &output,
158 const VdfMask &invalidationMask) override
159 {
160 return _dataManager.InvalidateOutput(output, invalidationMask);
161 }
162
167 virtual void _UpdateInvalidationTimestamp() override
168 {
169 _dataManager.UpdateInvalidationTimestamp(
170 BaseClass::GetExecutorInvalidationTimestamp());
171 }
172
177 const VdfOutput &destOutput,
178 const VdfOutput &sourceOutput,
179 const VdfMask &sourceMask) const override {
180 // XXX: We are getting the cached output value from the executor, which
181 // may give us a pointer into the parent executor data manager. We
182 // cannot take ownership of values stored outside of this
183 // executor's data manager. We have to come up with a way to
184 // support reference outputs as a core concept!
185 const VdfVector *sourceValue =
186 _GetOutputValueForReading(sourceOutput, sourceMask);
187 _dataManager.SetReferenceOutputValue(sourceValue, destOutput.GetId());
188 }
189
194 virtual void _TouchOutput(const VdfOutput &output) const override
195 {
196 _dataManager.DataManagerType::Base::Touch(output);
197 }
198
199
200protected:
201
202 // This object manages the data needed for this executor, including all
203 // the cached output values.
204 DataManagerType _dataManager;
205};
206
207PXR_NAMESPACE_CLOSE_SCOPE
208
209#endif
A class that fully represents a connection between two VdfNodes.
Definition: connection.h:30
Base class for executors that use a data manager.
virtual ~VdfDataManagerBasedExecutor()
Destructor.
virtual void Resize(const VdfNetwork &network) override
Resize the executor data manager to accommodate the given network.
VdfDataManagerBasedExecutor(const VdfExecutorInterface *parentExecutor)
Construct with a parent executor.
virtual void _TouchOutput(const VdfOutput &output) const override
Mark the output as having been visited.
virtual bool IsEmpty() const override
Returns true of the data manager is empty.
virtual bool TakeOutputValue(const VdfOutput &output, VdfVector *value, const VdfMask &mask) override
Transfers the value to the given output.
void _ClearDataForOutput(const VdfId outputId, const VdfId nodeId) override
Clears the data for a specific output on this executor.
virtual bool _IsOutputInvalid(const VdfId outputId, const VdfMask &invalidationMask) const override
Returns true if the output is already invalid for the given invalidationMask.
virtual VdfVector * _GetOutputValueForWriting(const VdfOutput &output) const override
Returns an output value for writing.
virtual const VdfVector * _GetOutputValueForReading(const VdfOutput &output, const VdfMask &mask) const override
Returns an output value for reading.
virtual const VdfVector * _GetInputValue(const VdfConnection &connection, const VdfMask &mask) const override
Returns value for the cache that flows across connection.
virtual void _SetReferenceOutputValue(const VdfOutput &destOutput, const VdfOutput &sourceOutput, const VdfMask &sourceMask) const override
Called to set destOutput's buffer output to be a reference to the buffer output of sourceOutput.
virtual void SetOutputValue(const VdfOutput &output, const VdfVector &value, const VdfMask &mask) override
Sets the cached value for a given output.
virtual void DuplicateOutputData(const VdfOutput &sourceOutput, const VdfOutput &destOutput) override
Duplicates the output data associated with sourceOutput and copies it to destOutput.
virtual void _UpdateInvalidationTimestamp() override
Called before invalidation begins to update the timestamp that will be written for every VdfOutput vi...
VdfDataManagerBasedExecutor()
Default constructor.
virtual bool _InvalidateOutput(const VdfOutput &output, const VdfMask &invalidationMask) override
Called during invalidation to mark outputs as invalid and determine when the traversal can terminate ...
virtual bool HasInvalidationTimestampMismatch(const VdfOutput &source, const VdfOutput &dest) const override
Returns true, if the invalidation timestamps between the source and dest outputs do not match,...
Abstract base class for classes that execute a VdfNetwork to compute a requested set of values.
A VdfMask is placed on connections to specify the data flowing through them.
Definition: mask.h:37
A VdfNetwork is a collection of VdfNodes and their connections.
Definition: network.h:60
A VdfOutput represents an output on a node.
Definition: output.h:32
VdfId GetId() const
The unique id of this output.
Definition: output.h:100
This class is used to abstract away knowledge of the cache data used for each node.
Definition: vector.h:56
uint64_t VdfId
The unique identifier type for Vdf objects.
Definition: types.h:107