[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