1digraph T {
2    /* Make sure our payloads are always drawn below the driver node */
3    subgraph cluster_driver {
4        fillcolor = grey;
5        style = filled;
6        edge [dir=none];
7        driver -> payload1;
8        driver -> payload2 [penwidth=3];
9        edge [dir=""];
10    }
11
12    /* Driver malloc references */
13    edge [style=dashed];
14    driver -> port1;
15    driver -> port2;
16    driver -> port3:e;
17    driver -> port4 [color=grey];
18    payload1:s -> port1:e;
19    payload2:s -> port3:e [penwidth=3];
20    edge [style=""];
21
22    subgraph cluster_topology {
23        label="Topology Manager";
24        labelloc=bottom;
25
26        /* Topology references */
27        mstb1 -> {port1, port2};
28        port1 -> mstb2;
29        edge [color=grey];
30        port2 -> mstb3 -> {port3, port4};
31        port3 -> mstb4;
32        edge [color=""];
33
34        /* Malloc references */
35        edge [style=dashed;dir=back];
36        mstb1 -> {port1, port2};
37        port1 -> mstb2;
38        port2 -> mstb3 [penwidth=3];
39        mstb3 -> port3 [penwidth=3];
40        edge [color=grey];
41        mstb3 -> port4;
42        port3 -> mstb4;
43    }
44
45    mstb1 [label="MSTB #1";style=filled;fillcolor=palegreen];
46    mstb2 [label="MSTB #2";style=filled;fillcolor=palegreen];
47    mstb3 [label="MSTB #3";style=filled;fillcolor=palegreen;penwidth=3];
48    mstb4 [label="MSTB #4";style=filled;fillcolor=grey];
49
50    port1 [label="Port #1"];
51    port2 [label="Port #2";penwidth=5];
52    port3 [label="Port #3";penwidth=3];
53    port4 [label="Port #4";style=filled;fillcolor=grey];
54
55    driver [label="DRM driver";style=filled;shape=box;fillcolor=lightblue];
56
57    payload1 [label="Payload #1";style=filled;shape=box;fillcolor=lightblue];
58    payload2 [label="Payload #2";style=filled;shape=box;fillcolor=lightblue;penwidth=3];
59}
60