|
|
@ -765,7 +765,7 @@ void TextureCacheRuntime::CopyImage(Image& dst, Image& src, |
|
|
dst_range.AddLayers(copy.dstSubresource); |
|
|
dst_range.AddLayers(copy.dstSubresource); |
|
|
src_range.AddLayers(copy.srcSubresource); |
|
|
src_range.AddLayers(copy.srcSubresource); |
|
|
} |
|
|
} |
|
|
const std::array read_barriers{ |
|
|
|
|
|
|
|
|
const std::array pre_barriers{ |
|
|
VkImageMemoryBarrier{ |
|
|
VkImageMemoryBarrier{ |
|
|
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, |
|
|
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, |
|
|
.pNext = nullptr, |
|
|
.pNext = nullptr, |
|
|
@ -774,7 +774,7 @@ void TextureCacheRuntime::CopyImage(Image& dst, Image& src, |
|
|
VK_ACCESS_TRANSFER_WRITE_BIT, |
|
|
VK_ACCESS_TRANSFER_WRITE_BIT, |
|
|
.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT, |
|
|
.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT, |
|
|
.oldLayout = VK_IMAGE_LAYOUT_GENERAL, |
|
|
.oldLayout = VK_IMAGE_LAYOUT_GENERAL, |
|
|
.newLayout = VK_IMAGE_LAYOUT_GENERAL, |
|
|
|
|
|
|
|
|
.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, |
|
|
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
|
|
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
|
|
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
|
|
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
|
|
.image = src_image, |
|
|
.image = src_image, |
|
|
@ -795,29 +795,43 @@ void TextureCacheRuntime::CopyImage(Image& dst, Image& src, |
|
|
.subresourceRange = dst_range.SubresourceRange(aspect_mask), |
|
|
.subresourceRange = dst_range.SubresourceRange(aspect_mask), |
|
|
}, |
|
|
}, |
|
|
}; |
|
|
}; |
|
|
const VkImageMemoryBarrier write_barrier{ |
|
|
|
|
|
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, |
|
|
|
|
|
.pNext = nullptr, |
|
|
|
|
|
.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT, |
|
|
|
|
|
.dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_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 | |
|
|
|
|
|
VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, |
|
|
|
|
|
.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, |
|
|
|
|
|
.newLayout = VK_IMAGE_LAYOUT_GENERAL, |
|
|
|
|
|
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
|
|
|
|
|
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
|
|
|
|
|
.image = dst_image, |
|
|
|
|
|
.subresourceRange = dst_range.SubresourceRange(aspect_mask), |
|
|
|
|
|
|
|
|
const std::array post_barriers{ |
|
|
|
|
|
VkImageMemoryBarrier{ |
|
|
|
|
|
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, |
|
|
|
|
|
.pNext = nullptr, |
|
|
|
|
|
.srcAccessMask = 0, |
|
|
|
|
|
.dstAccessMask = 0, |
|
|
|
|
|
.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, |
|
|
|
|
|
.newLayout = VK_IMAGE_LAYOUT_GENERAL, |
|
|
|
|
|
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
|
|
|
|
|
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
|
|
|
|
|
.image = src_image, |
|
|
|
|
|
.subresourceRange = src_range.SubresourceRange(aspect_mask), |
|
|
|
|
|
}, |
|
|
|
|
|
VkImageMemoryBarrier{ |
|
|
|
|
|
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, |
|
|
|
|
|
.pNext = nullptr, |
|
|
|
|
|
.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT, |
|
|
|
|
|
.dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_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 | |
|
|
|
|
|
VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, |
|
|
|
|
|
.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, |
|
|
|
|
|
.newLayout = VK_IMAGE_LAYOUT_GENERAL, |
|
|
|
|
|
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
|
|
|
|
|
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
|
|
|
|
|
.image = dst_image, |
|
|
|
|
|
.subresourceRange = dst_range.SubresourceRange(aspect_mask), |
|
|
|
|
|
}, |
|
|
}; |
|
|
}; |
|
|
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, |
|
|
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, |
|
|
0, {}, {}, read_barriers); |
|
|
|
|
|
cmdbuf.CopyImage(src_image, VK_IMAGE_LAYOUT_GENERAL, dst_image, |
|
|
|
|
|
|
|
|
0, {}, {}, pre_barriers); |
|
|
|
|
|
cmdbuf.CopyImage(src_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, dst_image, |
|
|
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, vk_copies); |
|
|
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, vk_copies); |
|
|
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, |
|
|
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, |
|
|
0, write_barrier); |
|
|
|
|
|
|
|
|
0, {}, {}, post_barriers); |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|