[Bf-blender-cvs] [ca1de7fe4cb] functions: use more global external data cache

Jacques Lucke noreply at git.blender.org
Fri Nov 15 16:04:08 CET 2019


Commit: ca1de7fe4cb6ce86197a6b051f5479b0c1a51e51
Author: Jacques Lucke
Date:   Fri Nov 15 15:30:12 2019 +0100
Branches: functions
https://developer.blender.org/rBca1de7fe4cb6ce86197a6b051f5479b0c1a51e51

use more global external data cache

===================================================================

M	source/blender/functions/FN_multi_function_common_contexts.h
M	source/blender/functions/intern/multi_functions/mixed.cc
M	source/blender/simulations/bparticles/node_frontend.cpp
M	source/blender/simulations/bparticles/particle_function.cpp
M	source/blender/simulations/bparticles/particle_function.hpp
M	source/blender/simulations/bparticles/particle_function_builder.cpp
M	source/blender/simulations/bparticles/particle_function_builder.hpp

===================================================================

diff --git a/source/blender/functions/FN_multi_function_common_contexts.h b/source/blender/functions/FN_multi_function_common_contexts.h
index 4c6bec7c1a3..8d41e9c888e 100644
--- a/source/blender/functions/FN_multi_function_common_contexts.h
+++ b/source/blender/functions/FN_multi_function_common_contexts.h
@@ -40,15 +40,15 @@ class ParticleAttributesContext : public MFElementContext {
   }
 };
 
