Cycles: Add method to dump current shader graph to the graphiz file
This is rather useful to see how good optimization went and so. Currently uses quite simple notation: shader nodes are nodes on the graph, connects between graph nodes are named by the sockets names, so i.e. connection between BSDF and Mix would be named bsdf:closure1. Could be improved in the feature to draw fancier graph, but it's good enough already. Use in the following way: - To create graphix file call graph->dump_graph("graph.dot") - To visualize the grapf call: dot -Tpng graph.dot -o graph.png
This commit is contained in:
parent
b3d414cc21
commit
d165b1b266
|
@ -835,5 +835,47 @@ void ShaderGraph::transform_multi_closure(ShaderNode *node, ShaderOutput *weight
|
|||
}
|
||||
}
|
||||
|
||||
void ShaderGraph::dump_graph(const char *filename)
|
||||
{
|
||||
FILE *fd = fopen(filename, "w");
|
||||
|
||||
if(fd == NULL) {
|
||||
printf("Error opening file for dumping the graph: %s\n", filename);
|
||||
return;
|
||||
}
|
||||
|
||||
fprintf(fd, "digraph dependencygraph {\n");
|
||||
fprintf(fd, "ranksep=1.5\n");
|
||||
fprintf(fd, "splines=false\n");
|
||||
|
||||
foreach(ShaderNode *node, nodes) {
|
||||
fprintf(fd, "// NODE: %p\n", node);
|
||||
fprintf(fd,
|
||||
"\"%p\" [shape=record,label=\"%s\"]\n",
|
||||
node,
|
||||
node->name.c_str());
|
||||
}
|
||||
|
||||
foreach(ShaderNode *node, nodes) {
|
||||
foreach(ShaderOutput *output, node->outputs) {
|
||||
foreach(ShaderInput *input, output->links) {
|
||||
fprintf(fd,
|
||||
"// CONNECTION: %p->%p (%s:%s)\n",
|
||||
output,
|
||||
input,
|
||||
output->name, input->name);
|
||||
fprintf(fd,
|
||||
"\"%p\":s -> \"%p\":n [label=\"%s:%s\"]\n",
|
||||
output->parent,
|
||||
input->parent,
|
||||
output->name, input->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(fd, "}\n");
|
||||
fclose(fd);
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
|
|
|
@ -250,6 +250,8 @@ public:
|
|||
void remove_unneeded_nodes();
|
||||
void finalize(bool do_bump = false, bool do_osl = false);
|
||||
|
||||
void dump_graph(const char *filename);
|
||||
|
||||
protected:
|
||||
typedef pair<ShaderNode* const, ShaderNode*> NodePair;
|
||||
|
||||
|
|
Loading…
Reference in New Issue