In Vulkan, drawing commands are organized into render passes. A render pass is a collection of subpasses that describes how image resources (color, depth/stencil, and input attachments) are used: what their layouts are and how these layouts should be transitioned between subpasses, when we render into attachments or when we read data from them, if their contents are needed after the render pass, or if their usage is limited only to the scope of a render pass.
The aforementioned data stored in render passes is just a general description, or a metadata. The actual resources involved in the rendering process are specified with framebuffers. Through them, we define which image views are used for which rendering attachments.
We need to prepare all this information in advance, before we can issue (record) rendering commands. With that knowledge, drivers can greatly optimize the drawing process, limit the...