From affd409e89cb532b658779e6876c65582ee26eff Mon Sep 17 00:00:00 2001 From: Omar Emara Date: Tue, 26 Mar 2024 14:15:30 +0200 Subject: [PATCH 1/2] Compositor: Allow inter-operation canceling This is not a real patch, but created to demonstrate inter-operation canceling by waiting for each operation to finish before executing the next one. This improves interactivity by degrades performance. --- .../realtime_compositor/intern/evaluator.cc | 13 +++++++++++-- .../realtime_compositor/intern/operation.cc | 4 ++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/source/blender/compositor/realtime_compositor/intern/evaluator.cc b/source/blender/compositor/realtime_compositor/intern/evaluator.cc index fdc966ad287..2eb88380259 100644 --- a/source/blender/compositor/realtime_compositor/intern/evaluator.cc +++ b/source/blender/compositor/realtime_compositor/intern/evaluator.cc @@ -32,11 +32,13 @@ void Evaluator::evaluate() if (!is_compiled_) { compile_and_evaluate(); - is_compiled_ = true; return; } for (const std::unique_ptr &operation : operations_stream_) { + if (context_.is_canceled()) { + return; + } operation->evaluate(); } } @@ -68,7 +70,7 @@ void Evaluator::compile_and_evaluate() { derived_node_tree_ = std::make_unique(context_.get_node_tree()); - if (!validate_node_tree()) { + if (!validate_node_tree() || context_.is_canceled()) { return; } @@ -77,6 +79,11 @@ void Evaluator::compile_and_evaluate() CompileState compile_state(schedule); for (const DNode &node : schedule) { + if (context_.is_canceled()) { + reset(); + return; + } + if (compile_state.should_compile_shader_compile_unit(node)) { compile_and_evaluate_shader_compile_unit(compile_state); } @@ -88,6 +95,8 @@ void Evaluator::compile_and_evaluate() compile_and_evaluate_node(node, compile_state); } } + + is_compiled_ = true; } void Evaluator::compile_and_evaluate_node(DNode node, CompileState &compile_state) diff --git a/source/blender/compositor/realtime_compositor/intern/operation.cc b/source/blender/compositor/realtime_compositor/intern/operation.cc index d8f9f7ab508..eaec7e03335 100644 --- a/source/blender/compositor/realtime_compositor/intern/operation.cc +++ b/source/blender/compositor/realtime_compositor/intern/operation.cc @@ -9,6 +9,8 @@ #include "BLI_string_ref.hh" #include "BLI_vector.hh" +#include "GPU_state.hh" + #include "COM_context.hh" #include "COM_conversion_operation.hh" #include "COM_domain.hh" @@ -39,6 +41,8 @@ void Operation::evaluate() release_inputs(); release_unneeded_results(); + + GPU_finish(); } Result &Operation::get_result(StringRef identifier) -- 2.30.2 From e9757f90ffbfed23a52e905a361687a6a9f3e976 Mon Sep 17 00:00:00 2001 From: Omar Emara Date: Mon, 8 Apr 2024 11:57:42 +0200 Subject: [PATCH 2/2] Reverent GPU finish --- .../compositor/realtime_compositor/intern/operation.cc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source/blender/compositor/realtime_compositor/intern/operation.cc b/source/blender/compositor/realtime_compositor/intern/operation.cc index eaec7e03335..d8f9f7ab508 100644 --- a/source/blender/compositor/realtime_compositor/intern/operation.cc +++ b/source/blender/compositor/realtime_compositor/intern/operation.cc @@ -9,8 +9,6 @@ #include "BLI_string_ref.hh" #include "BLI_vector.hh" -#include "GPU_state.hh" - #include "COM_context.hh" #include "COM_conversion_operation.hh" #include "COM_domain.hh" @@ -41,8 +39,6 @@ void Operation::evaluate() release_inputs(); release_unneeded_results(); - - GPU_finish(); } Result &Operation::get_result(StringRef identifier) -- 2.30.2