7 #ifndef PXR_EXEC_VDF_SMBL_DATA_H
8 #define PXR_EXEC_VDF_SMBL_DATA_H
59 const VdfMask &invalidationMask);
68 *lockedCacheMask = _cachedExtend(*lockedCacheMask, cacheMask);
90 return !_cachedAffective(lockedCacheMask, affectsMask);
144 return _cache && !_cacheMask.
IsEmpty();
158 template <
typename R,
typename OP >
159 class _MaskOpMemoizer
164 _result(OP()(_opA, _opB))
170 if (_opA != opA || _opB != opB) {
173 _result = OP()(opA, opB);
193 struct _MaskSubtract {
200 struct _MaskSetOrAppend {
203 res.SetOrAppend(rhs);
209 struct _MaskContains {
216 _MaskOpMemoizer<VdfMask, _MaskSubtract> _cachedInvalidate;
219 _MaskOpMemoizer<VdfMask, _MaskSetOrAppend> _cachedExtend;
222 _MaskOpMemoizer<bool, _MaskContains> _cachedAffective;
226 _MaskOpMemoizer<VdfMask, _MaskSubtract> _cachedRequiredMask;
230 _MaskOpMemoizer<VdfMask, _MaskSubtract> _cachedRequiredLockedCache;
242 const VdfMask &invalidationMask)
246 : _cachedInvalidate(cacheMask, invalidationMask);
261 : _cachedRequiredMask(keepMask, cacheMask);
264 *lockedCacheMask = _cachedRequiredLockedCache(*lockedCacheMask, uncached);
284 _cacheMask = cacheMask;
VdfVector * GetCache() const
bool ComputeAffectiveness(const VdfMask &lockedCacheMask, const VdfMask &affectsMask)
VDF_API VdfVector * AllocateCache() const
Allocate a new VdfVector with this spec's type.
VdfMask InvalidateCacheMask(const VdfMask &cacheMask, const VdfMask &invalidationMask)
VdfSMBLData & operator=(const VdfSMBLData &)=delete
#define PXR_NAMESPACE_OPEN_SCOPE
A VdfMask is placed on connections to specify the data flowing through them.
VdfSMBLData holds per-output data that is meant to be consumed by the executor. This data is an optio...
VdfVector * Retain(const VdfOutputSpec &spec, VdfVector *cache, const VdfMask &cacheMask)
bool Contains(const VdfMask &mask) const
void ExtendLockedCacheMask(VdfMask *lockedCacheMask, const VdfMask &cacheMask)
const VdfMask & GetCacheMask() const
#define PXR_NAMESPACE_CLOSE_SCOPE
typename std::conditional_t< std::is_pointer_v< T >||Vdf_AndTypeIsSmall< T, std::is_arithmetic_v< T >>||Vdf_AndTypeIsSmall< T, std::is_enum_v< T >>, T, const T & > VdfByValueOrConstRef
void RemoveUncachedMask(VdfMask *lockedCacheMask, const VdfMask &cacheMask, const VdfMask &keepMask)