[Bf-blender-cvs] [6c496908471] functions: also allow heap allocation for tuples in C
Jacques Lucke
noreply at git.blender.org
Sun Mar 10 13:14:36 CET 2019
Commit: 6c496908471f34daf783f3553f91f86b77501cb5
Author: Jacques Lucke
Date: Sun Mar 10 13:11:02 2019 +0100
Branches: functions
https://developer.blender.org/rB6c496908471f34daf783f3553f91f86b77501cb5
also allow heap allocation for tuples in C
===================================================================
M source/blender/functions/FN-C.h
M source/blender/functions/frontends/data_flow_nodes/function_generation.cpp
M source/blender/modifiers/intern/MOD_displace.c
M source/blender/modifiers/intern/MOD_functiondeform.c
===================================================================
diff --git a/source/blender/functions/FN-C.h b/source/blender/functions/FN-C.h
index e97b8743959..c09c4c95281 100644
--- a/source/blender/functions/FN-C.h
+++ b/source/blender/functions/FN-C.h
@@ -77,6 +77,13 @@ void fn_tuple_destruct(FnTuple tuple);
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);
/*************** Dependencies ****************/
diff --git a/source/blender/functions/frontends/data_flow_nodes/function_generation.cpp b/source/blender/functions/frontends/data_flow_nodes/function_generation.cpp
index b2493657b3f..45f289ae3a7 100644
--- a/source/blender/functions/frontends/data_flow_nodes/function_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/function_generation.cpp
@@ -19,9 +19,9 @@ namespace FN { namespace DataFlowNodes {
auto fn = SharedFunction::New(btree->id.name, fgraph.signature());
fgraph_add_DependenciesBody(fn, fgraph);
- fgraph_add_TupleCallBody(fn, fgraph);
- //fgraph_add_LLVMBuildIRBody(fn, fgraph);
- //derive_TupleCallBody_from_LLVMBuildIRBody(fn, *(new llvm::LLVMContext()));
+ //fgraph_add_TupleCallBody(fn, fgraph);
+ fgraph_add_LLVMBuildIRBody(fn, fgraph);
+ derive_TupleCallBody_from_LLVMBuildIRBody(fn, *(new llvm::LLVMContext()));
return fn;
}
diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c
index 0df669a8f6d..f472f5c8d85 100644
--- a/source/blender/modifiers/intern/MOD_displace.c
+++ b/source/blender/modifiers/intern/MOD_displace.c
@@ -27,6 +27,8 @@
#include "BLI_math.h"
#include "BLI_task.h"
+#include "PIL_time_utildefines.h"
+
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
@@ -221,8 +223,9 @@ static void displaceModifier_do_task(
if (data->calc_weight_func) {
FnTupleCallBody body = FN_tuple_call_get(data->calc_weight_func);
- FnTuple fn_in = FN_tuple_for_input(body);
- FnTuple fn_out = FN_tuple_for_output(body);
+ BLI_assert(body);
+
+ FN_TUPLE_CALL_PREPARE_STACK(body, fn_in, fn_out);
FN_tuple_set_float_vector_3(fn_in, 0, vertexCos[iter]);
FN_tuple_set_int32(fn_in, 1, iter);
@@ -231,8 +234,7 @@ static void displaceModifier_do_task(
weight = 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);
}
if (weight == 0.0f) {
@@ -390,6 +392,8 @@ static void displaceModifier_do(
}
data.calc_weight_func = getCurrentFunction(dmd);
+ TIMEIT_START(displace_timer);
+
ParallelRangeSettings settings;
BLI_parallel_range_settings_defaults(&settings);
settings.use_threading = (numVerts > 512);
@@ -398,6 +402,8 @@ static void displaceModifier_do(
displaceModifier_do_task,
&settings);
+ TIMEIT_END(displace_timer);
+
if (data.pool != NULL) {
BKE_image_pool_free(data.pool);
}
diff --git a/source/blender/modifiers/intern/MOD_functiondeform.c b/source/blender/modifiers/intern/MOD_functiondeform.c
index d483bbf7799..5f8dd89f69b 100644
--- a/source/blender/modifiers/intern/MOD_functiondeform.c
+++ b/source/blender/modifiers/intern/MOD_functiondeform.c
@@ -80,7 +80,7 @@ static void do_deformation(
FnTupleCallBody body = FN_tuple_call_get(fn);
BLI_assert(body);
- FN_TUPLE_CALL_PREPARE_STACK(body, fn_in, fn_out);
+ FN_TUPLE_CALL_PREPARE_HEAP(body, fn_in, fn_out);
clock_t start = clock();
@@ -97,7 +97,7 @@ static void do_deformation(
clock_t end = clock();
printf("Time taken: %f s\n", (float)(end - start) / (float)CLOCKS_PER_SEC);
- FN_TUPLE_CALL_DESTRUCT_STACK(body, fn_in, fn_out);
+ FN_TUPLE_CALL_DESTRUCT_HEAP(body, fn_in, fn_out);
FN_function_free(fn);
}
More information about the Bf-blender-cvs
mailing list