Search code examples
synchronizationvulkan

Is it necessary to provide SubpassDependencies when creating a RenderPass with one single Subpass?


Is it necessary to provide SubpassDependencies when creating a RenderPass with one single Subpass? I'm learning Vulkan and I came across Subpass Dependencies when creating a simple Renderpass with a single subpass.

Here's my code:

VkAttachmentDescription attachments[2];

attachments[0].flags = 0;
attachments[0].format = colorFormat;
attachments[0].samples = VK_SAMPLE_COUNT_1_BIT;
attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
attachments[0].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
attachments[0].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
attachments[0].initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
attachments[0].finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;

attachments[1].flags = 0;
attachments[1].format = depthFormat;
attachments[1].samples = VK_SAMPLE_COUNT_1_BIT;
attachments[1].loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
attachments[1].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
attachments[1].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
attachments[1].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
attachments[1].initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
attachments[1].finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;

VkAttachmentReference colorAttachmentRef{
    0,
    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
};

VkAttachmentReference depthAttachmentRef{
    1,
    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
};

VkSubpassDescription subpass{
    0,
    VK_PIPELINE_BIND_POINT_GRAPHICS,
    0,
    nullptr,
    1,
    &colorAttachmentRef,
    nullptr,
    &depthAttachmentRef,
    0,
    nullptr
};

VkRenderPassCreateInfo renderPassCreateInfo{
    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
    nullptr,
    0,
    2,
    attachments,
    1,
    &subpass,
    0, //?
    nullptr //?
};

Solution

  • From the spec

    If dependencyCount is not 0, pDependencies must be a valid pointer to an array of dependencyCount valid VkSubpassDependency structures

    So, no, you don't explicitly need any dependencies defined if you have a single subpass, single renderpass style setup.