auto releaseBarrier = vk::ImageMemoryBarrier2{
.srcStageMask = vk::PipelineStageFlagBits2::eAllTransfer,
.srcAccessMask = vk::AccessFlagBits2::eTransferWrite,
.dstStageMask = vk::PipelineStageFlagBits2::eNone, // No stage on this queue
.dstAccessMask = vk::AccessFlagBits2::eNone, // No access on this queue
.oldLayout = vk::ImageLayout::eTransferDstOptimal,
.newLayout = vk::ImageLayout::eShaderReadOnlyOptimal,
.srcQueueFamilyIndex = transferQueueIndex,
.dstQueueFamilyIndex = graphicsQueueIndex,
.image = texture.image(),
.subresourceRange = subresourceRange
};
// Record on Transfer Command Buffer
transferCommandBuffer.pipelineBarrier2(vk::DependencyInfo{.imageMemoryBarrierCount = 1, .pImageMemoryBarriers = &releaseBarrier});