-
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