-class ExternalObjectBVHTreesContext : public MFElementContext {
+class ExternalDataCacheContext : public MFElementContext {
  private:
   mutable Map<Object *, BVHTreeFromMesh *> m_bvh_trees;
   mutable std::mutex m_bvt_trees_mutex;
 
  public:
-  ExternalObjectBVHTreesContext() = default;
+  ExternalDataCacheContext() = default;
 
-  ~ExternalObjectBVHTreesContext()
+  ~ExternalDataCacheContext()
   {
     for (auto bvhtree : m_bvh_trees.values()) {
       if (bvhtree != nullptr) {
diff --git a/source/blender/functions/intern/multi_functions/mixed.cc b/source/blender/functions/intern/multi_functions/mixed.cc
index 3c737cebc26..d3568ccd536 100644
--- a/source/blender/functions/intern/multi_functions/mixed.cc
+++ b/source/blender/functions/intern/multi_functions/mixed.cc
@@ -609,7 +609,7 @@ MF_ClosestPointOnObject::MF_ClosestPointOnObject()
 
 void MF_ClosestPointOnObject::call(MFMask mask, MFParams params, MFContext context) const
 {
-  auto context_data = context.element_contexts().find_first<ExternalObjectBVHTreesContext>();
+  auto context_data = context.element_contexts().find_first<ExternalDataCacheContext>();
 
   VirtualListRef<Object *> objects = params.readonly_single_input<Object *>(0, "Object");
   VirtualListRef<float3> positions = params.readonly_single_input<float3>(1, "Position");
@@ -700,7 +700,7 @@ void MF_Clamp::call(MFMask mask, MFParams params, MFContext UNUSED(context)) con
   MutableArrayRef<float> r_values = params.uninitialized_single_output<float>(3, "Value");
 
   if (m_sort_minmax) {
-  for (uint i : mask.indices()) {
+    for (uint i : mask.indices()) {
       float min_v = min_values[i];
       float max_v = max_values[i];
       float value = values[i];
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index 163186a8794..ccf22f88ae4 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -10,6 +10,7 @@
 #include "FN_multi_functions.h"
 #include "FN_generic_tuple.h"
 #include "FN_vtree_multi_function_network_generation.h"
+#include "FN_multi_function_common_contexts.h"
 
 #include "node_frontend.hpp"
 #include "integrator.hpp"
@@ -60,6 +61,7 @@ class VTreeData {
   /* Keep this at the beginning, so that it is destructed last. */
   ResourceCollector m_resources;
   VTreeMFNetwork &m_vtree_data_graph;
+  FN::ExternalDataCacheContext m_data_cache;
 
  public:
   VTreeData(VTreeMFNetwork &vtree_data) : m_vtree_data_graph(vtree_data)
@@ -91,8 +93,8 @@ class VTreeData {
 
   ParticleFunction *particle_function_for_all_inputs(const VNode &vnode)
   {
-    Optional<std::unique_ptr<ParticleFunction>> fn = create_particle_function(vnode,
-                                                                              m_vtree_data_graph);
+    Optional<std::unique_ptr<ParticleFunction>> fn = create_particle_function(
+        vnode, m_vtree_data_graph, m_data_cache);
     if (!fn.has_value()) {
       return nullptr;
     }
diff --git a/source/blender/simulations/bparticles/particle_function.cpp b/source/blender/simulations/bparticles/particle_function.cpp
index e8641e2c9fc..09dffa630c8 100644
--- a/source/blender/simulations/bparticles/particle_function.cpp
+++ b/source/blender/simulations/bparticles/particle_function.cpp
@@ -13,8 +13,9 @@ ParticleFunctionInputProvider::~ParticleFunctionInputProvider()
 }
 
 ParticleFunction::ParticleFunction(std::unique_ptr<const MultiFunction> fn,
-                                   Vector<ParticleFunctionInputProvider *> input_providers)
-    : m_fn(std::move(fn)), m_input_providers(std::move(input_providers))
+                                   Vector<ParticleFunctionInputProvider *> input_providers,
+                                   FN::ExternalDataCacheContext &data_cache)
+    : m_fn(std::move(fn)), m_input_providers(std::move(input_providers)), m_data_cache(data_cache)
 {
 }
 
@@ -112,8 +113,7 @@ std::unique_ptr<ParticleFunctionResult> ParticleFunction::compute(ArrayRef<uint>
 
   FN::ParticleAttributesContext attributes_context(attributes);
   context_builder.add_element_context(attributes_context, IndexRange(array_size));
-  FN::ExternalObjectBVHTreesContext bvhtree_context;
-  context_builder.add_element_context(bvhtree_context);
+  context_builder.add_element_context(m_data_cache);
 
   m_fn->call(pindices, params_builder, context_builder);
 
diff --git a/source/blender/simulations/bparticles/particle_function.hpp b/source/blender/simulations/bparticles/particle_function.hpp
index fe27dd124a6..274da12b246 100644
--- a/source/blender/simulations/bparticles/particle_function.hpp
+++ b/source/blender/simulations/bparticles/particle_function.hpp
@@ -6,6 +6,7 @@
 #include "force_interface.hpp"
 
 #include "FN_multi_function.h"
+#include "FN_multi_function_common_contexts.h"
 
 namespace BParticles {
 
@@ -102,10 +103,12 @@ class ParticleFunction {
  private:
   std::unique_ptr<const MultiFunction> m_fn;
   Vector<ParticleFunctionInputProvider *> m_input_providers;
+  FN::ExternalDataCacheContext &m_data_cache;
 
  public:
   ParticleFunction(std::unique_ptr<const MultiFunction> fn,
-                   Vector<ParticleFunctionInputProvider *> input_providers);
+                   Vector<ParticleFunctionInputProvider *> input_providers,
+                   FN::ExternalDataCacheContext &data_cache);
 
   ~ParticleFunction();
 
diff --git a/source/blender/simulations/bparticles/particle_function_builder.cpp b/source/blender/simulations/bparticles/particle_function_builder.cpp
index ecb16338fbb..611e284b3bc 100644
--- a/source/blender/simulations/bparticles/particle_function_builder.cpp
+++ b/source/blender/simulations/bparticles/particle_function_builder.cpp
@@ -132,7 +132,8 @@ static ParticleFunctionInputProvider *create_input_provider(VTreeMFNetwork &vtre
 static Optional<std::unique_ptr<ParticleFunction>> create_particle_function_from_sockets(
     VTreeMFNetwork &data_graph,
     ArrayRef<const MFInputSocket *> sockets_to_compute,
-    ArrayRef<const VOutputSocket *> dependencies)
+    ArrayRef<const VOutputSocket *> dependencies,
+    FN::ExternalDataCacheContext &data_cache)
 {
   Vector<const MFOutputSocket *> dependency_sockets;
   Vector<ParticleFunctionInputProvider *> input_providers;
@@ -145,16 +146,17 @@ static Optional<std::unique_ptr<ParticleFunction>> create_particle_function_from
   std::unique_ptr<FN::MultiFunction> fn = BLI::make_unique<FN::MF_EvaluateNetwork>(
       dependency_sockets, sockets_to_compute);
 
-  return BLI::make_unique<ParticleFunction>(std::move(fn), input_providers);
+  return BLI::make_unique<ParticleFunction>(std::move(fn), input_providers, data_cache);
 }
 
-Optional<std::unique_ptr<ParticleFunction>> create_particle_function(const VNode &vnode,
-                                                                     VTreeMFNetwork &data_graph)
+Optional<std::unique_ptr<ParticleFunction>> create_particle_function(
+    const VNode &vnode, VTreeMFNetwork &data_graph, FN::ExternalDataCacheContext &data_cache)
 {
   Vector<const MFInputSocket *> sockets_to_compute = find_input_data_sockets(vnode, data_graph);
   auto dependencies = find_particle_dependencies(data_graph, sockets_to_compute);
 
-  return create_particle_function_from_sockets(data_graph, sockets_to_compute, dependencies);
+  return create_particle_function_from_sockets(
+      data_graph, sockets_to_compute, dependencies, data_cache);
 }
 
 }  // namespace BParticles
diff --git a/source/blender/simulations/bparticles/particle_function_builder.hpp b/source/blender/simulations/bparticles/particle_function_builder.hpp
index 99fb03626c1..e5993a6dac5 100644
--- a/source/blender/simulations/bparticles/particle_function_builder.hpp
+++ b/source/blender/simulations/bparticles/particle_function_builder.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "FN_vtree_multi_function_network.h"
+#include "FN_multi_function_common_contexts.h"
 
 #include "particle_function.hpp"
 
@@ -9,7 +10,7 @@ namespace BParticles {
 using BKE::VNode;
 using FN::VTreeMFNetwork;
 
-Optional<std::unique_ptr<ParticleFunction>> create_particle_function(const VNode &vnode,
-                                                                     VTreeMFNetwork &data_graph);
+Optional<std::unique_ptr<ParticleFunction>> create_particle_function(
+    const VNode &vnode, VTreeMFNetwork &data_graph, FN::ExternalDataCacheContext &data_cache);
 
 }  // namespace BParticles



More information about the Bf-blender-cvs mailing list