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 EfTime;
24class Exec_Program;
26class Exec_RequestTracker;
27class Exec_Runtime;
28class ExecValueKey;
29class SdfPath;
30class TfToken;
31template <typename> class TfFunctionRef;
32template <typename> class TfSpan;
34class VdfMaskedOutput;
35class VdfRequest;
36class VdfSchedule;
37
46{
47public:
49 class Diagnostics;
50
51protected:
53 EXEC_API
54 explicit ExecSystem(EsfStage &&stage);
55
56 ExecSystem(const ExecSystem &) = delete;
57 ExecSystem& operator=(const ExecSystem &) = delete;
58
59 EXEC_API
61
68 EXEC_API
69 void _ChangeTime(const EfTime &time);
70
74 EXEC_API
76 const VdfSchedule &schedule,
77 const VdfRequest &computeRequest);
78
82 EXEC_API
83 std::unique_ptr<VdfExecutorInterface> _ComputeWithOverrides(
84 const VdfSchedule &schedule,
85 const VdfRequest &computeRequest,
86 ExecValueOverrideVector &&valueOverrides);
87
94 EXEC_API
96 TfFunctionRef<void(Exec_RequestImpl&)> f) const;
97
99 class _ChangeProcessor;
100
101private:
102 // Requires access to _Compute, _Compile, and _HasPendingRecompilation.
103 friend class Exec_RequestImpl;
104 std::vector<VdfMaskedOutput> _Compile(TfSpan<const ExecValueKey> valueKeys);
105
106 // Returns true if the program has inputs requiring recompilation.
107 EXEC_API
108 bool _HasPendingRecompilation() const;
109
110 // Discards all internal state, and constructs new internal data structures
111 // leaving the system in the same state as if it was newly constructed.
112 //
113 EXEC_API
114 void _InvalidateAll();
115
116 // Notifies the system of invalidation due to uncompilation.
117 EXEC_API
118 void _InvalidateDisconnectedInputs();
119
120 // Notifies the system of attribute value invalidation.
121 EXEC_API
122 void _InvalidateAttributeValues(TfSpan<const SdfPath> invalidAttributes);
123
124 // Notifies the system of metadata value invalidation.
125 EXEC_API
126 void _InvalidateMetadataValues(
127 TfSpan<const std::pair<SdfPath, TfToken>> invalidObjects);
128
129 // Notifies the system to invalidate value keys that don't have a compiled
130 // leaf node.
131 //
132 EXEC_API
133 void _InvalidateUnknownValues();
134
135private:
136 EsfStage _stage;
137
138 std::unique_ptr<Exec_Program> _program;
139 std::unique_ptr<Exec_Runtime> _runtime;
140
141 std::unique_ptr<Exec_RequestTracker> _requestTracker;
142};
143
144PXR_NAMESPACE_CLOSE_SCOPE
145
146#endif
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:47
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: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 _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:71
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.
Definition: maskedOutput.h:32
Contains a specification of how to execute a particular VdfNetwork.
Definition: schedule.h:41