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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to