Fullframe compositor: unify behavior of size inference with realtime-compositor

Make size inference consistent with the viewport compositor (from a user's perspective). This patch uses constat folding to create a constant output out of constant inputs. This is consistent with the results of the realtime compositor.

Nodes not included in this patch require further refactoring or discussion. They will be addressed in future patches.

Pull Request: https://projects.blender.org/blender/blender/pulls/114755
This commit is contained in:
Habib Gahbiche
2023-11-26 12:14:35 +01:00
committed by Habib Gahbiche
parent b0cb58ca0e
commit 9cc038f580
34 changed files with 48 additions and 0 deletions

View File

@@ -100,6 +100,7 @@ AntiAliasOperation::AntiAliasOperation()
this->add_output_socket(DataType::Value);
value_reader_ = nullptr;
flags_.complex = true;
flags_.can_be_constant = true;
}
void AntiAliasOperation::init_execution()

View File

@@ -12,6 +12,7 @@ BilateralBlurOperation::BilateralBlurOperation()
this->add_input_socket(DataType::Color);
this->add_output_socket(DataType::Color);
flags_.complex = true;
flags_.can_be_constant = true;
input_color_program_ = nullptr;
input_determinator_program_ = nullptr;

View File

@@ -16,6 +16,7 @@ BlurBaseOperation::BlurBaseOperation(DataType data_type)
this->add_input_socket(DataType::Value);
this->add_output_socket(data_type);
flags_.complex = true;
flags_.can_be_constant = true;
input_program_ = nullptr;
memset(&data_, 0, sizeof(NodeBlurData));
size_ = 1.0f;

View File

@@ -24,6 +24,7 @@ BokehBlurOperation::BokehBlurOperation()
flags_.complex = true;
flags_.open_cl = true;
flags_.can_be_constant = true;
size_ = 1.0f;
sizeavailable_ = false;

View File

@@ -17,6 +17,8 @@ ConvertDepthToRadiusOperation::ConvertDepthToRadiusOperation()
camera_object_ = nullptr;
max_radius_ = 32.0f;
blur_post_operation_ = nullptr;
flags_.can_be_constant = true;
}
float ConvertDepthToRadiusOperation::determine_focal_distance()

View File

@@ -584,6 +584,7 @@ SeparateChannelOperation::SeparateChannelOperation()
this->add_input_socket(DataType::Color);
this->add_output_socket(DataType::Value);
input_operation_ = nullptr;
flags_.can_be_constant = true;
}
void SeparateChannelOperation::init_execution()
{
@@ -628,6 +629,8 @@ CombineChannelsOperation::CombineChannelsOperation()
input_channel2_operation_ = nullptr;
input_channel3_operation_ = nullptr;
input_channel4_operation_ = nullptr;
flags_.can_be_constant = true;
}
void CombineChannelsOperation::init_execution()

View File

@@ -14,6 +14,7 @@ ConvolutionFilterOperation::ConvolutionFilterOperation()
this->set_canvas_input_index(0);
input_operation_ = nullptr;
flags_.complex = true;
flags_.can_be_constant = true;
}
void ConvolutionFilterOperation::init_execution()
{

View File

@@ -12,6 +12,7 @@ CropBaseOperation::CropBaseOperation()
this->add_output_socket(DataType::Color);
input_operation_ = nullptr;
settings_ = nullptr;
flags_.can_be_constant = true;
}
void CropBaseOperation::update_area()

View File

@@ -14,6 +14,7 @@ CryptomatteOperation::CryptomatteOperation(size_t num_inputs)
}
this->add_output_socket(DataType::Color);
flags_.complex = true;
flags_.can_be_constant = true;
}
void CryptomatteOperation::init_execution()

View File

@@ -16,6 +16,7 @@ DespeckleOperation::DespeckleOperation()
this->set_canvas_input_index(0);
input_operation_ = nullptr;
flags_.complex = true;
flags_.can_be_constant = true;
}
void DespeckleOperation::init_execution()
{

View File

@@ -12,6 +12,7 @@ DilateErodeThresholdOperation::DilateErodeThresholdOperation()
this->add_input_socket(DataType::Value);
this->add_output_socket(DataType::Value);
flags_.complex = true;
flags_.can_be_constant = true;
input_program_ = nullptr;
inset_ = 0.0f;
switch_ = 0.5f;
@@ -261,6 +262,7 @@ DilateDistanceOperation::DilateDistanceOperation()
distance_ = 0.0f;
flags_.complex = true;
flags_.open_cl = true;
flags_.can_be_constant = true;
}
void DilateDistanceOperation::init_data()

