digraph { //graph [ranksep=1 nodesep=1] graph [nodesep=0.5, margin=0] fontname="Computer Modern,Arial,sans-serif" node [fontname="Helvetica,Arial,sans-serif"] edge [fontname="Helvetica,Arial,sans-serif"] layout=dot labelloc = "t" node [shape=plaintext] read [label=<read buffer> height=0] write [label=<write buffer> height=0] shader [label=<fragment shader> height=0] particle_stateA [label=<
state a
b
>] particle_stateB [label=<
a state
b
>] node [shape=ellipse] simulation [label="arbitrary\ncomputation"] edge [style=invis] rank=same {read -> shader -> write} read -> particle_stateA shader -> simulation write -> particle_stateB subgraph program { edge [weight=1000 style=dashed] // uncomment to hide the grid //edge [style=invis] // // vertex_buffer_copy * 4 edge [weight=1000 style=solid] rank=same { particle_stateA:src -> simulation:w simulation:e -> particle_stateB:dst } } }