Какие этапы могут быть установлены для srcStageMask/dstStageMask
при отправке vkCmdPipelineBarrier
из прохода рендеринга, потому что в этом случае нет точки привязки подпрохода к графическому конвейеру?
Тот же вопрос при отправке vkCmdPipelineBarrier
в подпроходе, который имеет точку привязки к вычислительному конвейеру, который, как я полагаю, не имеет таких этапов, как VK_PIPELINE_STAGE_VERTEX_SHADER_BIT и, возможно, многих других.
Спасибо
Изменить
Во-первых, благодаря комментарию @Nicol Bolas, вычислительный шейдер не может быть отправлен в середине подпрохода.
И я хотел бы уточнить свой вопрос:
Скажем, у меня есть изображение, которое после рендеринга будет иметь макет VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL.
После прохождения рендеринга я хочу обновить изображение новыми данными и изменить его макет на VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
Таким образом, после записи vkCmdEndRenderPass я записываю команду vkCmdPipelineBarrier следующим образом:
const VkImageMemoryBarrier imageMemoryBarrier =
{
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
nullptr,
VK_ACCESS_SHADER_READ_BIT, // srcAccessMask
VK_ACCESS_TRANSFER_WRITE_BIT, // dstAccessMask
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, // oldLayout
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, // newLayout
VK_QUEUE_FAMILY_IGNORED,
VK_QUEUE_FAMILY_IGNORED,
image,
{ // subresourceRange
VK_IMAGE_ASPECT_COLOR_BIT, // aspectMask
0, // baseMipLevel
VK_REMAINING_MIP_LEVELS, // levelCount
0, // baseArrayLayer
VK_REMAINING_ARRAY_LAYERS // layerCount
}
};
vkCmdPipelineBarrier(currentCommandBuffer,
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
VK_PIPELINE_STAGE_TRANSFER_BIT,
0,
0, nullptr,
0, nullptr,
1, &imageMemoryBarrier);
Это гарантирует ожидание перехода до тех пор, пока предыдущая команда в renderpass не пересекла этап фрагментного шейдера.
Но что, если vulkan выполнит vkCmdPipelineBarrier после того, как выполнение renderpass уже завершено? теперь нет связанного конвейера, нет этапов - означает ли это, что барьер перейдет в бесконечное ожидание, пока не начнется новый проход рендеринга и не произойдет этап фрагментного шейдера?