[Bf-blender-cvs] [9e8f68f4fa8] functions: remove concept of particle function inputs from code

Jacques Lucke noreply at git.blender.org
Sat Nov 30 16:40:31 CET 2019


Commit: 9e8f68f4fa8683884b2402530e81d24cd8cb1758
Author: Jacques Lucke
Date:   Sat Nov 30 15:34:38 2019 +0100
Branches: functions
https://developer.blender.org/rB9e8f68f4fa8683884b2402530e81d24cd8cb1758

remove concept of particle function inputs from code

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

M	source/blender/simulations/CMakeLists.txt
M	source/blender/simulations/bparticles/node_frontend.cpp
M	source/blender/simulations/bparticles/particle_function.cpp
M	source/blender/simulations/bparticles/particle_function.hpp
D	source/blender/simulations/bparticles/particle_function_builder.cpp
D	source/blender/simulations/bparticles/particle_function_builder.hpp

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

diff --git a/source/blender/simulations/CMakeLists.txt b/source/blender/simulations/CMakeLists.txt
index b01ba776ebe..d536f124b82 100644
--- a/source/blender/simulations/CMakeLists.txt
+++ b/source/blender/simulations/CMakeLists.txt
@@ -55,8 +55,6 @@ set(SRC
   bparticles/particle_function.cpp
   bparticles/force_interface.hpp
   bparticles/force_interface.cpp
-  bparticles/particle_function_builder.hpp
-  bparticles/particle_function_builder.cpp
 )
 
 set(LIB
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index bccd27d3957..13a370a70cd 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -17,7 +17,6 @@
 
 #include "node_frontend.hpp"
 #include "integrator.hpp"
-#include "particle_function_builder.hpp"
 #include "emitters.hpp"
 #include "events.hpp"
 #include "offset_handlers.hpp"
@@ -122,15 +121,19 @@ class VTreeData {
 
   ParticleFunction *particle_function_for_all_inputs(const XNode &xnode)
   {
-    Optional<std::unique_ptr<ParticleFunction>> fn = create_particle_function(
-        xnode, m_inlined_tree_data_graph, m_data_cache, m_persistent_surface_lookup);
-    if (!fn.has_value()) {
-      return nullptr;
+    Vector<const MFInputSocket *> sockets_to_compute;
+    for (const XInputSocket *xsocket : xnode.inputs()) {
+      if (m_inlined_tree_data_graph.is_mapped(*xsocket)) {
+        sockets_to_compute.append(&m_inlined_tree_data_graph.lookup_dummy_socket(*xsocket));
+      }
     }
-    ParticleFunction *fn_ptr = fn->get();
-    BLI_assert(fn_ptr != nullptr);
-    m_resources.add(std::move(fn.extract()), __func__);
-    return fn_ptr;
+
+    const MultiFunction &fn = this->construct<FN::MF_EvaluateNetwork>(
+        "Evaluate Network", Vector<const MFOutputSocket *>(), std::move(sockets_to_compute));
+    ParticleFunction &particle_fn = this->construct<ParticleFunction>(
+        "Particle Function", fn, m_data_cache, m_persistent_surface_lookup);
+
+    return &particle_fn;
   }
 
   Optional<NamedGenericTupleRef> compute_inputs(const XNode &xnode, ArrayRef<uint> input_indices)
diff --git a/source/blender/simulations/bparticles/particle_function.cpp b/source/blender/simulations/bparticles/particle_function.cpp
index a11f5b406d8..70859b858ab 100644
--- a/source/blender/simulations/bparticles/particle_function.cpp
+++ b/source/blender/simulations/bparticles/particle_function.cpp
@@ -8,26 +8,15 @@ namespace BParticles {
 
 using FN::CPPType;
 
-ParticleFunctionInputProvider::~ParticleFunctionInputProvider()
-{
-}
-
-ParticleFunction::ParticleFunction(std::unique_ptr<const MultiFunction> fn,
-                                   Vector<ParticleFunctionInputProvider *> input_providers,
+ParticleFunction::ParticleFunction(const MultiFunction &fn,
                                    FN::ExternalDataCacheContext &data_cache,
                                    FN::PersistentSurfacesLookupContext &persistent_surface_lookup)
-    : m_fn(std::move(fn)),
-      m_input_providers(std::move(input_providers)),
-      m_data_cache(data_cache),
-      m_persistent_surface_lookup(persistent_surface_lookup)
+    : m_fn(fn), m_data_cache(data_cache), m_persistent_surface_lookup(persistent_surface_lookup)
 {
 }
 
 ParticleFunction::~ParticleFunction()
 {
-  for (auto *provider : m_input_providers) {
-    delete provider;
-  }
 }
 
 std::unique_ptr<ParticleFunctionResult> ParticleFunction::compute(ActionInterface &interface)
@@ -60,14 +49,15 @@ std::unique_ptr<ParticleFunctionResult> ParticleFunction::compute(ArrayRef<uint>
   auto result = BLI::make_unique<ParticleFunctionResult>();
   result->m_pindices = pindices;
 
-  FN::MFParamsBuilder params_builder(*m_fn, array_size);
+  FN::MFParamsBuilder params_builder(m_fn, array_size);
   FN::MFContextBuilder context_builder;
 
   Vector<GenericMutableArrayRef> arrays_to_free;
 
-  for (uint param_index : m_fn->param_indices()) {
-    FN::MFParamType param_type = m_fn->param_type(param_index);
+  for (uint param_index : m_fn.param_indices()) {
+    FN::MFParamType param_type = m_fn.param_type(param_index);
     switch (param_type.type()) {
+      case FN::MFParamType::SingleInput:
       case FN::MFParamType::VectorInput:
       case FN::MFParamType::MutableVector:
       case FN::MFParamType::MutableSingle:
@@ -77,35 +67,6 @@ std::unique_ptr<ParticleFunctionResult> ParticleFunction::compute(ArrayRef<uint>
         /*TODO */
         BLI_assert(false);
         break;
-      case FN::MFParamType::SingleInput: {
-        auto *provider = m_input_providers[param_index];
-        InputProviderInterface interface(pindices, attributes, action_context);
-        auto optional_array = provider->get(interface);
-        const CPPType &type = param_type.data_type().single__cpp_type();
-        if (optional_array.has_value()) {
-          ParticleFunctionInputArray array = optional_array.extract();
-          BLI_assert(array.buffer != nullptr);
-          BLI_assert(array.stride > 0);
-
-          GenericMutableArrayRef array_ref{type, array.buffer, array_size};
-          params_builder.add_readonly_single_input(array_ref);
-
-          if (array.is_newly_allocated) {
-            arrays_to_free.append(array_ref);
-          }
-        }
-        else {
-          uint element_size = type.size();
-          void *default_buffer = BLI_temporary_allocate(element_size * array_size);
-          for (uint pindex : pindices) {
-            memset(POINTER_OFFSET(default_buffer, pindex * element_size), 0, element_size);
-          }
-          GenericMutableArrayRef array_ref{type, default_buffer, array_size};
-          params_builder.add_readonly_single_input(array_ref);
-          arrays_to_free.append(array_ref);
-        }
-        break;
-      }
       case FN::MFParamType::SingleOutput: {
         const CPPType &type = param_type.data_type().single__cpp_type();
         void *output_buffer = BLI_temporary_allocate(type.size() * array_size);
@@ -122,7 +83,7 @@ std::unique_ptr<ParticleFunctionResult> ParticleFunction::compute(ArrayRef<uint>
   context_builder.add_element_context(m_data_cache);
   context_builder.add_element_context(m_persistent_surface_lookup);
 
-  m_fn->call(pindices, params_builder, context_builder);
+  m_fn.call(pindices, params_builder, context_builder);
 
   for (GenericMutableArrayRef array_ref : arrays_to_free) {
     array_ref.destruct_indices(pindices);
diff --git a/source/blender/simulations/bparticles/particle_function.hpp b/source/blender/simulations/bparticles/particle_function.hpp
index a1bd1dfd2aa..491e76ca1b2 100644
--- a/source/blender/simulations/bparticles/particle_function.hpp
+++ b/source/blender/simulations/bparticles/particle_function.hpp
@@ -45,70 +45,14 @@ class ParticleFunctionResult : BLI::NonCopyable, BLI::NonMovable {
   }
 };
 
-struct ParticleFunctionInputArray {
-  void *buffer = nullptr;
-  uint stride = 0;
-  bool is_newly_allocated = false;
-
-  ParticleFunctionInputArray(void *buffer, uint stride, bool is_newly_allocated)
-      : buffer(buffer), stride(stride), is_newly_allocated(is_newly_allocated)
-  {
-  }
-
-  template<typename T>
-  ParticleFunctionInputArray(ArrayRef<T> array, bool is_newly_allocated)
-      : ParticleFunctionInputArray((void *)array.begin(), sizeof(T), is_newly_allocated)
-  {
-  }
-};
-
-class InputProviderInterface {
- private:
-  ArrayRef<uint> m_pindices;
-  AttributesRef m_attributes;
-  ActionContext *m_action_context;
-
- public:
-  InputProviderInterface(ArrayRef<uint> pindices,
-                         AttributesRef attributes,
-                         ActionContext *action_context)
-      : m_pindices(pindices), m_attributes(attributes), m_action_context(action_context)
-  {
-  }
-
-  ArrayRef<uint> pindices()
-  {
-    return m_pindices;
-  }
-
-  AttributesRef attributes()
-  {
-    return m_attributes;
-  }
-
-  ActionContext *action_context()
-  {
-    return m_action_context;
-  }
-};
-
-class ParticleFunctionInputProvider {
- public:
-  virtual ~ParticleFunctionInputProvider();
-
-  virtual Optional<ParticleFunctionInputArray> get(InputProviderInterface &interface) = 0;
-};
-
 class ParticleFunction {
  private:
-  std::unique_ptr<const MultiFunction> m_fn;
-  Vector<ParticleFunctionInputProvider *> m_input_providers;
+  const MultiFunction &m_fn;
   FN::ExternalDataCacheContext &m_data_cache;
   FN::PersistentSurfacesLookupContext &m_persistent_surface_lookup;
 
  public:
-  ParticleFunction(std::unique_ptr<const MultiFunction> fn,
-                   Vector<ParticleFunctionInputProvider *> input_providers,
+  ParticleFunction(const MultiFunction &fn,
                    FN::ExternalDataCacheContext &data_cache,
                    FN::PersistentSurfacesLookupContext &persistent_surface_lookup);
 
diff --git a/source/blender/simulations/bparticles/particle_function_builder.cpp b/source/blender/simulations/bparticles/particle_function_builder.cpp
deleted file mode 100644
index aa4f9a0dec9..00000000000
--- a/source/blender/simulations/bparticles/particle_function_builder.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-#include "BLI_lazy_init_cxx.h"
-#include "BLI_hash.h"
-
-#include "particle_function_builder.hpp"
-
-#include "events.hpp"
-#include "action_contexts.hpp"
-
-#include "FN_multi_functions.h"
-
-namespace BParticles {
-
-using BKE::XInputSocket;
-using BKE::XOutputSocket;
-using BLI::float2;
-using BLI::rgba_b;
-using FN::MFInputSocket;
-using FN::MFOutputSocket;
-
-static Vector<const MFInputSocket *> find_input_data_sockets(const XNode &xnode,
-                                                             VTreeMFNetwork &data_graph)
-{
-  Vector<const MFInputSocket *> inputs;
-  for (const XInputSocket *xsocket : xnode.inputs()) {
-    if (data_graph.is_mapped(*xsocket)) {
-      const MFInputSocket &socket = data_graph.lookup_dummy_socket(*xsocket);
-      inputs.append(&socket);
-    }
-  }
-  return inputs;
-}
-
-static VectorSet<const XOutputSocket *> find_particle_dependencies(
-    VTreeMFNetwork &data_graph, ArrayRef<const MFInputSocket *> sockets)
-{
-  Vector<const MFOutputSocket *> dummy_dependencies = data_graph.network().find_dummy_dependencies(
-      soc

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list