7 #ifndef PXR_EXEC_VDF_PARALLEL_EXECUTOR_DATA_MANAGER_H
8 #define PXR_EXEC_VDF_PARALLEL_EXECUTOR_DATA_MANAGER_H
41 template <
typename DerivedClass >
45 typename Vdf_ParallelExecutorDataManagerTraits<DerivedClass>::DataHandle
123 const VdfId destOutputId)
const;
153 const VdfId outputId,
154 const VdfMask &invalidationMask)
const;
165 const VdfMask &invalidationMask);
178 _invalidationTimestamp = timestamp;
184 return _invalidationTimestamp;
200 _invalidationTimestamp(
226 template<
typename DerivedClass>
242 return GetOutputValueForReading(
253 return Base::_IsValidDataHandle(dataHandle)
254 ? _GetOutputValueForReading(
255 Base::_GetPrivateBufferData(dataHandle), mask)
259 template<
typename DerivedClass>
271 if (!Base::_IsValidDataHandle(dataHandle)) {
277 if (
VdfVector *
value = _GetOutputValueForReading(publicData, mask)) {
283 Base::_GetTransferredBufferData(dataHandle);
285 ? _GetOutputValueForReading(transferData, mask)
289 template<
typename DerivedClass>
296 if (!Base::_IsValidDataHandle(handle)) {
310 return CreateOutputCache(output, bufferData);
313 template <
typename DerivedClass >
326 Base::_Touch(outputId);
329 const DataHandle handle = Base::_GetOrCreateDataHandle(outputId);
336 const bool mergeData =
347 outputValue->
Merge(*publicValue, publicMask - mask);
348 outputValue->
Merge(value, mask);
353 outputValue->
Copy(value, mask);
360 Base::_PublishPrivateBufferData(handle);
363 template <
typename DerivedClass >
376 Base::_Touch(outputId);
379 const DataHandle handle = Base::_GetOrCreateDataHandle(outputId);
382 return Base::_TransferBufferData(handle, value, mask);
385 template <
typename DerivedClass >
389 const VdfId destOutputId)
const
391 const DataHandle handle = Base::_GetDataHandle(destOutputId);
400 template <
typename DerivedClass >
406 TfAutoMallocTag2 tag(
407 "Vdf",
"VdfParallelExecutorDataManager::CreateOutputCache");
417 template <
typename DerivedClass >
424 TfAutoMallocTag2 tag(
425 "Vdf",
"VdfParallelExecutorDataManager::CreateOutputCache");
435 template <
typename DerivedClass >
447 const VdfId destOutputId = destOutput.
GetId();
448 const VdfId sourceOutputId = sourceOutput.
GetId();
449 Base::_Untouch(destOutputId);
450 if (Base::_Untouch(sourceOutputId)) {
451 Base::_Touch(sourceOutputId);
452 Base::_Touch(destOutputId);
457 const DataHandle sourceHandle = Base::_GetDataHandle(sourceOutputId);
458 if (!Base::_IsValidDataHandle(sourceHandle)) {
463 const DataHandle destHandle = Base::_GetOrCreateDataHandle(destOutputId);
466 Base::_GetPublicBufferData(sourceHandle)->Clone(
467 Base::_GetPublicBufferData(destHandle));
470 Base::_GetInvalidationData(sourceHandle)->Clone(
471 Base::_GetInvalidationData(destHandle));
474 Base::_SetInvalidationTimestamp(
475 destHandle, Base::_GetInvalidationTimestamp(sourceHandle));
478 template <
typename DerivedClass >
481 const VdfId outputId,
482 const VdfMask &invalidationMask)
const
485 const bool wasTouched = Base::_IsTouched(outputId);
492 const DataHandle handle = Base::_GetDataHandle(outputId);
493 if (!Base::_IsValidDataHandle(handle)) {
499 return Base::_GetInvalidationData(handle)->IsInvalid(
500 invalidationMask, wasTouched);
503 template <
typename DerivedClass >
507 const VdfMask &invalidationMask)
513 const bool wasTouched = Base::_Untouch(outputId);
517 ? Base::_GetOrCreateDataHandle(outputId)
518 : Base::_GetDataHandle(outputId);
522 if (!Base::_IsValidDataHandle(handle)) {
529 const bool didInvalidate = Base::_GetInvalidationData(handle)->Invalidate(
530 invalidationMask, wasTouched);
538 Base::_SetInvalidationTimestamp(handle, GetInvalidationTimestamp());
576 Base::_ResetTransferredBufferData(handle);
586 template <
typename DerivedClass >
591 Base::_Touch(output.
GetId());
594 template <
typename DerivedClass >
613 Base::_IsValidDataHandle(sourceHandle) &&
614 Base::_IsValidDataHandle(destHandle) &&
615 Base::_GetInvalidationTimestamp(sourceHandle) !=
616 _invalidationTimestamp &&
617 Base::_GetInvalidationTimestamp(destHandle) ==
618 _invalidationTimestamp;
621 template <
typename DerivedClass >
639 const bool hasValue =
645 return hasValue ? value :
nullptr;
bool IsOutputInvalid(const VdfId outputId, const VdfMask &invalidationMask) const
The interface contract for the static polymorphism used by parallel executor data manager implementat...
bool InvalidateOutput(const VdfOutput &output, const VdfMask &invalidationMask)
#define PXR_NAMESPACE_OPEN_SCOPE
GLsizei const GLfloat * value
static VdfVector * CreateOutputCache(const VdfOutput &output, VdfExecutorBufferData *bufferData)
void DuplicateOutputData(const VdfOutput &sourceOutput, const VdfOutput &destOutput)
A VdfMask is placed on connections to specify the data flowing through them.
void Touch(const VdfOutput &output) const
const VdfNode & GetNode() const
VDF_API const VdfOutputSpec & GetSpec() const
This class provides functionality to manage executor data stored as VdfExecutorData from multiple thr...
VdfMask::Bits const & GetBits() const
Fast, compressed bit array which is capable of performing logical operations without first decompress...
void UpdateInvalidationTimestamp(const VdfInvalidationTimestamp ×tamp)
VdfVector * GetOrCreateOutputValueForWriting(const VdfOutput &output, const DataHandle dataHandle) const
#define TF_DEV_AXIOM(cond)
VdfVector * CreateExecutorCache(const VdfOutputSpec &spec)
void Copy(const VdfVector &rhs, const VdfMask &mask)
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 SetReferenceOutputValue(const VdfVector *sourceValue, const VdfId destOutputId) const
void SetOutputValue(const VdfOutput &output, const VdfVector &value, const VdfMask &mask)
const VdfInvalidationTimestamp & GetInvalidationTimestamp() const
bool HasInvalidationTimestampMismatch(const DataHandle &sourceHandle, const DataHandle &destHandle) const
Vdf_ParallelExecutorDataManagerInterface< DerivedClass, DataHandle > Base
VDF_API void Merge(const VdfVector &rhs, const VdfMask::Bits &bits)
void SetExecutorCacheMask(const VdfMask &mask)
bool Contains(const VdfMask &mask) const
This object is responsible for storing the executor buffer data, comprised of the executor cache vect...
Vdf_ParallelExecutorDataManagerTraits< DerivedClass >::DataHandle DataHandle
VdfVector * GetInputValue(const VdfConnection &connection, const VdfMask &mask) const
const VdfOutput & GetSourceOutput() const
Returns the output (ie. source) for this connection.
const VdfMask & GetExecutorCacheMask() const
VdfParallelExecutorDataManager()
VdfVector * GetOutputValueForReading(const DataHandle dataHandle, const VdfMask &mask) const
~VdfParallelExecutorDataManager()
unsigned int VdfInvalidationTimestamp
Type of the timestamp that identifies the most recent round of invalidation.
#define PXR_NAMESPACE_CLOSE_SCOPE
VdfVector * GetExecutorCache() const
bool TakeOutputValue(const VdfOutput &output, VdfVector *value, const VdfMask &mask)
uint64_t VdfId
The unique identifier type for Vdf objects.