7#ifndef PXR_EXEC_VDF_EXECUTOR_INVALIDATION_DATA_H
8#define PXR_EXEC_VDF_EXECUTOR_INVALIDATION_DATA_H
14#include "pxr/exec/vdf/api.h"
18PXR_NAMESPACE_OPEN_SCOPE
24class VdfExecutorInvalidationData
27 enum class _MaskState {
41 VdfExecutorInvalidationData(
const VdfExecutorInvalidationData &) =
delete;
42 VdfExecutorInvalidationData &operator=(
43 const VdfExecutorInvalidationData &) =
delete;
47 VdfExecutorInvalidationData() : _maskState(_MaskState::AllOnes) {}
51 ~VdfExecutorInvalidationData() {}
61 void Clone(VdfExecutorInvalidationData *dest)
const;
67 inline bool IsInvalid(
68 const VdfMask &invalidationMask,
69 const bool wasTouched)
const;
79 inline bool Invalidate(
80 const VdfMask &invalidationMask,
81 const bool wasTouched);
87 inline void _ApplyInvalidationMask(
const VdfMask &invalidationMask);
99 _MaskState _maskState;
106VdfExecutorInvalidationData::_ApplyInvalidationMask(
107 const VdfMask &invalidationMask)
112 _maskState = _MaskState::AllOnes;
119 if (_maskState == _MaskState::AllZeros ||
121 _mask = invalidationMask;
122 _maskState = _MaskState::Sparse;
128 _mask |= invalidationMask;
130 ? _MaskState::AllOnes
131 : _MaskState::Sparse;
137VdfExecutorInvalidationData::IsInvalid(
138 const VdfMask &invalidationMask,
139 const bool wasTouched)
const
148 if (_maskState == _MaskState::AllOnes ||
155 else if (_maskState == _MaskState::Sparse &&
166VdfExecutorInvalidationData::Invalidate(
167 const VdfMask &invalidationMask,
168 const bool wasTouched)
172 _maskState = _MaskState::AllZeros;
177 if (_maskState == _MaskState::AllOnes ||
184 else if (_maskState == _MaskState::Sparse &&
191 _ApplyInvalidationMask(invalidationMask);
197PXR_NAMESPACE_CLOSE_SCOPE
A VdfMask is placed on connections to specify the data flowing through them.
size_t GetSize() const
Returns the size of the mask.
bool IsAllZeros() const
Returns true if this mask has all entries unset.
bool IsAllOnes() const
Returns true if this mask has all entries set.
bool Contains(const VdfMask &mask) const
Returns true if mask is a subset-of or equal to this mask, false otherwise.
unsigned int VdfInvalidationTimestamp
Type of the timestamp that identifies the most recent round of invalidation.