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;
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        port2 -> mstb3 -> {port3, port4};
28        port3 -> mstb4;
29
30        /* Malloc references */
31        edge [style=dashed;dir=back];
32        mstb1 -> {port1, port2};
33        port1 -> mstb2;
34        port2 -> mstb3 -> {port3, port4};
35        port3 -> mstb4;
36    }
37
38    driver [label="DRM driver";style=filled;shape=box;fillcolor=lightblue];
39
40    payload1 [label="Payload #1";style=filled;shape=box;fillcolor=lightblue];
41    payload2 [label="Payload #2";style=filled;shape=box;fillcolor=lightblue];
42
43    mstb1 [label="MSTB #1";style=filled;fillcolor=palegreen;shape=oval];
44    mstb2 [label="MSTB #2";style=filled;fillcolor=palegreen;shape=oval];
45    mstb3 [label="MSTB #3";style=filled;fillcolor=palegreen;shape=oval];
46    mstb4 [label="MSTB #4";style=filled;fillcolor=palegreen;shape=oval];
47
48    port1 [label="Port #1";shape=oval];
49    port2 [label="Port #2";shape=oval];
50    port3 [label="Port #3";shape=oval];
51    port4 [label="Port #4";shape=oval];
52}
53