View File

@@ -13,6 +13,7 @@ DirectionalBlurOperation::DirectionalBlurOperation()
this->add_output_socket(DataType::Color);
flags_.complex = true;
flags_.open_cl = true;
flags_.can_be_constant = true;
input_program_ = nullptr;
}

View File

@@ -14,6 +14,7 @@ DisplaceOperation::DisplaceOperation()
this->add_input_socket(DataType::Value);
this->add_output_socket(DataType::Color);
flags_.complex = true;
flags_.can_be_constant = true;
input_color_program_ = nullptr;
}

View File

@@ -18,6 +18,8 @@ DisplaceSimpleOperation::DisplaceSimpleOperation()
input_vector_program_ = nullptr;
input_scale_xprogram_ = nullptr;
input_scale_yprogram_ = nullptr;
flags_.can_be_constant = true;
}
void DisplaceSimpleOperation::init_execution()

View File

@@ -1293,6 +1293,7 @@ DoubleEdgeMaskOperation::DoubleEdgeMaskOperation()
adjacent_only_ = false;
keep_inside_ = false;
flags_.complex = true;
flags_.can_be_constant = true;
is_output_rendered_ = false;
}

View File

@@ -12,6 +12,7 @@ GlareBaseOperation::GlareBaseOperation()
this->add_output_socket(DataType::Color);
settings_ = nullptr;
flags_.is_fullframe_operation = true;
flags_.can_be_constant = true;
is_output_rendered_ = false;
}
void GlareBaseOperation::init_execution()

View File

@@ -13,6 +13,8 @@ GlareThresholdOperation::GlareThresholdOperation()
this->add_input_socket(DataType::Color, ResizeMode::FitAny);
this->add_output_socket(DataType::Color);
input_program_ = nullptr;
flags_.can_be_constant = true;
}
void GlareThresholdOperation::determine_canvas(const rcti &preferred_area, rcti &r_area)

View File

@@ -15,6 +15,7 @@ KeyingBlurOperation::KeyingBlurOperation()
axis_ = BLUR_AXIS_X;
flags_.complex = true;
flags_.can_be_constant = true;
}
void *KeyingBlurOperation::initialize_tile_data(rcti *rect)

View File

@@ -20,6 +20,7 @@ KeyingClipOperation::KeyingClipOperation()
is_edge_matte_ = false;
flags_.complex = true;
flags_.can_be_constant = true;
}
void *KeyingClipOperation::initialize_tile_data(rcti *rect)

View File

@@ -34,6 +34,8 @@ KeyingOperation::KeyingOperation()
pixel_reader_ = nullptr;
screen_reader_ = nullptr;
flags_.can_be_constant = true;
}
void KeyingOperation::init_execution()

View File

@@ -20,6 +20,7 @@ KuwaharaAnisotropicOperation::KuwaharaAnisotropicOperation()
this->add_input_socket(DataType::Color);
this->add_output_socket(DataType::Color);
this->flags_.is_fullframe_operation = true;
this->flags_.can_be_constant = true;
}
void KuwaharaAnisotropicOperation::init_execution()

View File

@@ -16,6 +16,7 @@ KuwaharaAnisotropicStructureTensorOperation::KuwaharaAnisotropicStructureTensorO
this->add_input_socket(DataType::Color);
this->add_output_socket(DataType::Color);
this->flags_.is_fullframe_operation = true;
this->flags_.can_be_constant = true;
}
void KuwaharaAnisotropicStructureTensorOperation::init_execution()

View File

@@ -13,6 +13,7 @@ MapUVOperation::MapUVOperation()
this->add_output_socket(DataType::Color);
alpha_ = 0.0f;
flags_.complex = true;
flags_.can_be_constant = true;
set_canvas_input_index(UV_INPUT_INDEX);
inputUVProgram_ = nullptr;

View File

@@ -18,6 +18,8 @@ MovieDistortionOperation::MovieDistortionOperation(bool distortion)
input_operation_ = nullptr;
movie_clip_ = nullptr;
apply_ = distortion;
flags_.can_be_constant = true;
}
void MovieDistortionOperation::init_data()

View File

