[Bf-blender-cvs] [f8db21040de] nodes_playground: testing
Jacques Lucke
noreply at git.blender.org
Sun Jan 6 17:25:12 CET 2019
Commit: f8db21040ded2638a512965f906f56ccfa2a94b2
Author: Jacques Lucke
Date: Fri Nov 30 16:19:36 2018 +0100
Branches: nodes_playground
https://developer.blender.org/rBf8db21040ded2638a512965f906f56ccfa2a94b2
testing
===================================================================
M release/scripts/startup/bl_ui/properties_data_modifier.py
M source/blender/makesrna/intern/rna_modifier.c
M source/blender/modifiers/CMakeLists.txt
M source/blender/modifiers/intern/MOD_custom.c
A source/blender/modifiers/intern/MOD_custom_compiler.cc
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 3d4f3037a84..68b5b42c4fa 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1626,6 +1626,9 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.prop(md, "thresh", text="Threshold")
col.prop(md, "face_influence")
+ def CUSTOM(self, layout, ob, md):
+ layout.label(text="Hello World")
+
class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
bl_label = "Modifiers"
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 0bd9d9accb3..144c1721673 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -436,6 +436,8 @@ static StructRNA *rna_Modifier_refine(struct PointerRNA *ptr)
return &RNA_SurfaceDeformModifier;
case eModifierType_WeightedNormal:
return &RNA_WeightedNormalModifier;
+ case eModifierType_Custom:
+ return &RNA_CustomModifier;
/* Default */
case eModifierType_None:
case eModifierType_ShapeKey:
diff --git a/source/blender/modifiers/CMakeLists.txt b/source/blender/modifiers/CMakeLists.txt
index d9a89b30e67..d47f737b121 100644
--- a/source/blender/modifiers/CMakeLists.txt
+++ b/source/blender/modifiers/CMakeLists.txt
@@ -42,6 +42,7 @@ set(INC
set(INC_SYS
${ZLIB_INCLUDE_DIRS}
+ /usr/lib/llvm-6.0/include
)
set(SRC
@@ -55,6 +56,7 @@ set(SRC
intern/MOD_collision.c
intern/MOD_correctivesmooth.c
intern/MOD_custom.c
+ intern/MOD_custom_compiler.cc
intern/MOD_curve.c
intern/MOD_datatransfer.c
intern/MOD_decimate.c
diff --git a/source/blender/modifiers/intern/MOD_custom.c b/source/blender/modifiers/intern/MOD_custom.c
index 2ab874f29ee..6f88f0e6285 100644
--- a/source/blender/modifiers/intern/MOD_custom.c
+++ b/source/blender/modifiers/intern/MOD_custom.c
@@ -43,10 +43,13 @@
#include "DEG_depsgraph.h"
+void test_llvm(void);
+
static Mesh *applyModifier(
- ModifierData *md, const ModifierEvalContext *ctx,
- Mesh *mesh)
+ ModifierData *UNUSED(md), const ModifierEvalContext *UNUSED(ctx),
+ Mesh *UNUSED(mesh))
{
+ test_llvm();
Mesh *new_mesh = BKE_mesh_new_nomain(1, 0, 0, 0, 0);
new_mesh->mvert[0].co[0] = 1;
new_mesh->mvert[0].co[1] = 2;
@@ -54,7 +57,7 @@ static Mesh *applyModifier(
return new_mesh;
}
-static void initData(ModifierData *md)
+static void initData(ModifierData *UNUSED(md))
{
}
diff --git a/source/blender/modifiers/intern/MOD_custom_compiler.cc b/source/blender/modifiers/intern/MOD_custom_compiler.cc
new file mode 100644
index 00000000000..376711c2597
--- /dev/null
+++ b/source/blender/modifiers/intern/MOD_custom_compiler.cc
@@ -0,0 +1,58 @@
+#include "llvm/IR/IRBuilder.h"
+#include "llvm/IR/Verifier.h"
+#include "llvm/Support/TargetSelect.h"
+#include "llvm/ExecutionEngine/ExecutionEngine.h"
+
+#include <vector>
+#include <memory>
+
+extern "C" {
+ void test_llvm(void);
+}
+
+void test_llvm() {
+ llvm::LLVMContext *context = new llvm::LLVMContext();
+ llvm::Module *module = new llvm::Module("test", *context);
+
+ std::vector<llvm::Type *> arg_types = {
+ llvm::Type::getInt32Ty(*context),
+ llvm::Type::getInt32Ty(*context)};
+
+ llvm::FunctionType *ftype = llvm::FunctionType::get(
+ llvm::Type::getInt32Ty(*context), arg_types, false);
+
+ llvm::Function *func = llvm::Function::Create(
+ ftype, llvm::GlobalValue::LinkageTypes::ExternalLinkage, "my_func", module);
+
+ llvm::BasicBlock *bb = llvm::BasicBlock::Create(*context, "entry", func);
+
+ llvm::IRBuilder<> builder(*context);
+ builder.SetInsertPoint(bb);
+
+ llvm::Argument *arg0 = func->arg_begin() + 0;
+ llvm::Argument *arg1 = func->arg_begin() + 1;
+
+ llvm::Value *result = builder.CreateAdd(arg0, arg1, "result");
+ builder.CreateRet(result);
+
+ llvm::verifyFunction(*func, &llvm::outs());
+ llvm::verifyModule(*module, &llvm::outs());
+
+ module->print(llvm::outs(), nullptr);
+
+ llvm::InitializeNativeTarget();
+ llvm::InitializeNativeTargetAsmPrinter();
+ llvm::InitializeNativeTargetAsmParser();
+
+ llvm::ExecutionEngine *ee = llvm::EngineBuilder(std::unique_ptr<llvm::Module>(module)).create();
+ ee->finalizeObject();
+
+ int (*add)(int, int) = (int (*)(int, int))ee->getFunctionAddress("my_func");
+ printf("Pointer: %p\n", add);
+ printf("Result: %d\n", add(43, 10));
+}
+
+typedef llvm::Value *(*InputGetter)(llvm::IRBuilder<> *builder, int index);
+typedef void (*OutputSetter)(llvm::IRBuilder<> *builder, int index, llvm::Value *value);
+typedef llvm::Value *(*RequiredGetter)(llvm::IRBuilder<> *builder, int index);
+typedef void (*GenNodeCode)(void *data, InputGetter getters[], OutputSetter setters[], RequiredGetter required[]);
More information about the Bf-blender-cvs
mailing list