• Compute to Compute Dependencies
  • First dispatch writes to a storage buffer, second dispatch reads from that storage buffer.
  • First dispatch reads from a storage buffer, second dispatch writes to that storage buffer.
  • First dispatch writes to a storage image, second dispatch reads from that storage image.
  • Three dispatches. First dispatch writes to a storage buffer, second dispatch writes to non-overlapping region of same storage buffer, third dispatch reads both regions.
  • Three dispatches. First dispatch writes to one storage buffer, second dispatch writes to a different storage buffer, third dispatch reads both.
  • Compute to Graphics Dependencies
  • Dispatch writes into a storage buffer. Draw consumes that buffer as an index buffer.
  • Dispatch writes into a storage buffer. Draw consumes that buffer as an index buffer. A further compute shader reads from the buffer as a uniform buffer.
  • Dispatch writes into a storage buffer. Draw consumes that buffer as a draw indirect buffer.
  • Dispatch writes into a storage image. Draw samples that image in a fragment shader.
  • Dispatch writes into a storage texel buffer. Draw consumes that buffer as a draw indirect buffer, and then again as a uniform buffer in the fragment shader.
  • Graphics to Compute Dependencies
  • Draw writes to a color attachment. Dispatch samples from that image.
  • Draw writes to a depth attachment. Dispatch samples from that image.
  • Graphics to Graphics Dependencies
  • First draw writes to a depth attachment. Second draw reads from it as an input attachment in the fragment shader.
  • First draw writes to a depth attachment. Second draw samples from that depth image in the fragment shader (e.g. shadow map rendering).
  • First draw writes to a color attachment. Second draw reads from it as an input attachment in the fragment shader.
  • First draw writes to a color attachment. Second draw samples from that color image in the fragment shader.
  • First draw writes to a color attachment. Second draw samples from that color image in the vertex shader.
  • First draw samples a texture in the fragment shader. Second draw writes to that texture as a color attachment.
  • First render-pass writes to a depth attachment. Second render-pass re-uses the same depth attachment.
  • Transfer Dependencies
  • Upload data from the CPU to a vertex buffer
  • Discrete Host and Device Memory
  • Unified Memory
  • Upload data from the CPU to an image sampled in a fragment shader
  • CPU read back of data written by a compute shader
  • Interactions with semaphores
  • Any dependency where only buffers are affected, or images where the layout doesn't change
  • Dependency between images where a layout transition is required, expressed before the semaphore signal
  • Dependency between images where a layout transition is required, expressed after the semaphore signal
  • Swapchain Image Acquire and Present
  • Combined Graphics/Present Queue
  • Multiple Queues
  • Full pipeline barrier
  • TODO