[Bf-blender-cvs] [85536c5e752] functions: use function bodies as references instead of pointers by default
Jacques Lucke
noreply at git.blender.org
Wed Jul 24 19:12:17 CEST 2019
Commit: 85536c5e752eae1823bc198d8f4867e11c910398
Author: Jacques Lucke
Date: Wed Jul 24 17:43:00 2019 +0200
Branches: functions
https://developer.blender.org/rB85536c5e752eae1823bc198d8f4867e11c910398
use function bodies as references instead of pointers by default
===================================================================
M source/blender/functions/backends/dependencies/dependencies-c.cpp
M source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
M source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
M source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
M source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
M source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
M source/blender/functions/backends/tuple_call/lazy_to_normal.cpp
M source/blender/functions/backends/tuple_call/tuple_call-c.cpp
M source/blender/functions/backends/tuple_call/tuple_call.hpp
M source/blender/functions/core/data_flow_graph.hpp
M source/blender/functions/core/function.hpp
M source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
M source/blender/functions/functions/auto_vectorization.cpp
M source/blender/simulations/bparticles/emitters.cpp
M source/blender/simulations/bparticles/events.cpp
M source/blender/simulations/bparticles/events.hpp
M source/blender/simulations/bparticles/forces.cpp
M source/blender/simulations/bparticles/forces.hpp
M source/blender/simulations/bparticles/inserters.cpp
M source/blender/simulations/bparticles/particle_function.cpp
M source/blender/simulations/bparticles/particle_function.hpp
M source/blender/simulations/bparticles/simulate.cpp
===================================================================
diff --git a/source/blender/functions/backends/dependencies/dependencies-c.cpp b/source/blender/functions/backends/dependencies/dependencies-c.cpp
index 89dd66b1263..7c6dac037e2 100644
--- a/source/blender/functions/backends/dependencies/dependencies-c.cpp
+++ b/source/blender/functions/backends/dependencies/dependencies-c.cpp
@@ -17,14 +17,17 @@ static void update_depsgraph(DepsNodeHandle *deps_node, DependencyComponents &de
void FN_function_update_dependencies(FnFunction fn_c, struct DepsNodeHandle *deps_node)
{
Function *fn = unwrap(fn_c);
- DepsBody *body = fn->body<DepsBody>();
- if (body) {
- MultiMap<uint, ID *> input_ids;
- MultiMap<uint, ID *> output_ids;
- DependencyComponents components;
-
- FunctionDepsBuilder builder(input_ids, output_ids, components);
- body->build_deps(builder);
- update_depsgraph(deps_node, components);
+ if (!fn->has_body<DepsBody>()) {
+ return;
}
+
+ DepsBody &body = fn->body<DepsBody>();
+
+ MultiMap<uint, ID *> input_ids;
+ MultiMap<uint, ID *> output_ids;
+ DependencyComponents components;
+
+ FunctionDepsBuilder builder(input_ids, output_ids, components);
+ body.build_deps(builder);
+ update_depsgraph(deps_node, components);
}
diff --git a/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp b/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
index daba369be26..00d337eaf9c 100644
--- a/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
+++ b/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
@@ -23,7 +23,7 @@ class FGraphDependencies : public DepsBody {
}
Vector<ID *> find_deps_and_outputs(DFGraphSocket socket,
- FunctionDepsBuilder &parent_builder) const
+ FunctionDepsBuilder &parent_builder) const
{
if (m_fgraph.inputs().contains(socket)) {
return parent_builder.get_input_ids(m_fgraph.inputs().index(socket));
@@ -34,14 +34,7 @@ class FGraphDependencies : public DepsBody {
else {
uint node_id = m_graph->node_id_of_output(socket);
SharedFunction &fn = m_graph->function_of_node(node_id);
- DepsBody *body = fn->body<DepsBody>();
- if (body == nullptr) {
- for (auto input_socket : m_graph->inputs_of_node(node_id)) {
- this->find_deps_and_outputs(input_socket, parent_builder);
- }
- return {};
- }
- else {
+ if (fn->has_body<DepsBody>()) {
MultiMap<uint, ID *> input_ids;
for (uint i = 0; i < fn->input_amount(); i++) {
@@ -53,9 +46,16 @@ class FGraphDependencies : public DepsBody {
MultiMap<uint, ID *> output_ids;
FunctionDepsBuilder builder(input_ids, output_ids, parent_builder.dependency_components());
- body->build_deps(builder);
+ DepsBody &body = fn->body<DepsBody>();
+ body.build_deps(builder);
return output_ids.lookup_default(m_graph->index_of_output(socket));
}
+ else {
+ for (auto input_socket : m_graph->inputs_of_node(node_id)) {
+ this->find_deps_and_outputs(input_socket, parent_builder);
+ }
+ return {};
+ }
}
}
};
diff --git a/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp b/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
index 5e820b950b1..f836b4c621b 100644
--- a/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
+++ b/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
@@ -149,9 +149,8 @@ class BuildGraphIR : public LLVMBuildIRBody {
CodeInterface sub_interface(
input_values, output_values, interface.context_ptr(), interface.function_ir_cache());
- BLI_assert(fn->has_body<LLVMBuildIRBody>());
- auto *body = fn->body<LLVMBuildIRBody>();
- body->build_ir(builder, sub_interface, settings);
+ auto &body = fn->body<LLVMBuildIRBody>();
+ body.build_ir(builder, sub_interface, settings);
if (settings.maintain_stack()) {
this->pop_stack_frames_for_node(builder, interface.context_ptr());
diff --git a/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp b/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
index 62c685591d4..653a9737706 100644
--- a/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
+++ b/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
@@ -44,10 +44,10 @@ static llvm::Value *build__stack_allocate_ExecutionContext(CodeBuilder &builder)
class TupleCallLLVM : public LLVMBuildIRBody {
private:
- TupleCallBody *m_tuple_call;
+ TupleCallBody &m_tuple_call;
public:
- TupleCallLLVM(TupleCallBody *tuple_call) : m_tuple_call(tuple_call)
+ TupleCallLLVM(TupleCallBody &tuple_call) : m_tuple_call(tuple_call)
{
}
@@ -55,7 +55,7 @@ class TupleCallLLVM : public LLVMBuildIRBody {
CodeInterface &interface,
const BuildIRSettings &settings) const override
{
- Function *fn = m_tuple_call->owner();
+ Function *fn = m_tuple_call.owner();
/* Find relevant type information. */
auto input_type_infos = fn->input_extensions<LLVMTypeInfo>();
@@ -86,7 +86,7 @@ class TupleCallLLVM : public LLVMBuildIRBody {
ArrayRef<LLVMTypeInfo *> input_type_infos,
ArrayRef<LLVMTypeInfo *> output_type_infos) const
{
- Function *fn = m_tuple_call->owner();
+ Function *fn = m_tuple_call.owner();
Vector<llvm::Type *> input_types = builder.types_of_values(interface.inputs());
if (settings.maintain_stack()) {
@@ -133,8 +133,8 @@ class TupleCallLLVM : public LLVMBuildIRBody {
CodeBuilder builder(bb);
/* Allocate temporary stack buffer for tuple input and output. */
- auto &meta_in = m_tuple_call->meta_in();
- auto &meta_out = m_tuple_call->meta_out();
+ auto &meta_in = m_tuple_call.meta_in();
+ auto &meta_out = m_tuple_call.meta_out();
llvm::Value *tuple_in_data_ptr = builder.CreateAllocaBytes_BytePtr(meta_in->size_of_data());
tuple_in_data_ptr->setName("tuple_in_data");
llvm::Value *tuple_out_data_ptr = builder.CreateAllocaBytes_BytePtr(meta_out->size_of_data());
@@ -158,11 +158,13 @@ class TupleCallLLVM : public LLVMBuildIRBody {
}
/* Execute tuple call body. */
- builder.CreateCallPointer(
- (void *)run_TupleCallBody,
- {builder.getVoidPtr(m_tuple_call), tuple_in_data_ptr, tuple_out_data_ptr, context_ptr},
- builder.getVoidTy(),
- "Run tuple call body");
+ builder.CreateCallPointer((void *)run_TupleCallBody,
+ {builder.getVoidPtr((void *)&m_tuple_call),
+ tuple_in_data_ptr,
+ tuple_out_data_ptr,
+ context_ptr},
+ builder.getVoidTy(),
+ "Run tuple call body");
/* Read output values from buffer. */
llvm::Value *output = llvm::UndefValue::get(output_type);
diff --git a/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp b/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
index b3e42a96898..19ebcd9fc33 100644
--- a/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
+++ b/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
@@ -27,7 +27,7 @@ static llvm::Value *lookup_tuple_address(CodeBuilder &builder,
static llvm::Function *insert_tuple_call_function(SharedFunction &fn, llvm::Module *module)
{
llvm::LLVMContext &context = module->getContext();
- LLVMBuildIRBody *body = fn->body<LLVMBuildIRBody>();
+ LLVMBuildIRBody &body = fn->body<LLVMBuildIRBody>();
llvm::Type *void_ty = llvm::Type::getVoidTy(context);
llvm::Type *void_ptr_ty = void_ty->getPointerTo();
@@ -76,7 +76,7 @@ static llvm::Function *insert_tuple_call_function(SharedFunction &fn, llvm::Modu
BuildIRSettings settings;
FunctionIRCache function_cache;
CodeInterface interface(input_values, output_values, context_ptr, function_cache);
- body->build_ir(builder, interface, settings);
+ body.build_ir(builder, interface, settings);
for (uint i = 0; i < output_values.size(); i++) {
llvm::Value *value_byte_addr = lookup_tuple_address(builder, fn_out_data, fn_out_offsets, i);
diff --git a/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp b/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
index 83ca248b426..f0ffaff8de2 100644
--- a/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
+++ b/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
@@ -69,14 +69,14 @@ class ExecuteFGraph : public TupleCallBody {
for (uint node_id : m_graph->node_ids()) {
SharedFunction &fn = m_graph->function_of_node(node_id);
- TupleCallBodyBase *body;
- bool is_lazy_body;
+ TupleCallBodyBase *body = nullptr;
+ bool is_lazy_body = false;
if (fn->has_body<LazyInTupleCallBody>()) {
- body = fn->body<LazyInTupleCallBody>();
+ body = &fn->body<LazyInTupleCallBody>();
is_lazy_body = true;
}
- else {
- body = fn->body<TupleCallBody>();
+ else if (fn->has_body<TupleCallBody>()) {
+ body = &fn->body<TupleCallBody>();
is_lazy_body = false;
}
@@ -586,7 +586,7 @@ class ExecuteFGraph_Simple : public TupleCallBody {
else {
uint node_id = m_graph->node_id_of_output(socket);
SharedFunction &fn = m_graph->function_of_node(node_id);
- TupleCallBody *body = fn->body<TupleCallBody>();
+ TupleCallBody &body = fn->body<TupleCallBody>();
FN_TUPLE_CALL_ALLOC_TUPLES(body, tmp_in, tmp_out);
@@ -597,7 +597,7 @@ class ExecuteFGraph_Simple : public TupleCallBody {
}
SourceInfoStackFrame node_frame(m_graph->source_info_of_node(node_id));
- body->call__setup_stack(tmp_in, tmp_out, ctx, node_frame);
+ body.call__setup_stack(tmp_in, tmp_out, ctx, node_frame);
Tuple::copy_element(tmp_out, m_graph->index_of_output(socket.id()), out, out_index);
}
diff --git a/source/blender/functions/backends/tuple_call/lazy_to_normal.cpp b/source/blend
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list