[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