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