[Bf-blender-cvs] [0be2c2a] object_nodes: Use the LLVM backend for modifier nodes.
Lukas Tönne
noreply at git.blender.org
Thu Jun 23 13:47:56 CEST 2016
Commit: 0be2c2a89a28f3d22c2b150cd135274db32be51a
Author: Lukas Tönne
Date: Thu Jun 23 13:43:25 2016 +0200
Branches: object_nodes
https://developer.blender.org/rB0be2c2a89a28f3d22c2b150cd135274db32be51a
Use the LLVM backend for modifier nodes.
This currently fails, because the actual mesh nodes are not yet implemented
in the LLVM backend.
===================================================================
M source/blender/blenkernel/intern/DerivedMesh.c
M source/blender/blenvm/BVM_api.h
M source/blender/blenvm/intern/bvm_api.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index db56c8d..7647394 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -1704,17 +1704,17 @@ static DerivedMesh *mesh_calc_modifier_nodes(Scene *UNUSED(scene), Object *ob, b
Mesh *me = ob->data;
DerivedMesh *dm, *result;
- struct BVMFunction *fn = BVM_gen_modifier_function_bvm(ntree, true);
+ struct BVMFunction *fn = BVM_gen_modifier_function_llvm(ntree, true);
if (fn) {
struct BVMEvalGlobals *globals = BVM_globals_create();
BVM_globals_add_nodetree_relations(globals, ntree);
struct BVMEvalContext *context = BVM_context_create();
- dm = BVM_eval_modifier_bvm(globals, context, fn, ob, me);
+ dm = BVM_eval_modifier_llvm(globals, context, fn, ob, me);
BVM_context_free(context);
BVM_globals_free(globals);
- BVM_function_bvm_release(fn);
+ BVM_function_llvm_release(fn);
}
/* XXX this is stupid, but currently required because of
diff --git a/source/blender/blenvm/BVM_api.h b/source/blender/blenvm/BVM_api.h
index db83831..ee1bdcf 100644
--- a/source/blender/blenvm/BVM_api.h
+++ b/source/blender/blenvm/BVM_api.h
@@ -177,10 +177,15 @@ struct BVMFunction *BVM_gen_modifier_function_llvm(struct bNodeTree *btree, bool
void BVM_debug_modifier_nodes(struct bNodeTree *btree, FILE *debug_file, const char *label, BVMDebugMode mode);
struct DerivedMesh *BVM_eval_modifier_bvm(struct BVMEvalGlobals *globals,
- struct BVMEvalContext *context,
- struct BVMFunction *fn,
- struct Object *ob,
- struct Mesh *base_mesh);
+ struct BVMEvalContext *context,
+ struct BVMFunction *fn,
+ struct Object *ob,
+ struct Mesh *base_mesh);
+struct DerivedMesh *BVM_eval_modifier_llvm(struct BVMEvalGlobals *globals,
+ struct BVMEvalContext *context,
+ struct BVMFunction *fn,
+ struct Object *ob,
+ struct Mesh *base_mesh);
/* ------------------------------------------------------------------------- */
diff --git a/source/blender/blenvm/intern/bvm_api.cc b/source/blender/blenvm/intern/bvm_api.cc
index 4e3eb14..32a51a4 100644
--- a/source/blender/blenvm/intern/bvm_api.cc
+++ b/source/blender/blenvm/intern/bvm_api.cc
@@ -756,12 +756,26 @@ void BVM_eval_texture_llvm(struct BVMEvalGlobals *_globals, struct BVMEvalContex
/* ------------------------------------------------------------------------- */
+namespace blenvm {
+
+typedef void (*ModNodesFunc)(const struct EvalGlobals *globals,
+ mesh_ptr *result,
+ struct PointerRNA *object_ptr, struct PointerRNA *base_mesh_ptr);
+
+}
+
struct BVMFunction *BVM_gen_modifier_function_bvm(struct bNodeTree *btree, bool use_cache)
{
using namespace blenvm;
return gen_function_bvm(btree, use_cache, modifier_inputs, modifier_outputs);
}
+struct BVMFunction *BVM_gen_modifier_function_llvm(struct bNodeTree *btree, bool use_cache)
+{
+ using namespace blenvm;
+ return gen_function_llvm(btree, use_cache, modifier_inputs, modifier_outputs);
+}
+
void BVM_debug_modifier_nodes(struct bNodeTree *btree, FILE *debug_file, const char *label, BVMDebugMode mode)
{
using namespace blenvm;
@@ -795,6 +809,39 @@ struct DerivedMesh *BVM_eval_modifier_bvm(struct BVMEvalGlobals *globals,
return dm;
}
+struct DerivedMesh *BVM_eval_modifier_llvm(struct BVMEvalGlobals *_globals,
+ struct BVMEvalContext *UNUSED(ctx),
+ struct BVMFunction *fn,
+ struct Object *object,
+ struct Mesh *base_mesh)
+{
+ using namespace blenvm;
+
+ EvalGlobals *globals = _GLOBALS(_globals);
+ if (globals == NULL)
+ globals = eval_globals_default();
+
+ mesh_ptr result;
+
+#ifdef WITH_LLVM
+ PointerRNA object_ptr, base_mesh_ptr;
+ RNA_id_pointer_create((ID *)object, &object_ptr);
+ RNA_id_pointer_create((ID *)base_mesh, &base_mesh_ptr);
+
+ ModNodesFunc fp = (ModNodesFunc)_FUNC_LLVM(fn)->ptr();
+
+ fp(globals, &result, &object_ptr, &base_mesh_ptr);
+#else
+ UNUSED_VARS(fn, globals, object, base_mesh);
+ result.set(CDDM_new(0, 0, 0, 0, 0));
+#endif
+
+ DerivedMesh *dm = result.get();
+ /* destroy the pointer variable */
+ result.ptr().reset();
+ return dm;
+}
+
/* ------------------------------------------------------------------------- */
struct BVMFunction *BVM_gen_dupli_function_bvm(struct bNodeTree *btree, bool use_cache)
More information about the Bf-blender-cvs
mailing list