[Bf-blender-cvs] [f2b2279c1a5] functions: Remove owns_mem attribute from Tuple

Jacques Lucke noreply at git.blender.org
Thu Sep 26 16:51:51 CEST 2019


Commit: f2b2279c1a5ab171aa2af246452b01f6aa037582
Author: Jacques Lucke
Date:   Thu Sep 26 15:41:19 2019 +0200
Branches: functions
https://developer.blender.org/rBf2b2279c1a5ab171aa2af246452b01f6aa037582

Remove owns_mem attribute from Tuple

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

M	source/blender/blenkernel/intern/fcurve.c
M	source/blender/functions/backends/cpp/tuple.hpp
M	source/blender/functions/backends/tuple_call/tuple_call-c.cpp
M	source/blender/functions/backends/tuple_call/tuple_call-c.h
M	source/blender/functions/frontends/data_flow_nodes/unlinked_input_inserters.cpp
M	source/blender/modifiers/intern/MOD_functiondeform.c
M	source/blender/simulations/bparticles/node_frontend.cpp

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

diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c
index 3a033e700d1..fa39b7f8ea5 100644
--- a/source/blender/blenkernel/intern/fcurve.c
+++ b/source/blender/blenkernel/intern/fcurve.c
@@ -1769,15 +1769,14 @@ static float dvar_eval_function(ChannelDriver *UNUSED(driver), DriverVar *dvar)
 
   FnTupleCallBody body = FN_tuple_call_get(fn);
 
-  FnTuple fn_in = FN_tuple_for_input(body);
-  FnTuple fn_out = FN_tuple_for_output(body);
+  FN_TUPLE_CALL_PREPARE_STACK(body, fn_in, fn_out);
+
   FN_tuple_set_int32(fn_in, 0, (int64_t)dvar);
 
   FN_tuple_call_invoke(body, fn_in, fn_out, __func__);
   float result = FN_tuple_get_float(fn_out, 0);
 
-  FN_tuple_free(fn_in);
-  FN_tuple_free(fn_out);
+  FN_TUPLE_CALL_DESTRUCT_STACK(body, fn_in, fn_out);
 
   return result;
 }
