24using namespace nodes::derived_node_tree_types;
35 return node_operations_.add_new(node, operations);
40 return pixel_operations_.add_new(node, operations);
47 if (node_operations_.contains(output.node())) {
48 NodeOperation *operation = node_operations_.lookup(output.node());
49 return operation->
get_result(output->identifier);
55 PixelOperation *operation = pixel_operations_.lookup(output.node());
61 pixel_compile_unit_.
add_new(node);
66 pixel_compile_unit_domain_ = compute_pixel_node_domain(node);
72 return pixel_compile_unit_;
77 pixel_compile_unit_.
clear();
84 if (pixel_compile_unit_.
is_empty()) {
99 pixel_compile_unit_domain_ != compute_pixel_node_domain(node))
113 int outputs_count = 0;
114 for (
const bNodeSocket *output : node->output_sockets()) {
115 const DOutputSocket doutput{node.context(), output};
118 const bool is_preview_output = doutput == preview_output;
123 doutput, [&](DNode node) {
127 if (is_operation_output || is_preview_output) {
132 return outputs_count;
135Domain CompileState::compute_pixel_node_domain(
DNode node)
140 int current_domain_priority = std::numeric_limits<int>::max();
144 for (
const bNodeSocket *input : node->input_sockets()) {
158 if (pixel_compile_unit_.
contains(output.node())) {
160 if (pixel_compile_unit_domain_.
size ==
int2(1)) {
166 if (input_descriptor.domain_priority < current_domain_priority) {
167 node_domain = pixel_compile_unit_domain_;
168 current_domain_priority = input_descriptor.domain_priority;
176 if (result.is_single_value() || input_descriptor.expects_single_value) {
181 if (!input_descriptor.realization_options.realize_on_operation_domain) {
187 if (input_descriptor.domain_priority < current_domain_priority) {
188 node_domain = result.domain();
189 current_domain_priority = input_descriptor.domain_priority;
void add_new(const Key &key)
bool contains(const Key &key) const
const DTreeContext * context() const
void reset_pixel_compile_unit()
void map_node_to_node_operation(DNode node, NodeOperation *operation)
int compute_pixel_node_operation_outputs_count(DNode node)
CompileState(const Schedule &schedule)
void map_node_to_pixel_operation(DNode node, PixelOperation *operation)
const Schedule & get_schedule()
PixelCompileUnit & get_pixel_compile_unit()
void add_node_to_pixel_compile_unit(DNode node)
bool should_compile_pixel_compile_unit(DNode node)
Result & get_result_from_output_socket(DOutputSocket output)
Result & get_result(StringRef identifier)
StringRef get_output_identifier_from_output_socket(DOutputSocket output_socket)
bool is_pixel_node(DNode node)
bool is_output_linked_to_node_conditioned(DOutputSocket output, FunctionRef< bool(DNode)> condition)
DOutputSocket get_output_linked_to_input(DInputSocket input)
DOutputSocket find_preview_output_socket(const DNode &node)
InputDescriptor input_descriptor_from_input_socket(const bNodeSocket *socket)