Geometry Nodes: improve evaluator with lazy threading
In large node setup the threading overhead was sometimes very significant. That's especially true when most nodes do very little work. This commit improves the scheduling by not using multi-threading in many cases unless it's likely that it will be worth it. For more details see the comments in `BLI_lazy_threading.hh`. Differential Revision: https://developer.blender.org/D15976
This commit is contained in:
@@ -124,6 +124,11 @@ struct GeometryNodesLazyFunctionGraphInfo {
|
||||
* Mappings between the lazy-function graph and the #bNodeTree.
|
||||
*/
|
||||
GeometryNodeLazyFunctionGraphMapping mapping;
|
||||
/**
|
||||
* Approximate number of nodes in the graph if all sub-graphs were inlined.
|
||||
* This can be used as a simple heuristic for the complexity of the node group.
|
||||
*/
|
||||
int num_inline_nodes_approximate = 0;
|
||||
|
||||
GeometryNodesLazyFunctionGraphInfo();
|
||||
~GeometryNodesLazyFunctionGraphInfo();
|
||||
@@ -148,6 +153,9 @@ class GeometryNodesLazyFunctionLogger : public fn::lazy_function::GraphExecutor:
|
||||
void dump_when_input_is_set_twice(const lf::InputSocket &target_socket,
|
||||
const lf::OutputSocket &from_socket,
|
||||
const lf::Context &context) const override;
|
||||
void log_before_node_execute(const lf::FunctionNode &node,
|
||||
const lf::Params ¶ms,
|
||||
const lf::Context &context) const override;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user