[Bf-blender-cvs] [1313440] object_nodes: Debug representation of generated bvm code.
Lukas Tönne
noreply at git.blender.org
Sun Jan 3 23:59:43 CET 2016
Commit: 1313440c59d734a4c81ecb7c2cb97398ef4f9e91
Author: Lukas Tönne
Date: Sun Jan 3 19:01:08 2016 +0100
Branches: object_nodes
https://developer.blender.org/rB1313440c59d734a4c81ecb7c2cb97398ef4f9e91
Debug representation of generated bvm code.
A specialized compiler variant is added that turns generated code
into a graphviz diagram of the instruction lists.
===================================================================
M source/blender/blenvm/BVM_api.h
M source/blender/blenvm/bvm/bvm_opcode.h
M source/blender/blenvm/compile/CMakeLists.txt
M source/blender/blenvm/compile/bvm_codegen.h
A source/blender/blenvm/compile/bvm_codegen_debug.cc
M source/blender/blenvm/intern/bvm_api.cc
M source/blender/blenvm/util/bvm_util_debug.h
M source/blender/makesrna/intern/rna_nodetree.c
M source/blender/makesrna/intern/rna_object_api.c
M source/blender/makesrna/intern/rna_texture_api.c
===================================================================
diff --git a/source/blender/blenvm/BVM_api.h b/source/blender/blenvm/BVM_api.h
index ccc25f6..bcd82db 100644
--- a/source/blender/blenvm/BVM_api.h
+++ b/source/blender/blenvm/BVM_api.h
@@ -115,13 +115,19 @@ int BVM_get_id_key(struct ID *id);
struct BVMEvalContext *BVM_context_create(void);
void BVM_context_free(struct BVMEvalContext *context);
+typedef enum BVMDebugMode {
+ BVM_DEBUG_NODES,
+ BVM_DEBUG_NODES_UNOPTIMIZED,
+ BVM_DEBUG_CODEGEN,
+} BVMDebugMode;
+
/* ------------------------------------------------------------------------- */
struct Object;
struct EffectedPoint;
struct BVMFunction *BVM_gen_forcefield_function(struct bNodeTree *btree);
-void BVM_debug_forcefield_nodes(struct bNodeTree *btree, FILE *debug_file, bool finalize);
+void BVM_debug_forcefield_nodes(struct bNodeTree *btree, FILE *debug_file, const char *label, BVMDebugMode mode);
void BVM_eval_forcefield(struct BVMEvalGlobals *globals, struct BVMEvalContext *context, struct BVMFunction *fn,
struct Object *effob, const struct EffectedPoint *point, float force[3], float impulse[3]);
@@ -132,7 +138,7 @@ struct Tex;
struct TexResult;
struct BVMFunction *BVM_gen_texture_function(struct bNodeTree *btree);
-void BVM_debug_texture_nodes(struct bNodeTree *btree, FILE *debug_file, bool finalize);
+void BVM_debug_texture_nodes(struct bNodeTree *btree, FILE *debug_file, const char *label, BVMDebugMode mode);
void BVM_eval_texture(struct BVMEvalContext *context, struct BVMFunction *fn,
struct TexResult *target,
@@ -145,7 +151,7 @@ struct DerivedMesh;
struct Mesh;
struct BVMFunction *BVM_gen_modifier_function(struct bNodeTree *btree);
-void BVM_debug_modifier_nodes(struct bNodeTree *btree, FILE *debug_file, bool finalize);
+void BVM_debug_modifier_nodes(struct bNodeTree *btree, FILE *debug_file, const char *label, BVMDebugMode mode);
struct DerivedMesh *BVM_eval_modifier(struct BVMEvalGlobals *globals,
struct BVMEvalContext *context,
@@ -158,7 +164,7 @@ struct DerivedMesh *BVM_eval_modifier(struct BVMEvalGlobals *globals,
struct DupliContainer;
struct BVMFunction *BVM_gen_dupli_function(struct bNodeTree *btree);
-void BVM_debug_dupli_nodes(struct bNodeTree *btree, FILE *debug_file, bool finalize);
+void BVM_debug_dupli_nodes(struct bNodeTree *btree, FILE *debug_file, const char *label, BVMDebugMode mode);
void BVM_eval_dupli(struct BVMEvalGlobals *globals,
struct BVMEvalContext *context,
diff --git a/source/blender/blenvm/bvm/bvm_opcode.h b/source/blender/blenvm/bvm/bvm_opcode.h
index 200c8ce..cf9de60 100644
--- a/source/blender/blenvm/bvm/bvm_opcode.h
+++ b/source/blender/blenvm/bvm/bvm_opcode.h
@@ -4,16 +4,16 @@
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * of the License) \ or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
+ * This program is distributed in the hope that it will be useful) \
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * along with this program; if not) \ write to the Free Software Foundation) \
+ * Inc.) \ 51 Franklin Street) \ Fifth Floor) \ Boston) \ MA 02110-1301) \ USA.
*
* The Original Code is Copyright (C) Blender Foundation.
* All rights reserved.
@@ -32,125 +32,151 @@
* \ingroup bvm
*/
+extern "C" {
+#include "BLI_utildefines.h"
+}
+
namespace bvm {
+/* Macro to handle all opcodes.
+ * Expects DEF_OPCODE to be defined locally for this purpose.
+ */
+/*************************************/
+#define BVM_DEFINE_OPCODES \
+ DEF_OPCODE(NOOP) \
+ DEF_OPCODE(VALUE_FLOAT) \
+ DEF_OPCODE(VALUE_FLOAT3) \
+ DEF_OPCODE(VALUE_FLOAT4) \
+ DEF_OPCODE(VALUE_INT) \
+ DEF_OPCODE(VALUE_MATRIX44) \
+ DEF_OPCODE(VALUE_STRING) \
+ DEF_OPCODE(VALUE_POINTER) \
+ DEF_OPCODE(VALUE_MESH) \
+ DEF_OPCODE(VALUE_DUPLIS) \
+ \
+ DEF_OPCODE(FLOAT_TO_INT) \
+ DEF_OPCODE(INT_TO_FLOAT) \
+ DEF_OPCODE(SET_FLOAT3) \
+ DEF_OPCODE(GET_ELEM_FLOAT3) \
+ DEF_OPCODE(SET_FLOAT4) \
+ DEF_OPCODE(GET_ELEM_FLOAT4) \
+ DEF_OPCODE(MATRIX44_TO_LOC) \
+ DEF_OPCODE(MATRIX44_TO_EULER) \
+ DEF_OPCODE(MATRIX44_TO_AXISANGLE) \
+ DEF_OPCODE(MATRIX44_TO_SCALE) \
+ DEF_OPCODE(LOC_TO_MATRIX44) \
+ DEF_OPCODE(EULER_TO_MATRIX44) \
+ DEF_OPCODE(AXISANGLE_TO_MATRIX44) \
+ DEF_OPCODE(SCALE_TO_MATRIX44) \
+ \
+ DEF_OPCODE(INIT_MESH_PTR) \
+ DEF_OPCODE(RELEASE_MESH_PTR) \
+ DEF_OPCODE(INIT_DUPLIS_PTR) \
+ DEF_OPCODE(RELEASE_DUPLIS_PTR) \
+ \
+ DEF_OPCODE(ADD_FLOAT) \
+ DEF_OPCODE(SUB_FLOAT) \
+ DEF_OPCODE(MUL_FLOAT) \
+ DEF_OPCODE(DIV_FLOAT) \
+ DEF_OPCODE(SINE) \
+ DEF_OPCODE(COSINE) \
+ DEF_OPCODE(TANGENT) \
+ DEF_OPCODE(ARCSINE) \
+ DEF_OPCODE(ARCCOSINE) \
+ DEF_OPCODE(ARCTANGENT) \
+ DEF_OPCODE(POWER) \
+ DEF_OPCODE(LOGARITHM) \
+ DEF_OPCODE(MINIMUM) \
+ DEF_OPCODE(MAXIMUM) \
+ DEF_OPCODE(ROUND) \
+ DEF_OPCODE(LESS_THAN) \
+ DEF_OPCODE(GREATER_THAN) \
+ DEF_OPCODE(MODULO) \
+ DEF_OPCODE(ABSOLUTE) \
+ DEF_OPCODE(CLAMP) \
+ DEF_OPCODE(SQRT) \
+ \
+ DEF_OPCODE(ADD_FLOAT3) \
+ DEF_OPCODE(SUB_FLOAT3) \
+ DEF_OPCODE(MUL_FLOAT3) \
+ DEF_OPCODE(DIV_FLOAT3) \
+ DEF_OPCODE(MUL_FLOAT3_FLOAT) \
+ DEF_OPCODE(DIV_FLOAT3_FLOAT) \
+ DEF_OPCODE(AVERAGE_FLOAT3) \
+ DEF_OPCODE(DOT_FLOAT3) \
+ DEF_OPCODE(CROSS_FLOAT3) \
+ DEF_OPCODE(NORMALIZE_FLOAT3) \
+ DEF_OPCODE(LENGTH_FLOAT3) \
+ \
+ DEF_OPCODE(ADD_MATRIX44) \
+ DEF_OPCODE(SUB_MATRIX44) \
+ DEF_OPCODE(MUL_MATRIX44) \
+ DEF_OPCODE(MUL_MATRIX44_FLOAT) \
+ DEF_OPCODE(DIV_MATRIX44_FLOAT) \
+ DEF_OPCODE(NEGATE_MATRIX44) \
+ DEF_OPCODE(TRANSPOSE_MATRIX44) \
+ DEF_OPCODE(INVERT_MATRIX44) \
+ DEF_OPCODE(ADJOINT_MATRIX44) \
+ DEF_OPCODE(DETERMINANT_MATRIX44) \
+ \
+ DEF_OPCODE(MUL_MATRIX44_FLOAT3) \
+ DEF_OPCODE(MUL_MATRIX44_FLOAT4) \
+ \
+ DEF_OPCODE(MIX_RGB) \
+ \
+ DEF_OPCODE(INT_TO_RANDOM) \
+ DEF_OPCODE(FLOAT_TO_RANDOM) \
+ \
+ DEF_OPCODE(TEX_PROC_VORONOI) \
+ DEF_OPCODE(TEX_PROC_MAGIC) \
+ DEF_OPCODE(TEX_PROC_MARBLE) \
+ DEF_OPCODE(TEX_PROC_CLOUDS) \
+ DEF_OPCODE(TEX_PROC_WOOD) \
+ DEF_OPCODE(TEX_PROC_MUSGRAVE) \
+ DEF_OPCODE(TEX_PROC_STUCCI) \
+ DEF_OPCODE(TEX_PROC_DISTNOISE) \
+ \
+ DEF_OPCODE(OBJECT_LOOKUP) \
+ DEF_OPCODE(OBJECT_TRANSFORM) \
+ \
+ DEF_OPCODE(EFFECTOR_TRANSFORM) \
+ DEF_OPCODE(EFFECTOR_CLOSEST_POINT) \
+ \
+ DEF_OPCODE(MESH_LOAD) \
+ DEF_OPCODE(MESH_COMBINE) \
+ DEF_OPCODE(MESH_ARRAY) \
+ DEF_OPCODE(MESH_DISPLACE) \
+ DEF_OPCODE(MESH_BOOLEAN) \
+ \
+ DEF_OPCODE(CURVE_PATH) \
+ \
+ DEF_OPCODE(MAKE_DUPLI) \
+ DEF_OPCODE(DUPLIS_COMBINE) \
+ \
+ DEF_OPCODE(END)
+/*************************************/
+
+
+/* Define the main enum for opcodes */
+#define DEF_OPCODE(op) \
+ OP_##op,
enum OpCode {
- OP_NOOP = 0,
- OP_VALUE_FLOAT,
- OP_VALUE_FLOAT3,
- OP_VALUE_FLOAT4,
- OP_VALUE_INT,
- OP_VALUE_MATRIX44,
- OP_VALUE_STRING,
- OP_VALUE_POINTER,
- OP_VALUE_MESH,
- OP_VALUE_DUPLIS,
-
- OP_FLOAT_TO_INT,
- OP_INT_TO_FLOAT,
- OP_SET_FLOAT3,
- OP_GET_ELEM_FLOAT3,
- OP_SET_FLOAT4,
- OP_GET_ELEM_FLOAT4,
- OP_MATRIX44_TO_LOC,
- OP_MATRIX44_TO_EULER,
- OP_MATRIX44_TO_AXISANGLE,
- OP_MATRIX44_TO_SCALE,
- OP_LOC_TO_MATRIX44,
- OP_EULER_TO_MATRIX44,
- OP_AXISANGLE_TO_MATRIX44,
- OP_SCALE_TO_MATRIX44,
-
- OP_INIT_MESH_PTR,
- OP_RELEASE_MESH_PTR,
- OP_INIT_DUPLIS_PTR,
- OP_RELEASE_DUPLIS_PTR,
-
- OP_ADD_FLOAT,
- OP_SUB_FLOAT,
- OP_MUL_FLOAT,
- OP_DIV_FLOAT,
- OP_SINE,
- OP_COSINE,
- OP_TANGENT,
- OP_ARCSINE,
- OP_ARCCOSINE,
- OP_ARCTANGENT,
- OP_POWER,
- OP_LOGARITHM,
- OP_MINIMUM,
- OP_MAXIMUM,
- OP_ROUND,
- OP_LESS_THAN,
- OP_GREATER_THAN,
- OP_MODULO,
- OP_ABSOLUTE,
- OP_CLAMP,
- OP_SQRT,
-
- OP_ADD_FLOAT3,
- OP_SUB_FLOAT3,
- OP_MUL_FLOAT3,
- OP_DIV_FLOAT3,
- OP_MUL_FLOAT3_FLOAT,
- OP_DIV_FLOAT3_FLOAT,
- OP_AVERAGE_FLOAT3,
- OP_DOT_FLOAT3,
- OP_CROSS_FLOAT3,
- OP_NORMALIZE_FLOAT3,
- OP_LENGTH_FLOAT3,
-
- OP_ADD_MATRIX44,
- OP_SUB_MATRIX44,
- OP_MUL_MATRIX44,
- OP_MUL_MATRIX44_FLOAT,
- OP_DIV_MATRIX44_FLOAT,
- OP_NEGATE_MATRIX44,
- OP_TRANSPOSE_MATRIX44,
- OP_INVERT_MATRIX44,
- OP_ADJOINT_MATRIX44,
- OP_DETERMINANT_MATRIX44,
-
- OP_MUL_MATRIX44_FLOAT3,
- OP_MUL_MATRIX44_FLOAT4,
-
- OP_MIX_RGB,
-
- OP_INT_TO_RANDOM,
- OP_FLOAT_TO_RANDOM,
-
- OP_TEX_PROC_VORONOI,
- OP_TEX_PROC_MAGIC,
- OP_TEX_PROC_MARBLE,
- OP_TEX_PROC_CLOUDS,
- OP_TEX_PROC_WOOD,
- OP_TEX_PROC_MUSGRAVE,
- OP_TEX_PROC_STUCCI,
- OP_TEX_PROC_DISTNOISE,
-
- OP_OBJECT_LOOKUP,
- OP_OBJECT_TRANSFORM,
-
- OP_EFFECTOR_TRANSFORM,
- OP_EFFECTOR_CLOSEST_POINT,
-
- OP_MESH_LOAD,
- OP_MESH_COMBINE,
- OP_MESH_ARRAY,
- OP_MESH_DISPLACE,
- OP_MESH_BOOLEAN,
-
- OP_CURVE_PATH,
-
- OP_MAKE_DUPLI,
- OP_DUPLIS_COMBINE,
-
- OP_END,
-
-// OP_JUMP,
-// OP_JUMP_IF_ZERO,
-// OP_JUMP_IF_ONE,
+ BVM_DEFINE_OPCODES
};
+#undef DEF_OPCODE
+
+
+/* define a name string for each opcode */
+#define DEF_OPCODE(op) \
+ case OP_##op: return STRINGIFY(op);
+BLI_INLINE const char *opcode_name(OpCode op)
+{
+ switch (op) {
+ BVM_DEFINE_OPCODES
+ default: return "";
+ }
+}
+#undef DEF_OPCODE
} /* namespace bvm */
diff --git a/source/blender/blenvm/compile/CMakeLists.txt b/source/blender/blenvm/compile/CMakeLists.txt
index 94b58c2..c315b98 100644
--- a/source/blender/blenvm/compile/CMakeLists.txt
+++ b/source/blender/blenvm/compile/CMakeLists.txt
@@ -40,6 +40,7 @@ set(INC_SYS
set(SRC
bvm_codegen.cc
+ bvm_codegen_debug.cc
bvm_codegen.h
bvm_nodegraph.cc
bvm_nodegraph.h
diff --git a/source/blender/blenvm/compile/bvm_codegen.h b/source/blender/blenvm/compile/bvm_codegen.h
index 0aeca53..3dd2097 100644
--- a/source/blender/blenvm/compile/bvm_codegen.h
+++ b/source/blender/blenvm/compile/bvm_codegen.h
@@ -134,6 +134,37 @@ private:
Function *fn;
};
+struct DebugGraphvizCompiler : public Compiler {
+ DebugGraphvizCompiler();
+ ~DebugGraphvizCompiler();
+
+ void
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list