system.h
1 //
2 // Copyright 2025 Pixar
3 //
4 // Licensed under the terms set forth in the LICENSE.txt file available at
5 // https://openusd.org/license.
6 //
7 #ifndef PXR_EXEC_EXEC_SYSTEM_H
8 #define PXR_EXEC_EXEC_SYSTEM_H
9 
10 #include "pxr/pxr.h"
11 
12 #include "pxr/exec/exec/api.h"
14 
15 #include "pxr/exec/esf/stage.h"
16 
17 #include <memory>
18 #include <utility>
19 #include <vector>
20 
21 PXR_NAMESPACE_OPEN_SCOPE
22 
23 class EfLeafNode;
24 class EfTime;
25 class Exec_Program;
26 class Exec_RequestImpl;
27 class Exec_RequestTracker;
28 class Exec_Runtime;
29 class ExecValueKey;
30 class SdfPath;
31 class TfToken;
32 template <typename> class TfFunctionRef;
33 template <typename> class TfSpan;
35 class VdfMaskedOutput;
36 class VdfRequest;
37 class VdfSchedule;
38 
47 {
48 public:
50  class Diagnostics;
51 
52 protected:
54  EXEC_API
55  explicit ExecSystem(EsfStage &&stage);
56 
57  ExecSystem(const ExecSystem &) = delete;
58  ExecSystem& operator=(const ExecSystem &) = delete;
59 
60  EXEC_API
61  ~ExecSystem();
62 
69  EXEC_API
70  void _ChangeTime(const EfTime &time);
71 
75  EXEC_API
76  void _Compute(
77  const VdfSchedule &schedule,
78  const VdfRequest &computeRequest);
79 
83  EXEC_API
84  std::unique_ptr<VdfExecutorInterface> _ComputeWithOverrides(
85  const VdfSchedule &schedule,
86  const VdfRequest &computeRequest,
87  ExecValueOverrideVector &&valueOverrides);
88 
95  EXEC_API
97  TfFunctionRef<void(Exec_RequestImpl&)> f) const;
98 
100  class _ChangeProcessor;
101 
102 private:
103  // Requires access to _Compute, _Compile, and _HasPendingRecompilation.
104  friend class Exec_RequestImpl;
105 
106  std::pair<std::vector<VdfMaskedOutput>, std::vector<const EfLeafNode*>>
108 
109  // Returns true if the program has inputs requiring recompilation.
110  EXEC_API
111  bool _HasPendingRecompilation() const;
112 
113  // Discards all internal state, and constructs new internal data structures
114  // leaving the system in the same state as if it was newly constructed.
115  //
116  EXEC_API
117  void _InvalidateAll();
118 
119  // Notifies the system of invalidation due to uncompilation.
120  EXEC_API
121  void _InvalidateDisconnectedInputs();
122 
123  // Notifies the system of attribute value invalidation.
124  EXEC_API
125  void _InvalidateAttributeValues(TfSpan<const SdfPath> invalidAttributes);
126 
127  // Notifies the system of metadata value invalidation.
128  EXEC_API
129  void _InvalidateMetadataValues(
130  TfSpan<const std::pair<SdfPath, TfToken>> invalidObjects);
131 
132  // Notifies the system to invalidate value keys that don't have a compiled
133  // leaf node.
134  //
135  EXEC_API
136  void _InvalidateUnknownValues();
137 
138 private:
139  EsfStage _stage;
140 
141  std::unique_ptr<Exec_Program> _program;
142  std::unique_ptr<Exec_Runtime> _runtime;
143 
144  std::unique_ptr<Exec_RequestTracker> _requestTracker;
145 };
146 
147 PXR_NAMESPACE_CLOSE_SCOPE
148 
149 #endif
Holds an implementation of EsfStageInterface in a fixed-size buffer.
Definition: stage.h:107
EXEC_API ExecSystem(EsfStage &&stage)
Construct an exec system for computing values on stage.
Base implementation of a system to procedurally compute values based on scene description and computa...
Definition: system.h:46
EXEC_API std::unique_ptr< VdfExecutorInterface > _ComputeWithOverrides(const VdfSchedule &schedule, const VdfRequest &computeRequest, ExecValueOverrideVector &&valueOverrides)
Computes the values in the computeRequest using the provided schedule in the presence of valueOverrid...
EXEC_API void _Compute(const VdfSchedule &schedule, const VdfRequest &computeRequest)
Computes the values in the computeRequest using the provided schedule.
Public API to deliver scene changes from ExecSystem derived classes.
A terminal node, which is never executed.
Definition: leafNode.h:37
This class provides a non-owning reference to a type-erased callable object with a specified signatur...
Definition: functionRef.h:19
A class that represents a point in time for execution.
Definition: time.h:36
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:80
Contains a specification of how to execute a particular VdfNetwork.
Definition: schedule.h:40
Represents a range of contiguous elements.
Definition: span.h:70
Utility class with various diagnostic functions for ExecSystem.
Specifies a computed value.
Definition: valueKey.h:28
Contains data structures necessary to implement exec requests that are independent of scene descripti...
Definition: requestImpl.h:47
A path value used to locate objects in layers or scenegraphs.
Definition: path.h:280
Class to hold on to an externally owned output and a mask.
Definition: maskedOutput.h:31
EXEC_API void _ParallelForEachRequest(TfFunctionRef< void(Exec_RequestImpl &)> f) const
Invoke f on each outstanding exec request.
EXEC_API void _Compile(TfSpan< const ExecValueKey > valueKeys)
Compiles outputs for the value keys in the request.
EXEC_API void _ChangeTime(const EfTime &time)
Changes time on the system.
Abstract base class for classes that execute a VdfNetwork to compute a requested set of values.