71 bool addNode(
const std::string&
id,
const std::string&
operation);
73 bool removeNode(
const std::string&
id);
75 bool hasNode(
const std::string&
id)
const;
77 int getNodeCount()
const;
79 std::string getNodeId(
int index)
const;
81 std::string getNodeOperation(
const std::string&
id)
const;
84 bool connect(
const std::string& fromId,
const std::string& toId,
int inputIndex = 0);
86 bool disconnect(
const std::string& toId,
int inputIndex = 0);
88 std::string getInputNode(
const std::string&
nodeId,
int inputIndex)
const;
108 void clearBindings();
110 int getBindingCount()
const;
112 std::string getBindingName(
int index)
const;
114 std::string getBindingType(
const std::string&
name)
const;
124 bool setNodeBiomeRules(
const std::string&
id,
BiomeRules* rules);
126 bool setNodeShapeGrammar(
const std::string&
id,
ShapeGrammar* grammar);
128 bool setNodeFloat(
const std::string&
id,
const std::string&
key,
float value);
130 bool setNodeInt(
const std::string&
id,
const std::string&
key,
int value);
132 bool setNodeString(
const std::string&
id,
const std::string&
key,
const std::string&
value);
134 bool exposeParameter(
const std::string&
name,
const std::string&
nodeId,
135 const std::string&
key);
137 int getParameterCount()
const;
139 std::string getParameterName(
int index)
const;
141 std::string getParameterKind(
const std::string&
name)
const;
143 bool hasParameterOverride(
const std::string&
name)
const;
145 bool setParameterFloat(
const std::string&
name,
float value);
147 bool setParameterInt(
const std::string&
name,
int value);
149 bool setParameterString(
const std::string&
name,
const std::string&
value);
151 float getParameterFloat(
const std::string&
name,
float fallback)
const;
153 int getParameterInt(
const std::string&
name,
int fallback)
const;
155 std::string getParameterString(
const std::string&
name,
const std::string& fallback)
const;
157 bool clearParameterOverride(
const std::string&
name);
163 bool setNodeSubgraph(
const std::string&
id,
PointGraph*
graph,
const std::string& inputNode,
164 const std::string& outputNode);
181 PointSet* execute(
const std::string& outputId);
183 void setExecutionNodeBudget(
int nodes);
185 int getExecutionNodeBudget()
const;
187 void setMaxNodeOutputPoints(
int points);
189 int getMaxNodeOutputPoints()
const;
191 bool setComputePolicy(
const std::string& policy);
193 std::string getComputePolicy()
const;
195 void setComputeMinimumPoints(
int points);
197 int getComputeMinimumPoints()
const;
199 void requestCancel();
201 void resetCancellation();
203 bool wasCancelled()
const;
208 std::string getError()
const;
212 uint64_t getRevision()
const;
214 int getExecutionCount()
const;
216 int getCacheHitCount()
const;
223 int getCompiledSegmentCount()
const;
230 uint64_t getExecutionPlanBuildCount()
const;
233 int getMetricCount()
const;
235 std::string getMetricNodeId(
int index)
const;
237 int getMetricOutputCount(
int index)
const;
239 float getMetricMilliseconds(
int index)
const;
241 bool isMetricCacheHit(
int index)
const;
243 std::string getMetricBackend(
int index)
const;
245 std::string getComputeFallbackReason()
const;
247 uint64_t getComputeUploadCount()
const;
249 uint64_t getComputeDispatchCount()
const;
251 uint64_t getComputeReadbackCount()
const;
253 uint64_t getComputeBufferReuseCount()
const;
255 uint64_t getComputePeakBufferBytes()
const;
257 int getLastFusedTransformCount()
const;
259 float getMetricMinX(
int index)
const;
261 float getMetricMinY(
int index)
const;
263 float getMetricMinZ(
int index)
const;
265 float getMetricMaxX(
int index)
const;
267 float getMetricMaxY(
int index)
const;
269 float getMetricMaxZ(
int index)
const;
271 float getMetricAverageDensity(
int index)
const;
273 PointSet* getNodeOutput(
const std::string&
id)
const;
275 std::string debugReport()
const;
282 std::string serializeDefinition()
const;
284 bool deserializeDefinition(
const std::string&
definition);
289 static int getOperationCount();
291 static std::string getOperationId(
int index);
293 static int getOperationInputCount(
const std::string&
operation);
295 static int getOperationParamCount(
const std::string&
operation);
297 static std::string getOperationParamKey(
const std::string&
operation,
int index);
299 static std::string getOperationParamKind(
const std::string&
operation,
int index);
301 static std::string getOperationParamDefault(
const std::string&
operation,
int index);
308 std::unordered_map<std::string, float> floats;
309 std::unordered_map<std::string, int> ints;
310 std::unordered_map<std::string, std::string> strings;
312 bool hasPoints =
false;
313 std::shared_ptr<SpatialData>
spatial;
314 std::shared_ptr<BiomeRules> biomeRules;
315 std::shared_ptr<ShapeGrammar> shapeGrammar;
316 std::shared_ptr<PointGraph> subgraph;
317 std::string subgraphInput;
318 std::string subgraphOutput;
321 bool cacheValid =
false;
322 bool deferredTransformValid =
false;
325 struct GraphBinding {
326 std::shared_ptr<SpatialData>
spatial;
327 std::shared_ptr<PointSet>
points;
328 bool isSpatial =
false;
330 struct ParameterBinding {
335 struct ExecutionSegment {
336 std::vector<std::string>
nodes;
337 bool gpuTransformChain =
false;
339 struct ExecutionPlan {
340 std::vector<std::string> topologicalOrder;
341 std::vector<ExecutionSegment> segments;
342 std::unordered_map<std::string, std::size_t> segmentByOutput;
346 std::unordered_map<std::string, int>& states);
348 const std::string&
id, std::unordered_map<std::string, int>& states);
349 PointSet* materializeNodeOutput(
const std::string&
id)
const;
350 [[nodiscard]]
Result<void> validateNode(
const std::string&
id, std::unordered_map<std::string, int>& states)
const;
352 void invalidateFrom(
const std::string&
id);
353 void invalidateTopology(
const std::string& changedNode);
354 [[nodiscard]]
Result<void> compileExecutionPlan(
const std::string& outputId);
355 float floatValue(
const Node&
node,
const std::string&
key,
float fallback)
const;
356 int intValue(
const Node&
node,
const std::string&
key,
int fallback)
const;
357 std::string stringValue(
const Node&
node,
const std::string&
key,
358 const std::string& fallback = {})
const;
364 std::unordered_map<std::string, GraphBinding> bindings_;
365 std::vector<std::string> bindingOrder_;
366 std::unordered_map<std::string, Node> nodes_;
367 std::vector<std::string> nodeOrder_;
368 std::unordered_map<std::string, ParameterBinding> parameters_;
369 std::vector<std::string> parameterOrder_;
370 std::unordered_map<std::string, float> floatOverrides_;
371 std::unordered_map<std::string, int> intOverrides_;
372 std::unordered_map<std::string, std::string> stringOverrides_;
373 std::vector<PointGraphNodeMetric> metrics_;
375 int executionCount_ = 0;
376 int cacheHitCount_ = 0;
377 uint64_t revision_ = 0;
378 uint64_t executionPlanBuildCount_ = 0;
379 std::shared_ptr<const ExecutionPlan> executionPlan_;
380 std::unordered_map<std::string, std::shared_ptr<const ExecutionPlan>> executionPlans_;
381 std::vector<std::string> executionPlanRecency_;
382 int executionNodeBudget_ = 0;
383 int maxNodeOutputPoints_ = 0;
384 std::string computePolicy_ =
"auto";
385 int computeMinimumPoints_ = 1024;
386 std::string computeFallbackReason_;
387 std::shared_ptr<PointCompute> pointCompute_;
388 int evaluatedNodes_ = 0;
389 bool cancelRequested_ =
false;
390 bool lastCancelled_ =
false;