We should clean up code that doing image layout transitions and make it more consistent. While looking through code I found:
- Functions called transitionImageLayout
- Functions called transition_image_layout (which doesn't match the tutorial's naming conventions)
- Functions called transition_image_layout_custom
- Barriers explicitly issued
Esp. the later makes it odd to read code:
transition_image_layout(
imageIndex,
vk::ImageLayout::eUndefined,
vk::ImageLayout::eColorAttachmentOptimal,
{}, // srcAccessMask (no need to wait for previous operations)
vk::AccessFlagBits2::eColorAttachmentWrite, // dstAccessMask
vk::PipelineStageFlagBits2::eTopOfPipe, // srcStage
vk::PipelineStageFlagBits2::eColorAttachmentOutput // dstStage
);
// Transition depth image to depth attachment optimal layout
vk::ImageMemoryBarrier2 depthBarrier = {
.srcStageMask = vk::PipelineStageFlagBits2::eTopOfPipe,
.srcAccessMask = {},
.dstStageMask = vk::PipelineStageFlagBits2::eEarlyFragmentTests | vk::PipelineStageFlagBits2::eLateFragmentTests,
.dstAccessMask = vk::AccessFlagBits2::eDepthStencilAttachmentRead | vk::AccessFlagBits2::eDepthStencilAttachmentWrite,
.oldLayout = vk::ImageLayout::eUndefined,
.newLayout = vk::ImageLayout::eDepthStencilAttachmentOptimal,
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.image = depthImage,
.subresourceRange = {
.aspectMask = vk::ImageAspectFlagBits::eDepth,
.baseMipLevel = 0,
.levelCount = 1,
.baseArrayLayer = 0,
.layerCount = 1
}
};
vk::DependencyInfo depthDependencyInfo = {
.dependencyFlags = {},
.imageMemoryBarrierCount = 1,
.pImageMemoryBarriers = &depthBarrier
};
commandBuffers[currentFrame].pipelineBarrier2(depthDependencyInfo);
Color is transitioned using a function, depth transition is done explicitly.
We should clean up code that doing image layout transitions and make it more consistent. While looking through code I found:
Esp. the later makes it odd to read code:
Color is transitioned using a function, depth transition is done explicitly.