Subpass Implicit Dependency Question

#1

Section “7.1. Render Pass Creation” includes this quote about a Subpass Implicit Dependency:

Similarly, if there is no subpass dependency from the last subpass that uses an attachment to VK_SUBPASS_EXTERNAL, then an implicit subpass dependency exists from the last subpass it is used in to VK_SUBPASS_EXTERNAL. The subpass dependency operates as if defined with the following parameters:

VkSubpassDependency implicitDependency = {
    .srcSubpass = lastSubpass; // Last subpass attachment is used in
    .dstSubpass = VK_SUBPASS_EXTERNAL;
    .srcStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
    .dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
    .srcAccessMask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
                     VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
                     VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
                     VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
                     VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
    .dstAccessMask = 0;
    .dependencyFlags = 0;
};

My question is, is there any need to include the *_READ_BIT flags in srcAccessMask, because a Memory Dependency only cares to make write operations in the first access scope available?

Am I just being overly nitpicky on the semantics, in the sense that the *_READ_BIT are simply superfluous and have no effect, or is there something I am missing by including the *_READ_BIT flags?

#2

AFIAIK it is nitpickery. It is probably a copy-paste from the other implicit dependency. And technically it is not forbidden to have extra _READ flags.

IMO the access flags are poorly designed and exactly this had to be fixed/clarified…
R->R hazard is not a thing. W->R is most of the cases. W->W might be useful sometimes. And on R->W hazard the spec says it does not require memory dependency. So indeed it makes sense to have only _WRITE access flags in src.

#3

I see. Thanks for the response.

#4

Synchronization between seperate renderpasses