@@ -12,6 +12,8 @@ PixelateOperation::PixelateOperation(DataType data_type)
this->add_output_socket(data_type);
this->set_canvas_input_index(0);
input_operation_ = nullptr;
flags_.can_be_constant = true;
}
void PixelateOperation::init_execution()

View File

@@ -13,6 +13,7 @@ ProjectorLensDistortionOperation::ProjectorLensDistortionOperation()
this->add_input_socket(DataType::Value);
this->add_output_socket(DataType::Color);
flags_.complex = true;
flags_.can_be_constant = true;
input_program_ = nullptr;
dispersion_available_ = false;
dispersion_ = 0.0f;

View File

@@ -19,6 +19,7 @@ RotateOperation::RotateOperation()
do_degree2_rad_conversion_ = false;
is_degree_set_ = false;
sampler_ = PixelSampler::Bilinear;
flags_.can_be_constant = true;
}
void RotateOperation::get_rotation_center(const rcti &area, float &r_x, float &r_y)

View File

@@ -155,6 +155,7 @@ SMAAEdgeDetectionOperation::SMAAEdgeDetectionOperation()
this->add_input_socket(DataType::Value); /* Depth, material ID, etc. TODO: currently unused. */
this->add_output_socket(DataType::Color);
flags_.complex = true;
flags_.can_be_constant = true;
image_reader_ = nullptr;
value_reader_ = nullptr;
this->set_threshold(CMP_DEFAULT_SMAA_THRESHOLD);
@@ -385,6 +386,7 @@ SMAABlendingWeightCalculationOperation::SMAABlendingWeightCalculationOperation()
this->add_input_socket(DataType::Color); /* edges */
this->add_output_socket(DataType::Color);
flags_.complex = true;
flags_.can_be_constant = true;
image_reader_ = nullptr;
this->set_corner_rounding(CMP_DEFAULT_SMAA_CORNER_ROUNDING);
}
@@ -991,6 +993,7 @@ SMAANeighborhoodBlendingOperation::SMAANeighborhoodBlendingOperation()
this->add_input_socket(DataType::Color); /* blend */
this->add_output_socket(DataType::Color);
flags_.complex = true;
flags_.can_be_constant = true;
image1Reader_ = nullptr;
image2Reader_ = nullptr;
}

View File

@@ -40,6 +40,7 @@ ScaleOperation::ScaleOperation(DataType data_type) : BaseScaleOperation()
input_operation_ = nullptr;
input_xoperation_ = nullptr;
input_yoperation_ = nullptr;
flags_.can_be_constant = true;
}
float ScaleOperation::get_constant_scale(const int input_op_idx, const float factor)

View File

@@ -19,6 +19,7 @@ ScreenLensDistortionOperation::ScreenLensDistortionOperation()
this->add_input_socket(DataType::Value);
this->add_output_socket(DataType::Color);
flags_.complex = true;
flags_.can_be_constant = true;
input_program_ = nullptr;
distortion_ = 0.0f;
dispersion_ = 0.0f;

View File

@@ -24,6 +24,8 @@ TransformOperation::TransformOperation()
invert_ = false;
max_scale_canvas_size_ = {ScaleOperation::DEFAULT_MAX_SCALE_CANVAS_SIZE,
ScaleOperation::DEFAULT_MAX_SCALE_CANVAS_SIZE};
flags_.can_be_constant = true;
}
void TransformOperation::set_scale_canvas_max_size(Size2f size)

View File

@@ -22,6 +22,8 @@ TranslateOperation::TranslateOperation(DataType data_type, ResizeMode resize_mod
factor_y_ = 1.0f;
this->x_extend_mode_ = MemoryBufferExtend::Clip;
this->y_extend_mode_ = MemoryBufferExtend::Clip;
this->flags_.can_be_constant = true;
}
void TranslateOperation::init_execution()

View File

@@ -19,6 +19,7 @@ VariableSizeBokehBlurOperation::VariableSizeBokehBlurOperation()
this->add_output_socket(DataType::Color);
flags_.complex = true;
flags_.open_cl = true;
flags_.can_be_constant = true;
input_program_ = nullptr;
input_bokeh_program_ = nullptr;

View File

@@ -14,6 +14,8 @@ VectorCurveOperation::VectorCurveOperation()
this->add_output_socket(DataType::Vector);
input_program_ = nullptr;
this->flags_.can_be_constant = true;
}
void VectorCurveOperation::init_execution()
{