[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