diff --git a/source/blender/functions/backends/cpp/tuple.hpp b/source/blender/functions/backends/cpp/tuple.hpp
index c348be3b809..ed3d2d5dd2e 100644
--- a/source/blender/functions/backends/cpp/tuple.hpp
+++ b/source/blender/functions/backends/cpp/tuple.hpp
@@ -138,13 +138,6 @@ class TupleMeta {
 
 class Tuple {
  public:
-  Tuple(TupleMeta &meta) : m_meta(&meta)
-  {
-    m_initialized = (bool *)MEM_calloc_arrayN(m_meta->size(), sizeof(bool), __func__);
-    m_data = MEM_mallocN(m_meta->size_of_data(), __func__);
-    m_owns_mem = true;
-  }
-
   Tuple(TupleMeta &meta, void *data, bool *initialized, bool was_initialized = false)
       : m_meta(&meta)
   {
@@ -152,7 +145,6 @@ class Tuple {
     BLI_assert(initialized != nullptr);
     m_data = data;
     m_initialized = initialized;
-    m_owns_mem = false;
     if (!was_initialized) {
       this->set_all_uninitialized();
     }
@@ -178,10 +170,6 @@ class Tuple {
   ~Tuple()
   {
     this->destruct_all();
-    if (m_owns_mem) {
-      MEM_freeN(m_data);
-      MEM_freeN(m_initialized);
-    }
   }
 
   /**
@@ -554,7 +542,6 @@ class Tuple {
 
   void *m_data;
   bool *m_initialized;
-  uint8_t m_owns_mem : 1;
   TupleMeta *m_meta;
 };
 
diff --git a/source/blender/functions/backends/tuple_call/tuple_call-c.cpp b/source/blender/functions/backends/tuple_call/tuple_call-c.cpp
index 7c0441205cb..e8cc52ad061 100644
--- a/source/blender/functions/backends/tuple_call/tuple_call-c.cpp
+++ b/source/blender/functions/backends/tuple_call/tuple_call-c.cpp
@@ -27,18 +27,6 @@ FnTupleCallBody FN_tuple_call_get(FnFunction fn_c)
   return wrap(&unwrap(fn_c)->body<TupleCallBody>());
 }
 
-FnTuple FN_tuple_for_input(FnTupleCallBody body_c)
-{
-  auto tuple = new Tuple(unwrap(body_c)->meta_in());
-  return wrap(tuple);
-}
-
-FnTuple FN_tuple_for_output(FnTupleCallBody body_c)
-{
-  auto tuple = new Tuple(unwrap(body_c)->meta_out());
-  return wrap(tuple);
-}
-
 uint fn_tuple_stack_prepare_size(FnTupleCallBody body_c)
 {
   TupleCallBody *body = unwrap(body_c);
diff --git a/source/blender/functions/backends/tuple_call/tuple_call-c.h b/source/blender/functions/backends/tuple_call/tuple_call-c.h
index a00ea21d85c..cd73f63a2bc 100644
--- a/source/blender/functions/backends/tuple_call/tuple_call-c.h
+++ b/source/blender/functions/backends/tuple_call/tuple_call-c.h
@@ -16,8 +16,6 @@ void FN_tuple_call_invoke(FnTupleCallBody body,
                           FnTuple fn_in,
                           FnTuple fn_out,
                           const char *caller_info);
-FnTuple FN_tuple_for_input(FnTupleCallBody body);
-FnTuple FN_tuple_for_output(FnTupleCallBody body);
 
 uint fn_tuple_stack_prepare_size(FnTupleCallBody body);
 void fn_tuple_prepare_stack(FnTupleCallBody body, void *buffer, FnTuple *fn_in, FnTuple *fn_out);
@@ -31,14 +29,6 @@ void fn_tuple_prepare_stack(FnTupleCallBody body, void *buffer, FnTuple *fn_in,
   fn_tuple_destruct(fn_in); \
   fn_tuple_destruct(fn_out);
 
-#define FN_TUPLE_CALL_PREPARE_HEAP(body, fn_in, fn_out) \
-  FnTuple fn_in = FN_tuple_for_input(body); \
-  FnTuple fn_out = FN_tuple_for_output(body);
-
-#define FN_TUPLE_CALL_DESTRUCT_HEAP(body, fn_in, fn_out) \
-  FN_tuple_free(fn_in); \
-  FN_tuple_free(fn_out);
-
 #ifdef __cplusplus
 }
 
diff --git a/source/blender/functions/frontends/data_flow_nodes/unlinked_input_inserters.cpp b/source/blender/functions/frontends/data_flow_nodes/unlinked_input_inserters.cpp
index 6ee733b6c06..c0c7f371b0c 100644
--- a/source/blender/functions/frontends/data_flow_nodes/unlinked_input_inserters.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/unlinked_input_inserters.cpp
@@ -169,7 +169,11 @@ void ConstantInputsHandler::insert(VTreeDataGraphBuilder &builder,
 
   std::unique_ptr<TupleMeta> inputs_meta = std::unique_ptr<TupleMeta>(
       new TupleMeta(fn->output_types()));
-  std::unique_ptr<Tuple> inputs_tuple = std::unique_ptr<Tuple>(new Tuple(*inputs_meta));
+
+  auto inputs_tuple_data_init = std::unique_ptr<Array<char>>(
+      new Array<char>(inputs_meta->size_of_data_and_init()));
+  std::unique_ptr<Tuple> inputs_tuple = std::unique_ptr<Tuple>(
+      new Tuple(*inputs_meta, (void *)inputs_tuple_data_init->begin()));
 
   ConstantOutput &tuple_call_body = *fn->add_body<ConstantOutput>();
   ConstantOutputGen &build_ir_body = *fn->add_body<ConstantOutputGen>();
@@ -183,6 +187,7 @@ void ConstantInputsHandler::insert(VTreeDataGraphBuilder &builder,
   build_ir_body.set_tuple(inputs_tuple.get());
 
   fn->add_resource(std::move(inputs_meta), "Meta information for tuple");
+  fn->add_resource(std::move(inputs_tuple_data_init), "Buffer for tuple");
   fn->add_resource(std::move(inputs_tuple), "Tuple containing function inputs");
 
   BuilderNode *node = builder.insert_function(fn);
diff --git a/source/blender/modifiers/intern/MOD_functiondeform.c b/source/blender/modifiers/intern/MOD_functiondeform.c
index a4cbb1e80c6..47ee94fa171 100644
--- a/source/blender/modifiers/intern/MOD_functiondeform.c
+++ b/source/blender/modifiers/intern/MOD_functiondeform.c
@@ -78,7 +78,7 @@ static void do_deformation(FunctionDeformModifierData *fdmd, float (*vertexCos)[
   FnTupleCallBody body = FN_tuple_call_get(fn);
   BLI_assert(body);
 
-  FN_TUPLE_CALL_PREPARE_HEAP(body, fn_in, fn_out);
+  FN_TUPLE_CALL_PREPARE_STACK(body, fn_in, fn_out);
 
   clock_t start = clock();
 
@@ -97,7 +97,7 @@ static void do_deformation(FunctionDeformModifierData *fdmd, float (*vertexCos)[
   clock_t end = clock();
   printf("Time taken: %f ms\n", (float)(end - start) / (float)CLOCKS_PER_SEC * 1000.0f);
 
-  FN_TUPLE_CALL_DESTRUCT_HEAP(body, fn_in, fn_out);
+  FN_TUPLE_CALL_DESTRUCT_STACK(body, fn_in, fn_out);
   FN_function_free(fn);
 }
 
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index d85209f0fca..b45bdae0abe 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -124,7 +124,10 @@ class VTreeData {
     TupleCallBody &body = *body_ptr;
 
     FN_TUPLE_STACK_ALLOC(fn_in, body.meta_in());
-    auto fn_out = this->construct_new<Tuple>(body.meta_out());
+    FN::TupleMeta &meta_out = body.meta_out();
+    void *fn_out_data = m_allocator.allocate(meta_out.size_of_data());
+    bool *fn_out_init = (bool *)m_allocator.allocate(meta_out.size_of_init());
+    auto fn_out = this->construct_new<Tuple>(meta_out, fn_out_data, fn_out_init);
 
     body.call__setup_execution_context(fn_in, *fn_out);
     auto name_provider = this->construct_new<FunctionOutputNamesProvider>(body.owner());



More information about the Bf-blender-cvs mailing list