|  | digraph T { | 
|  | /* Make sure our payloads are always drawn below the driver node */ | 
|  | subgraph cluster_driver { | 
|  | fillcolor = grey; | 
|  | style = filled; | 
|  | driver -> {payload1, payload2} [dir=none]; | 
|  | } | 
|  |  | 
|  | /* Driver malloc references */ | 
|  | edge [style=dashed]; | 
|  | driver -> port1; | 
|  | driver -> port2; | 
|  | driver -> port3:e; | 
|  | driver -> port4; | 
|  |  | 
|  | payload1:s -> port1:e; | 
|  | payload2:s -> port3:e; | 
|  | edge [style=""]; | 
|  |  | 
|  | subgraph cluster_topology { | 
|  | label="Topology Manager"; | 
|  | labelloc=bottom; | 
|  |  | 
|  | /* Topology references */ | 
|  | mstb1 -> {port1, port2}; | 
|  | port1 -> mstb2; | 
|  | port2 -> mstb3 -> {port3, port4}; | 
|  | port3 -> mstb4; | 
|  |  | 
|  | /* Malloc references */ | 
|  | edge [style=dashed;dir=back]; | 
|  | mstb1 -> {port1, port2}; | 
|  | port1 -> mstb2; | 
|  | port2 -> mstb3 -> {port3, port4}; | 
|  | port3 -> mstb4; | 
|  | } | 
|  |  | 
|  | driver [label="DRM driver";style=filled;shape=box;fillcolor=lightblue]; | 
|  |  | 
|  | payload1 [label="Payload #1";style=filled;shape=box;fillcolor=lightblue]; | 
|  | payload2 [label="Payload #2";style=filled;shape=box;fillcolor=lightblue]; | 
|  |  | 
|  | mstb1 [label="MSTB #1";style=filled;fillcolor=palegreen;shape=oval]; | 
|  | mstb2 [label="MSTB #2";style=filled;fillcolor=palegreen;shape=oval]; | 
|  | mstb3 [label="MSTB #3";style=filled;fillcolor=palegreen;shape=oval]; | 
|  | mstb4 [label="MSTB #4";style=filled;fillcolor=palegreen;shape=oval]; | 
|  |  | 
|  | port1 [label="Port #1";shape=oval]; | 
|  | port2 [label="Port #2";shape=oval]; | 
|  | port3 [label="Port #3";shape=oval]; | 
|  | port4 [label="Port #4";shape=oval]; | 
|  | } |