Fullframe compositor: unify size inference with GPU compositor part 2 #115733
|
@ -14,6 +14,7 @@ FlipOperation::FlipOperation()
|
|||
input_operation_ = nullptr;
|
||||
flip_x_ = true;
|
||||
flip_y_ = false;
|
||||
flags_.can_be_constant = true;
|
||||
}
|
||||
void FlipOperation::init_execution()
|
||||
{
|
||||
|
@ -110,6 +111,10 @@ void FlipOperation::update_memory_buffer_partial(MemoryBuffer *output,
|
|||
Span<MemoryBuffer *> inputs)
|
||||
{
|
||||
const MemoryBuffer *input_img = inputs[0];
|
||||
if (input_img->is_a_single_elem()) {
|
||||
copy_v4_v4(output->get_elem(0, 0), input_img->get_elem(0, 0));
|
||||
return;
|
||||
}
|
||||
const int input_offset_x = input_img->get_rect().xmin;
|
||||
const int input_offset_y = input_img->get_rect().ymin;
|
||||
for (BuffersIterator<float> it = output->iterate_with({}, area); !it.is_end(); ++it) {
|
||||
|
|
|
@ -22,6 +22,7 @@ InpaintSimpleOperation::InpaintSimpleOperation()
|
|||
cached_buffer_ = nullptr;
|
||||
cached_buffer_ready_ = false;
|
||||
flags_.is_fullframe_operation = true;
|
||||
flags_.can_be_constant = true;
|
||||
}
|
||||
void InpaintSimpleOperation::init_execution()
|
||||
{
|
||||
|
@ -282,15 +283,14 @@ void InpaintSimpleOperation::update_memory_buffer(MemoryBuffer *output,
|
|||
{
|
||||
/* TODO(manzanilla): once tiled implementation is removed, run multi-threaded where possible. */
|
||||
MemoryBuffer *input = inputs[0];
|
||||
|
||||
if (input->is_a_single_elem()) {
|
||||
copy_v4_v4(output->get_elem(0, 0), input->get_elem(0, 0));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!cached_buffer_ready_) {
|
||||
if (input->is_a_single_elem()) {
|
||||
MemoryBuffer *tmp = input->inflate();
|
||||
cached_buffer_ = tmp->release_ownership_buffer();
|
||||
delete tmp;
|
||||
}
|
||||
else {
|
||||
cached_buffer_ = (float *)MEM_dupallocN(input->get_buffer());
|
||||
}
|
||||
cached_buffer_ = (float *)MEM_dupallocN(input->get_buffer());
|
||||
|
||||
this->calc_manhattan_distance();
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ KuwaharaClassicOperation::KuwaharaClassicOperation()
|
|||
this->add_output_socket(DataType::Color);
|
||||
|
||||
this->flags_.is_fullframe_operation = true;
|
||||
this->flags_.can_be_constant = true;
|
||||
}
|
||||
|
||||
void KuwaharaClassicOperation::init_execution()
|
||||
|
@ -152,6 +153,10 @@ void KuwaharaClassicOperation::update_memory_buffer_partial(MemoryBuffer *output
|
|||
Span<MemoryBuffer *> inputs)
|
||||
{
|
||||
MemoryBuffer *image = inputs[0];
|
||||
if (image->is_a_single_elem()) {
|
||||
copy_v4_v4(output->get_elem(0, 0), image->get_elem(0, 0));
|
||||
return;
|
||||
}
|
||||
MemoryBuffer *size_image = inputs[1];
|
||||
MemoryBuffer *sat = inputs[2];
|
||||
MemoryBuffer *sat_squared = inputs[3];
|
||||
|
|
|
@ -486,6 +486,10 @@ void ScreenLensDistortionOperation::update_memory_buffer_partial(MemoryBuffer *o
|
|||
Span<MemoryBuffer *> inputs)
|
||||
{
|
||||
const MemoryBuffer *input_image = inputs[0];
|
||||
if (input_image->is_a_single_elem()) {
|
||||
copy_v4_v4(output->get_elem(0, 0), input_image->get_elem(0, 0));
|
||||
return;
|
||||
}
|
||||
for (BuffersIterator<float> it = output->iterate_with({}, area); !it.is_end(); ++it) {
|
||||
float xy[2] = {float(it.x), float(it.y)};
|
||||
float uv[2];
|
||||
|
|
|
@ -18,6 +18,7 @@ SummedAreaTableOperation::SummedAreaTableOperation()
|
|||
mode_ = eMode::Identity;
|
||||
|
||||
this->flags_.is_fullframe_operation = true;
|
||||
this->flags_.can_be_constant = true;
|
||||
}
|
||||
|
||||
void SummedAreaTableOperation::init_execution()
|
||||
|
|
|
@ -18,6 +18,7 @@ TonemapOperation::TonemapOperation()
|
|||
data_ = nullptr;
|
||||
cached_instance_ = nullptr;
|
||||
flags_.complex = true;
|
||||
flags_.can_be_constant = true;
|
||||
}
|
||||
void TonemapOperation::init_execution()
|
||||
{
|
||||
|
@ -171,10 +172,16 @@ static Luminance calc_area_luminance(const MemoryBuffer *input, const rcti &area
|
|||
return lum;
|
||||
}
|
||||
|
||||
void TonemapOperation::update_memory_buffer_started(MemoryBuffer * /*output*/,
|
||||
void TonemapOperation::update_memory_buffer_started(MemoryBuffer * output,
|
||||
const rcti & /*area*/,
|
||||
Span<MemoryBuffer *> inputs)
|
||||
{
|
||||
MemoryBuffer *input_img = inputs[0];
|
||||
if(input_img->is_a_single_elem()) {
|
||||
copy_v4_v4(output->get_elem(0, 0), input_img->get_elem(0, 0));
|
||||
return;
|
||||
}
|
||||
|
||||
if (cached_instance_ == nullptr) {
|
||||
Luminance lum = {0};
|
||||
const MemoryBuffer *input = inputs[0];
|
||||
|
@ -209,6 +216,12 @@ void TonemapOperation::update_memory_buffer_partial(MemoryBuffer *output,
|
|||
const rcti &area,
|
||||
Span<MemoryBuffer *> inputs)
|
||||
{
|
||||
MemoryBuffer *input_img = inputs[0];
|
||||
|
||||
if(input_img->is_a_single_elem()) {
|
||||
return;
|
||||
}
|
||||
|
||||
AvgLogLum *avg = cached_instance_;
|
||||
const float igm = avg->igm;
|
||||
const float offset = data_->offset;
|
||||
|
@ -233,6 +246,12 @@ void PhotoreceptorTonemapOperation::update_memory_buffer_partial(MemoryBuffer *o
|
|||
const rcti &area,
|
||||
Span<MemoryBuffer *> inputs)
|
||||
{
|
||||
MemoryBuffer *input_img = inputs[0];
|
||||
if(input_img->is_a_single_elem()) {
|
||||
copy_v4_v4(output->get_elem(0, 0), input_img->get_elem(0, 0));
|
||||
return;
|
||||
}
|
||||
|
||||
AvgLogLum *avg = cached_instance_;
|
||||
const NodeTonemap *ntm = data_;
|
||||
const float f = expf(-data_->f);
|
||||
|
|
Loading…
Reference in New Issue