[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