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 ||
120 _mask.GetSize() != invalidationMask.
GetSize()) {
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 &&
156 _mask.GetSize() == invalidationMask.
GetSize() &&
157 _mask.Contains(invalidationMask)) {
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 &&
185 _mask.GetSize() == invalidationMask.
GetSize() &&
186 _mask.Contains(invalidationMask)) {
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.
unsigned int VdfInvalidationTimestamp
Type of the timestamp that identifies the most recent round of invalidation.