7 #ifndef PXR_EXEC_VDF_EXECUTOR_DATA_MANAGER_H
8 #define PXR_EXEC_VDF_EXECUTOR_DATA_MANAGER_H
46 template<
typename DerivedClass>
50 typename Vdf_ExecutorDataManagerTraits<DerivedClass>::DataHandle>
118 const VdfId destOutputId)
const;
152 const VdfId outputId,
153 const VdfMask &invalidationMask)
const;
161 const VdfMask &invalidationMask);
171 _invalidationTimestamp = timestamp;
177 return _invalidationTimestamp;
216 _invalidationTimestamp(
235 template<
typename DerivedClass>
252 return GetOutputValueForReading(
253 Base::_GetDataHandle(readOutput.
GetId()), mask);
256 template<
typename DerivedClass>
273 const bool hasValue =
274 Base::_IsValidDataHandle(handle) &&
275 Base::_GetBufferData(handle)->GetExecutorCache() &&
277 (Base::_GetBufferData(handle)
278 ->GetExecutorCacheMask().IsAnySet() &&
279 Base::_GetBufferData(handle)
280 ->GetExecutorCacheMask().Contains(mask)));
283 ? Base::_GetBufferData(handle)->GetExecutorCache()
287 template<
typename DerivedClass>
294 if (!Base::_IsValidDataHandle(handle)) {
305 return CreateOutputCache(output, bufferData);
308 template<
typename DerivedClass>
319 const DataHandle handle = Base::_GetOrCreateDataHandle(output.
GetId());
323 VdfVector *outputValue = bufferData->GetExecutorCache();
326 outputValue = CreateOutputCache(output, bufferData);
331 Base::_Touch(handle);
334 const VdfMask &cacheMask = bufferData->GetExecutorCacheMask();
335 const bool mergeData =
343 outputValue->
Merge(value, mask);
345 outputValue->
Copy(value, mask);
349 SetComputedOutputMask(bufferData, mergeData ? cacheMask | mask : mask);
352 template<
typename DerivedClass>
363 const DataHandle handle = Base::_GetOrCreateDataHandle(output.
GetId());
367 if (bufferData->GetExecutorCache()) {
372 bufferData->TakeOwnership(value);
373 bufferData->SetExecutorCacheMask(mask);
377 Base::_Touch(handle);
383 template<
typename DerivedClass>
387 const VdfId destOutputId)
const
389 const DataHandle handle = Base::_GetDataHandle(destOutputId);
398 template<
typename DerivedClass>
413 template<
typename DerivedClass>
421 const DataHandle sourceHandle = Base::_GetDataHandle(sourceOutput.
GetId());
422 if (!Base::_IsValidDataHandle(sourceHandle)) {
432 Base::_GetOrCreateDataHandle(destOutput.
GetId());
435 Base::_GetBufferData(sourceHandle)->Clone(Base::_GetBufferData(destHandle));
438 Base::_GetInvalidationData(sourceHandle)->Clone(
439 Base::_GetInvalidationData(destHandle));
442 Base::_SetInvalidationTimestamp(
443 destHandle, Base::_GetInvalidationTimestamp(sourceHandle));
446 Base::_Untouch(destHandle);
447 if (Base::_Untouch(sourceHandle)) {
448 Base::_Touch(sourceHandle);
449 Base::_Touch(destHandle);
453 if (
VdfSMBLData *smblData = Base::_GetSMBLData(destHandle)) {
458 template<
typename DerivedClass>
461 const VdfId outputId,
462 const VdfMask &invalidationMask)
const
466 const DataHandle handle = Base::_GetDataHandle(outputId);
467 if (!Base::_IsValidDataHandle(handle)) {
474 const bool wasTouched = Base::_IsTouched(handle);
477 Base::_GetInvalidationData(handle)->IsInvalid(
478 invalidationMask, wasTouched);
481 template<
typename DerivedClass>
485 const VdfMask &invalidationMask)
491 if (!Base::_IsValidDataHandle(handle)) {
498 const bool didInvalidate = Base::_GetInvalidationData(handle)->Invalidate(
499 invalidationMask, Base::_Untouch(handle));
507 Base::_SetInvalidationTimestamp(handle, GetInvalidationTimestamp());
523 Base::_GetOrCreateSMBLData(handle)->InvalidateCacheMask(
549 template<
typename DerivedClass>
553 Base::_Touch(Base::_GetOrCreateDataHandle(output.
GetId()));
556 template<
typename DerivedClass>
583 TfAutoMallocTag2 tag(
584 "Vdf",
"VdfExecutorDataManager<DerivedClass>::PassBuffer (keep)");
588 VdfVector *keptValue = CreateOutputCache(fromOutput, fromBuffer);
595 keptValue->
Copy(*result, keepMask);
607 template<
typename DerivedClass>
626 Base::_IsValidDataHandle(sourceHandle) &&
627 Base::_IsValidDataHandle(destHandle) &&
628 Base::_GetInvalidationTimestamp(destHandle) ==
629 _invalidationTimestamp &&
630 Base::_GetInvalidationTimestamp(sourceHandle) !=
631 _invalidationTimestamp;
VdfInvalidationTimestamp GetInvalidationTimestamp() const
#define PXR_NAMESPACE_OPEN_SCOPE
GLsizei const GLfloat * value
Vdf_ExecutorDataManagerInterface< DerivedClass, DataHandle > Base
A VdfMask is placed on connections to specify the data flowing through them.
const VdfNode & GetNode() const
**But if you need a result
bool HasInvalidationTimestampMismatch(const DataHandle sourceHandle, const DataHandle destHandle) const
VDF_API const VdfOutputSpec & GetSpec() const
This class provides functionality to manage the executor specific data associated with each output in...
bool TakeOutputValue(const VdfOutput &output, VdfVector *value, const VdfMask &mask)
void SetOutputValue(const VdfOutput &output, const VdfVector &value, const VdfMask &mask)
#define TF_DEV_AXIOM(cond)
VdfVector * CreateExecutorCache(const VdfOutputSpec &spec)
bool InvalidateOutput(const VdfOutput &output, const VdfMask &invalidationMask)
void Copy(const VdfVector &rhs, const VdfMask &mask)
VdfVector * CreateOutputCache(const VdfOutput &output, VdfExecutorBufferData *bufferData) const
void ResetExecutorCache(const VdfMask &mask)
const VdfNetwork & GetNetwork() const
const VdfInput & GetTargetInput() const
Returns the input connector (ie. target) for this connection.
bool Vdf_IsPoolOutput(const VdfOutput &output)
void SetComputedOutputMask(VdfExecutorBufferData *bufferData, const VdfMask &mask)
VdfSMBLData holds per-output data that is meant to be consumed by the executor. This data is an optio...
VDF_API void Merge(const VdfVector &rhs, const VdfMask::Bits &bits)
void SetExecutorCacheMask(const VdfMask &mask)
~VdfExecutorDataManager()=default
bool IsOutputInvalid(const VdfId outputId, const VdfMask &invalidationMask) const
This object is responsible for storing the executor buffer data, comprised of the executor cache vect...
VdfVector * PassBuffer(const VdfOutput &fromOutput, VdfExecutorBufferData *fromBuffer, const VdfOutput &toOutput, VdfExecutorBufferData *toBuffer, const VdfMask &keepMask)
Vdf_ExecutorDataManagerTraits< DerivedClass >::DataHandle DataHandle
VdfVector * GetOrCreateOutputValueForWriting(const VdfOutput &output, const DataHandle handle) const
void SetReferenceOutputValue(const VdfVector *sourceValue, const VdfId destOutputId) const
const VdfOutput & GetSourceOutput() const
Returns the output (ie. source) for this connection.
const VdfMask & GetExecutorCacheMask() const
The interface contract for the static polymorphism used by executor data manager implementations.
unsigned int VdfInvalidationTimestamp
Type of the timestamp that identifies the most recent round of invalidation.
#define PXR_NAMESPACE_CLOSE_SCOPE
void Touch(const VdfOutput &output) const
void DuplicateOutputData(const VdfOutput &sourceOutput, const VdfOutput &destOutput)
const VdfVector * GetInputValue(const VdfConnection &connection, const VdfMask &mask) const
VdfVector * SwapExecutorCache(VdfExecutorBufferData *rhs)
VdfVector * GetExecutorCache() const
VdfVector * GetOutputValueForReading(const DataHandle handle, const VdfMask &mask) const
void UpdateInvalidationTimestamp(VdfInvalidationTimestamp timestamp)
uint64_t VdfId
The unique identifier type for Vdf objects.