Loading...
Searching...
No Matches
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
21PXR_NAMESPACE_OPEN_SCOPE
22
23class EfLeafNode;
24class EfTime;
25class Exec_Program;
27class Exec_RequestTracker;
28class Exec_Runtime;
29class ExecValueKey;
30class SdfPath;
31class TfToken;
32template <typename> class TfFunctionRef;
33template <typename> class TfSpan;
35class VdfMaskedOutput;
36class VdfRequest;
37class VdfSchedule;
38
47{
48public:
50 class Diagnostics;
51
52protected:
54 EXEC_API
55 explicit ExecSystem(EsfStage &&stage);
56
57 ExecSystem(const ExecSystem &) = delete;
58 ExecSystem& operator=(const ExecSystem &) = delete;
59
60 EXEC_API
62
69 EXEC_API
70 void _ChangeTime(const EfTime &time);
71
75 EXEC_API
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
102private:
103 // Requires access to _Compute, _Compile, and _HasPendingRecompilation.
104 friend class Exec_RequestImpl;
105
106 std::pair<std::vector<VdfMaskedOutput>, std::vector<const EfLeafNode*>>
107 _Compile(TfSpan<const ExecValueKey> valueKeys);
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
138private:
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
147PXR_NAMESPACE_CLOSE_SCOPE
148
149#endif
A terminal node, which is never executed.
Definition leafNode.h:38
A class that represents a point in time for execution.
Definition time.h:37
Holds an implementation of EsfStageInterface in a fixed-size buffer.
Definition stage.h:108
Contains data structures necessary to implement exec requests that are independent of scene descripti...
Definition requestImpl.h:48
Public API to deliver scene changes from ExecSystem derived classes.
Utility class with various diagnostic functions for ExecSystem.
Base implementation of a system to procedurally compute values based on scene description and computa...
Definition system.h:47
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 _ChangeTime(const EfTime &time)
Changes time on the system.
EXEC_API void _ParallelForEachRequest(TfFunctionRef< void(Exec_RequestImpl &)> f) const
Invoke f on each outstanding exec request.
EXEC_API ExecSystem(EsfStage &&stage)
Construct an exec system for computing values on stage.
EXEC_API void _Compute(const VdfSchedule &schedule, const VdfRequest &computeRequest)
Computes the values in the computeRequest using the provided schedule.
Specifies a computed value.
Definition valueKey.h:29
A path value used to locate objects in layers or scenegraphs.
Definition path.h:281
This class provides a non-owning reference to a type-erased callable object with a specified signatur...
Definition functionRef.h:19
Represents a range of contiguous elements.
Definition span.h:71
Token for efficient comparison, assignment, and hashing of known strings.
Definition token.h:81
Abstract base class for classes that execute a VdfNetwork to compute a requested set of values.
Class to hold on to an externally owned output and a mask.
Contains a specification of how to execute a particular VdfNetwork.
Definition schedule.h:41