[Bf-blender-cvs] [e2a6763be39] functions: support for freeing particle function input arrays

Jacques Lucke noreply at git.blender.org
Mon Jul 29 17:57:29 CEST 2019


Commit: e2a6763be398ed225b8c137926ce80daeb95b85f
Author: Jacques Lucke
Date:   Mon Jul 29 13:51:41 2019 +0200
Branches: functions
https://developer.blender.org/rBe2a6763be398ed225b8c137926ce80daeb95b85f

support for freeing particle function input arrays

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

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

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

diff --git a/source/blender/simulations/bparticles/particle_function.cpp b/source/blender/simulations/bparticles/particle_function.cpp
index cf9ff7a1b96..b6752abe677 100644
--- a/source/blender/simulations/bparticles/particle_function.cpp
+++ b/source/blender/simulations/bparticles/particle_function.cpp
@@ -142,6 +142,7 @@ void ParticleFunction::init_with_deps(ParticleFunctionResult *result,
 
   Vector<void *> input_buffers;
   Vector<uint> input_strides;
+  Vector<uint> inputs_to_free;
 
   for (uint i = 0; i < m_fn_with_deps->input_amount(); i++) {
     auto *provider = m_input_providers[i];
@@ -151,6 +152,9 @@ void ParticleFunction::init_with_deps(ParticleFunctionResult *result,
 
     input_buffers.append(array.buffer);
     input_strides.append(array.stride);
+    if (array.is_newly_allocated) {
+      inputs_to_free.append(i);
+    }
   }
 
   Vector<void *> output_buffers;
@@ -193,6 +197,12 @@ void ParticleFunction::init_with_deps(ParticleFunctionResult *result,
       fn_out.relocate_out__dynamic(i, ptr);
     }
   }
+
+  for (uint i : inputs_to_free) {
+    void *buffer = input_buffers[i];
+    uint stride = input_strides[i];
+    array_allocator.deallocate(buffer, stride);
+  }
 }
 
 }  // namespace BParticles
diff --git a/source/blender/simulations/bparticles/particle_function.hpp b/source/blender/simulations/bparticles/particle_function.hpp
index 9ac8684c3f9..7fb0e66f1a0 100644
--- a/source/blender/simulations/bparticles/particle_function.hpp
+++ b/source/blender/simulations/bparticles/particle_function.hpp
@@ -71,13 +71,16 @@ class ParticleFunctionResult {
 struct ParticleFunctionInputArray {
   void *buffer = nullptr;
   uint stride = 0;
+  bool is_newly_allocated = false;
 
-  ParticleFunctionInputArray(void *buffer, uint stride) : buffer(buffer), stride(stride)
+  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) : buffer((void *)array.begin()), stride(sizeof(T))
+  ParticleFunctionInputArray(ArrayRef<T> array, bool is_newly_allocated)
+      : ParticleFunctionInputArray((void *)array.begin(), sizeof(T), is_newly_allocated)
   {
   }
 };
diff --git a/source/blender/simulations/bparticles/particle_function_builder.cpp b/source/blender/simulations/bparticles/particle_function_builder.cpp
index 29956b1a829..9a279f4b7d3 100644
--- a/source/blender/simulations/bparticles/particle_function_builder.cpp
+++ b/source/blender/simulations/bparticles/particle_function_builder.cpp
@@ -64,7 +64,7 @@ class AttributeInputProvider : public ParticleFunctionInputProvider {
     uint attribute_index = attributes.attribute_index(m_name);
     uint stride = attributes.attribute_stride(attribute_index);
     void *buffer = attributes.get_ptr(attribute_index);
-    return {buffer, stride};
+    return {buffer, stride, false};
   }
 };
 
@@ -75,7 +75,7 @@ class CollisionNormalInputProvider : public ParticleFunctionInputProvider {
     BLI_assert(action_context != nullptr);
     CollisionEventInfo *collision_info = dynamic_cast<CollisionEventInfo *>(action_context);
     BLI_assert(collision_info != nullptr);
-    return collision_info->normals();
+    return {collision_info->normals(), false};
   }
 };



More information about the Bf-blender-cvs mailing list