From ee98dc8d0fc8d25a2369e6da58d76652f324c8ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Fri, 17 Jul 2020 16:47:19 +0200 Subject: Fix T77277: building depsgraph inter-driver relations is slow The extra depsgraph relations that were added to prevent threading issues during evaluation (rB4c30dc343165) caused a considerable slowdown on complex scenes with many drivers (T77277, T78615). This commit improves this as follows. Only the following drivers are considered for execution serialisation: - Drivers on Array elements, and - Drivers on Boolean or Enum properties. Relations between drivers of the same arrays are added blindly, i.e. without checking for transitive or cyclic relations. This is possible as other relations will just target the `PROPERTIES_ENTRY` or `PROPERTIES_EXIT` nodes. Checking whether a driver is on an array is first done by checking `array_index > 0`, and then falling back to resolving the RNA path to an RNA property and inspecting that. The code also avoids circular dependencies when there are multiple drivers on the same property. This not something that is expected to happen (both the UI and the Python API prevent duplicate drivers), it did happen in a file (F8669945, example file of T78615) and it is easy to deal with here. Reviewers: sergey Subscribers: mont29 Comment update --- source/blender/depsgraph/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) (limited to 'source/blender/depsgraph/CMakeLists.txt') diff --git a/source/blender/depsgraph/CMakeLists.txt b/source/blender/depsgraph/CMakeLists.txt index 355d2536e1a..839a3712129 100644 --- a/source/blender/depsgraph/CMakeLists.txt +++ b/source/blender/depsgraph/CMakeLists.txt @@ -46,6 +46,7 @@ set(SRC intern/builder/deg_builder_nodes_view_layer.cc intern/builder/deg_builder_pchanmap.cc intern/builder/deg_builder_relations.cc + intern/builder/deg_builder_relations_drivers.cc intern/builder/deg_builder_relations_keys.cc intern/builder/deg_builder_relations_rig.cc intern/builder/deg_builder_relations_scene.cc @@ -100,6 +101,7 @@ set(SRC intern/builder/deg_builder.h intern/builder/deg_builder_cache.h intern/builder/deg_builder_cycle.h + intern/builder/deg_builder_relations_drivers.h intern/builder/deg_builder_map.h intern/builder/deg_builder_nodes.h intern/builder/deg_builder_pchanmap.h -- cgit v1.2.3 From 9b867f2e90bd5ba9c2e37ed39cf8b1ad28e39b07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Mon, 27 Jul 2020 08:53:32 +0200 Subject: Fix T79121: Dependency cycle when driver points to prop with 'scale' in name This makes `RNANodeQuery::construct_node_identifier()` more strict in its matching of certain property names. The downside of this approach is that it's not possible any more to use `"rotation"` and expect a match for `"rotation_euler"` and friends, so the list of strings to test against is now 3x as long. Reviewed By: sergey Maniphest Tasks: T79121 Differential Revision: https://developer.blender.org/D8375 --- source/blender/depsgraph/CMakeLists.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'source/blender/depsgraph/CMakeLists.txt') diff --git a/source/blender/depsgraph/CMakeLists.txt b/source/blender/depsgraph/CMakeLists.txt index 839a3712129..51fce738700 100644 --- a/source/blender/depsgraph/CMakeLists.txt +++ b/source/blender/depsgraph/CMakeLists.txt @@ -147,3 +147,14 @@ set(LIB ) blender_add_lib(bf_depsgraph "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") + +if(WITH_GTESTS) + set(TEST_SRC + intern/builder/deg_builder_rna_test.cc + ) + set(TEST_LIB + bf_depsgraph + ) + include(GTestTesting) + blender_add_test_lib(bf_depsgraph_tests "${TEST_SRC}" "${INC};${TEST_INC}" "${INC_SYS}" "${LIB}") +endif() -- cgit v1.2.3 From 3642cbb1d2c9d9eefb5a8efac9c30e9b054dab8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Wed, 29 Jul 2020 18:14:17 +0200 Subject: Cleanup: converted Depsgraph Building Pipeline to object-oriented code This will make it easier & cleaner to make custom-built depsgraph (for example for exporting invisible objects to USD or Alembic, see T75936). No functional changes. Reviewed by: sergey Differential Revision: https://developer.blender.org/D8423 --- source/blender/depsgraph/CMakeLists.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'source/blender/depsgraph/CMakeLists.txt') diff --git a/source/blender/depsgraph/CMakeLists.txt b/source/blender/depsgraph/CMakeLists.txt index 51fce738700..417aaa2c4c0 100644 --- a/source/blender/depsgraph/CMakeLists.txt +++ b/source/blender/depsgraph/CMakeLists.txt @@ -54,6 +54,11 @@ set(SRC intern/builder/deg_builder_remove_noop.cc intern/builder/deg_builder_rna.cc intern/builder/deg_builder_transitive.cc + intern/builder/pipeline.cc + intern/builder/pipeline_compositor.cc + intern/builder/pipeline_from_ids.cc + intern/builder/pipeline_render.cc + intern/builder/pipeline_view_layer.cc intern/debug/deg_debug.cc intern/debug/deg_debug_relations_graphviz.cc intern/debug/deg_debug_stats_gnuplot.cc @@ -110,6 +115,11 @@ set(SRC intern/builder/deg_builder_remove_noop.h intern/builder/deg_builder_rna.h intern/builder/deg_builder_transitive.h + intern/builder/pipeline.h + intern/builder/pipeline_compositor.h + intern/builder/pipeline_from_ids.h + intern/builder/pipeline_render.h + intern/builder/pipeline_view_layer.h intern/debug/deg_debug.h intern/debug/deg_time_average.h intern/eval/deg_eval.h -- cgit v1.2.3