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())) {
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;
118 const bool is_preview_output = doutput == preview_output;
123 doutput, [&](
DNode node) {
124 return schedule_.contains(node) && !pixel_compile_unit_.contains(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()) {
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
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)
VectorSet< DNode > PixelCompileUnit
bool is_output_linked_to_node_conditioned(DOutputSocket output, FunctionRef< bool(DNode)> condition)
DOutputSocket get_output_linked_to_input(DInputSocket input)
VectorSet< DNode > Schedule
DOutputSocket find_preview_output_socket(const DNode &node)
InputDescriptor input_descriptor_from_input_socket(const bNodeSocket *socket)