Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
sample_region_proof.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <cstdint>
7#include <string>
8#include <string_view>
9#include <vector>
10
11namespace pulp::host {
12
13using SampleRegionId = std::uint32_t;
14
23
34
41
42using SampleRegionKernelResolveFn = const SampleKernelDescriptor* (*)(const void* context,
43 std::string_view type_id,
44 int version) noexcept;
45
47 const void* context = nullptr;
49
50 // Returned descriptors must remain stable for the duration of a proof or
51 // plan build. A SignalGraph registry satisfies that contract while its
52 // authoring state is held stable by the caller.
53 const SampleKernelDescriptor* find(std::string_view type_id, int version) const noexcept {
54 return resolve == nullptr ? nullptr : resolve(context, type_id, version);
55 }
56};
57
59 std::uint32_t max_member_nodes = 64;
60 std::uint32_t max_internal_connections = 125;
61 std::uint32_t max_input_boundaries = 8;
62 std::uint32_t max_output_boundaries = 8;
63 std::uint32_t max_delay_nodes = 32;
64 std::uint32_t max_promoted_parameters = 16;
65 std::uint32_t max_state_bytes = 128;
66 std::uint64_t max_logical_boundary_bytes = 1'048'576;
67 std::uint32_t max_work_per_frame = 191;
68 std::uint64_t max_work_per_block = 3'129'344;
69
70 static constexpr SampleRegionLimits v1() noexcept {
71 return {};
72 }
73};
74
78 std::vector<SampleRegionKernelNode> members;
79 // Includes internal edges and the legal outside-to-input/output-to-outside
80 // crossings for this region. Connections with neither endpoint in members
81 // are invalid input to the proof.
82 std::vector<SampleRegionConnection> connections;
83 std::vector<state::ParamID> promoted_parameters;
85 std::uint32_t max_block_size = 0;
86};
87
89 std::uint32_t member_nodes = 0;
90 std::uint32_t internal_connections = 0;
91 std::uint32_t input_boundaries = 0;
92 std::uint32_t output_boundaries = 0;
93 std::uint32_t delay_nodes = 0;
94 std::uint32_t promoted_parameters = 0;
95 std::uint64_t state_bytes = 0;
96 std::uint32_t state_alignment = 1;
97 std::uint64_t logical_boundary_bytes = 0;
98 std::uint64_t work_per_frame = 0;
99 std::uint64_t work_per_block = 0;
100};
101
133
146
156
157// Hostile-input ceilings are checked before a format parser allocates or walks
158// record arrays. `available_bytes` is the bounded payload remaining after the
159// fixed header; `declared_bytes` is the checked size implied by its counts.
161 std::uint64_t regions = 0;
162 std::uint64_t members_per_region = 0;
163 std::uint64_t members_total = 0;
164 std::uint64_t connections_per_region = 0;
165 std::uint64_t connections_total = 0;
168 std::uint64_t input_boundaries_total = 0;
169 std::uint64_t output_boundaries_total = 0;
170 std::uint64_t delays_per_region = 0;
171 std::uint64_t delays_total = 0;
172 std::uint64_t parameters_per_region = 0;
173 std::uint64_t parameters_total = 0;
174 std::uint64_t kernel_state_bytes = 0;
175 std::uint64_t kernel_state_alignment = 0;
176 std::uint64_t state_bytes_per_region = 0;
177 std::uint64_t state_bytes_total = 0;
180 std::uint64_t work_per_frame_per_region = 0;
181 std::uint64_t work_per_frame_total = 0;
182 std::uint64_t work_per_block_per_region = 0;
183 std::uint64_t work_per_block_total = 0;
184 std::uint64_t declared_bytes = 0;
185 std::uint64_t available_bytes = 0;
187};
188
195
198 const SampleKernelDescriptor& descriptor) noexcept;
200SampleRegionGraphProof prove_sample_regions(const std::vector<SampleRegionCandidate>& candidates);
202
203} // namespace pulp::host
std::uint32_t NodeId
Definition graph_types.hpp:7
std::uint32_t PortIndex
Definition graph_types.hpp:8
Bounded event contracts shared by host ingress and graph-authored nodes.
Definition anticipation_eligibility.hpp:9
bool is_sample_region_v1_descriptor(const SampleKernelDescriptor &descriptor) noexcept
SampleRegionConnectionLane
Definition sample_region_proof.hpp:15
@ Midi
Definition sample_region_proof.hpp:17
@ Event
Definition sample_region_proof.hpp:18
@ AudioRateModulation
Definition sample_region_proof.hpp:20
@ Automation
Definition sample_region_proof.hpp:19
@ PlainAudio
Definition sample_region_proof.hpp:16
@ None
Definition anticipation_eligibility.hpp:22
@ Sidechain
Definition anticipation_eligibility.hpp:28
@ StateBudgetExceeded
Definition bounded_delay_descriptor.hpp:34
@ ArithmeticOverflow
Definition bounded_delay_descriptor.hpp:35
bool sample_region_config_matches(const SampleKernelConfig &config, const SampleKernelDescriptor &descriptor) noexcept
SampleRegionProof prove_sample_region(const SampleRegionCandidate &candidate)
SampleRegionParserProof prove_sample_region_parser_shape(const SampleRegionParserShape &shape)
@ ParameterContractMismatch
Definition baked_graph_processor.hpp:84
SampleRegionRefusalReason
Definition sample_region_proof.hpp:102
@ BoundaryBufferBudgetExceeded
Definition sample_region_proof.hpp:128
@ MemberInMultipleRegions
Definition sample_region_proof.hpp:106
@ WorkBudgetExceeded
Definition sample_region_proof.hpp:129
@ InvalidProducerCardinality
Definition sample_region_proof.hpp:109
@ InstantaneousCycle
Definition sample_region_proof.hpp:118
@ DisconnectedMember
Definition sample_region_proof.hpp:110
@ InvalidBoundary
Definition sample_region_proof.hpp:107
@ DelayStateLimitExceeded
Definition sample_region_proof.hpp:125
@ UnsupportedNodeKind
Definition sample_region_proof.hpp:112
@ LegacyFeedbackInRegion
Definition sample_region_proof.hpp:116
@ InvalidBoundaryCrossing
Definition sample_region_proof.hpp:108
@ NonZeroCompensatableLatency
Definition sample_region_proof.hpp:119
@ ConnectionLimitExceeded
Definition sample_region_proof.hpp:124
@ UnresolvedSampleKernel
Definition sample_region_proof.hpp:114
@ PrepareFailed
Definition sample_region_proof.hpp:131
@ SampleKernelOutsideRegion
Definition sample_region_proof.hpp:113
@ CycleCrossesRegionBoundary
Definition sample_region_proof.hpp:117
@ InvalidKernelConfig
Definition sample_region_proof.hpp:111
@ UnsupportedConnectionLane
Definition sample_region_proof.hpp:115
@ RegionLimitExceeded
Definition sample_region_proof.hpp:122
@ UnknownMember
Definition sample_region_proof.hpp:105
@ UnknownRegion
Definition sample_region_proof.hpp:104
@ DuplicatePromotedParameter
Definition sample_region_proof.hpp:120
@ ParameterLimitExceeded
Definition sample_region_proof.hpp:126
@ NodeLimitExceeded
Definition sample_region_proof.hpp:123
SampleRegionGraphProof prove_sample_regions(const std::vector< SampleRegionCandidate > &candidates)
const SampleKernelDescriptor *(*)(const void *context, std::string_view type_id, int version) noexcept SampleRegionKernelResolveFn
Definition sample_region_proof.hpp:42
std::uint32_t SampleRegionId
Definition sample_region_proof.hpp:13
Definition custom_node_type.hpp:332
Definition custom_node_type.hpp:386
Definition sample_region_proof.hpp:75
std::vector< SampleRegionConnection > connections
Definition sample_region_proof.hpp:82
std::uint32_t max_block_size
Definition sample_region_proof.hpp:85
SampleRegionId region_id
Definition sample_region_proof.hpp:76
SampleRegionLimits limits
Definition sample_region_proof.hpp:84
std::vector< state::ParamID > promoted_parameters
Definition sample_region_proof.hpp:83
std::vector< SampleRegionKernelNode > members
Definition sample_region_proof.hpp:78
SampleRegionKernelRegistryView registry
Definition sample_region_proof.hpp:77
Definition sample_region_proof.hpp:24
PortIndex source_port
Definition sample_region_proof.hpp:26
bool legacy_feedback
Definition sample_region_proof.hpp:30
PortIndex destination_port
Definition sample_region_proof.hpp:28
NodeId destination
Definition sample_region_proof.hpp:27
SampleRegionConnectionLane lane
Definition sample_region_proof.hpp:29
friend bool operator==(const SampleRegionConnection &, const SampleRegionConnection &)=default
NodeId source
Definition sample_region_proof.hpp:25
Definition sample_region_proof.hpp:147
SampleRegionId offending_region
Definition sample_region_proof.hpp:150
SampleRegionProof region_proof
Definition sample_region_proof.hpp:151
std::uint64_t actual
Definition sample_region_proof.hpp:153
bool accepted
Definition sample_region_proof.hpp:148
std::uint64_t limit
Definition sample_region_proof.hpp:154
SampleRegionResourceStats totals
Definition sample_region_proof.hpp:152
SampleRegionRefusalReason reason
Definition sample_region_proof.hpp:149
Definition sample_region_proof.hpp:35
SampleKernelConfig config
Definition sample_region_proof.hpp:39
NodeId node
Definition sample_region_proof.hpp:36
std::string type_id
Definition sample_region_proof.hpp:37
int version
Definition sample_region_proof.hpp:38
Definition sample_region_proof.hpp:46
const SampleKernelDescriptor * find(std::string_view type_id, int version) const noexcept
Definition sample_region_proof.hpp:53
const void * context
Definition sample_region_proof.hpp:47
SampleRegionKernelResolveFn resolve
Definition sample_region_proof.hpp:48
Definition sample_region_proof.hpp:58
static constexpr SampleRegionLimits v1() noexcept
Definition sample_region_proof.hpp:70
std::uint32_t max_internal_connections
Definition sample_region_proof.hpp:60
std::uint32_t max_work_per_frame
Definition sample_region_proof.hpp:67
std::uint32_t max_promoted_parameters
Definition sample_region_proof.hpp:64
std::uint32_t max_input_boundaries
Definition sample_region_proof.hpp:61
std::uint64_t max_logical_boundary_bytes
Definition sample_region_proof.hpp:66
std::uint32_t max_state_bytes
Definition sample_region_proof.hpp:65
std::uint32_t max_member_nodes
Definition sample_region_proof.hpp:59
std::uint32_t max_delay_nodes
Definition sample_region_proof.hpp:63
std::uint64_t max_work_per_block
Definition sample_region_proof.hpp:68
std::uint32_t max_output_boundaries
Definition sample_region_proof.hpp:62
Definition sample_region_proof.hpp:189
SampleRegionRefusalReason reason
Definition sample_region_proof.hpp:191
std::uint64_t limit
Definition sample_region_proof.hpp:193
bool accepted
Definition sample_region_proof.hpp:190
std::uint64_t actual
Definition sample_region_proof.hpp:192
Definition sample_region_proof.hpp:160
std::uint64_t delays_per_region
Definition sample_region_proof.hpp:170
std::uint64_t logical_boundary_bytes_total
Definition sample_region_proof.hpp:179
std::uint64_t kernel_state_alignment
Definition sample_region_proof.hpp:175
std::uint64_t work_per_frame_per_region
Definition sample_region_proof.hpp:180
std::uint64_t work_per_frame_total
Definition sample_region_proof.hpp:181
std::uint64_t input_boundaries_per_region
Definition sample_region_proof.hpp:166
std::uint64_t connections_per_region
Definition sample_region_proof.hpp:164
std::uint64_t parameters_total
Definition sample_region_proof.hpp:173
std::uint64_t state_bytes_per_region
Definition sample_region_proof.hpp:176
std::uint64_t delays_total
Definition sample_region_proof.hpp:171
std::uint64_t parameters_per_region
Definition sample_region_proof.hpp:172
std::uint64_t state_bytes_total
Definition sample_region_proof.hpp:177
std::uint64_t connections_total
Definition sample_region_proof.hpp:165
std::uint64_t work_per_block_per_region
Definition sample_region_proof.hpp:182
std::uint64_t input_boundaries_total
Definition sample_region_proof.hpp:168
bool arithmetic_overflow
Definition sample_region_proof.hpp:186
std::uint64_t logical_boundary_bytes_per_region
Definition sample_region_proof.hpp:178
std::uint64_t declared_bytes
Definition sample_region_proof.hpp:184
std::uint64_t available_bytes
Definition sample_region_proof.hpp:185
std::uint64_t output_boundaries_per_region
Definition sample_region_proof.hpp:167
std::uint64_t output_boundaries_total
Definition sample_region_proof.hpp:169
std::uint64_t members_total
Definition sample_region_proof.hpp:163
std::uint64_t kernel_state_bytes
Definition sample_region_proof.hpp:174
std::uint64_t regions
Definition sample_region_proof.hpp:161
std::uint64_t members_per_region
Definition sample_region_proof.hpp:162
std::uint64_t work_per_block_total
Definition sample_region_proof.hpp:183
Definition sample_region_proof.hpp:134
SampleRegionResourceStats resources
Definition sample_region_proof.hpp:143
bool accepted
Definition sample_region_proof.hpp:135
std::uint64_t limit
Definition sample_region_proof.hpp:142
bool has_offending_connection
Definition sample_region_proof.hpp:140
SampleRegionId region_id
Definition sample_region_proof.hpp:137
NodeId offending_node
Definition sample_region_proof.hpp:138
SampleRegionRefusalReason reason
Definition sample_region_proof.hpp:136
std::uint64_t actual
Definition sample_region_proof.hpp:141
SampleRegionConnection offending_connection
Definition sample_region_proof.hpp:139
std::string message
Definition sample_region_proof.hpp:144
Definition sample_region_proof.hpp:88
std::uint32_t delay_nodes
Definition sample_region_proof.hpp:93
std::uint32_t output_boundaries
Definition sample_region_proof.hpp:92
std::uint32_t input_boundaries
Definition sample_region_proof.hpp:91
std::uint64_t logical_boundary_bytes
Definition sample_region_proof.hpp:97
std::uint32_t promoted_parameters
Definition sample_region_proof.hpp:94
std::uint32_t member_nodes
Definition sample_region_proof.hpp:89
std::uint64_t work_per_block
Definition sample_region_proof.hpp:99
std::uint32_t state_alignment
Definition sample_region_proof.hpp:96
std::uint64_t state_bytes
Definition sample_region_proof.hpp:95
std::uint32_t internal_connections
Definition sample_region_proof.hpp:90
std::uint64_t work_per_frame
Definition sample_region_proof.hpp:98