digraph {
   node [shape=box]

   subgraph cluster_state {
       style=dashed
       label="Free-standing state"

       "drm_atomic_state" -> "duplicated drm_plane_state A"
       "drm_atomic_state" -> "duplicated drm_plane_state B"
       "drm_atomic_state" -> "duplicated drm_crtc_state"
       "drm_atomic_state" -> "duplicated drm_connector_state"
       "drm_atomic_state" -> "duplicated driver private state"
   }

   subgraph cluster_current {
       style=dashed
       label="Current state"

       "drm_device" -> "drm_plane A"
       "drm_device" -> "drm_plane B"
       "drm_device" -> "drm_crtc"
       "drm_device" -> "drm_connector"
       "drm_device" -> "driver private object"

       "drm_plane A" -> "drm_plane_state A"
       "drm_plane B" -> "drm_plane_state B"
       "drm_crtc" -> "drm_crtc_state"
       "drm_connector" -> "drm_connector_state"
       "driver private object" -> "driver private state"
   }

   "drm_atomic_state" -> "drm_device" [label="atomic_commit"]
   "duplicated drm_plane_state A" -> "drm_device"[style=invis]
}