diff options
| author | 2021-07-22 12:51:13 -0400 | |
|---|---|---|
| committer | 2021-07-22 12:51:13 -0400 | |
| commit | db46f8a70c853ccab3318abed1416231a3c426db (patch) | |
| tree | 92c1c8f149f96bc8c7883affa14cdb0b266e0024 /src | |
| parent | Merge pull request #6693 from lat9nq/cmd-fullscreen-mode-2 (diff) | |
| parent | vk_texture_cache: Use VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL when possible (diff) | |
| download | yuzu-db46f8a70c853ccab3318abed1416231a3c426db.tar.gz yuzu-db46f8a70c853ccab3318abed1416231a3c426db.tar.xz yuzu-db46f8a70c853ccab3318abed1416231a3c426db.zip | |
Merge pull request #6686 from ReinUsesLisp/vk-optimal-copy
vk_texture_cache: Use VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL when possible
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_texture_cache.cpp | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index fd01c902c..88ccf96f5 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp | |||
| @@ -765,7 +765,7 @@ void TextureCacheRuntime::CopyImage(Image& dst, Image& src, | |||
| 765 | dst_range.AddLayers(copy.dstSubresource); | 765 | dst_range.AddLayers(copy.dstSubresource); |
| 766 | src_range.AddLayers(copy.srcSubresource); | 766 | src_range.AddLayers(copy.srcSubresource); |
| 767 | } | 767 | } |
| 768 | const std::array read_barriers{ | 768 | const std::array pre_barriers{ |
| 769 | VkImageMemoryBarrier{ | 769 | VkImageMemoryBarrier{ |
| 770 | .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, | 770 | .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, |
| 771 | .pNext = nullptr, | 771 | .pNext = nullptr, |
| @@ -774,7 +774,7 @@ void TextureCacheRuntime::CopyImage(Image& dst, Image& src, | |||
| 774 | VK_ACCESS_TRANSFER_WRITE_BIT, | 774 | VK_ACCESS_TRANSFER_WRITE_BIT, |
| 775 | .dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT, | 775 | .dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT, |
| 776 | .oldLayout = VK_IMAGE_LAYOUT_GENERAL, | 776 | .oldLayout = VK_IMAGE_LAYOUT_GENERAL, |
| 777 | .newLayout = VK_IMAGE_LAYOUT_GENERAL, | 777 | .newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, |
| 778 | .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, | 778 | .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
| 779 | .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, | 779 | .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
| 780 | .image = src_image, | 780 | .image = src_image, |
| @@ -795,29 +795,43 @@ void TextureCacheRuntime::CopyImage(Image& dst, Image& src, | |||
| 795 | .subresourceRange = dst_range.SubresourceRange(aspect_mask), | 795 | .subresourceRange = dst_range.SubresourceRange(aspect_mask), |
| 796 | }, | 796 | }, |
| 797 | }; | 797 | }; |
| 798 | const VkImageMemoryBarrier write_barrier{ | 798 | const std::array post_barriers{ |
| 799 | .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, | 799 | VkImageMemoryBarrier{ |
| 800 | .pNext = nullptr, | 800 | .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, |
| 801 | .srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT, | 801 | .pNext = nullptr, |
| 802 | .dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | | 802 | .srcAccessMask = 0, |
| 803 | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | | 803 | .dstAccessMask = 0, |
| 804 | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | | 804 | .oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, |
| 805 | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | | 805 | .newLayout = VK_IMAGE_LAYOUT_GENERAL, |
| 806 | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | | 806 | .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
| 807 | VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, | 807 | .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, |
| 808 | .oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | 808 | .image = src_image, |
| 809 | .newLayout = VK_IMAGE_LAYOUT_GENERAL, | 809 | .subresourceRange = src_range.SubresourceRange(aspect_mask), |
| 810 | .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, | 810 | }, |
| 811 | .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, | 811 | VkImageMemoryBarrier{ |
| 812 | .image = dst_image, | 812 | .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, |
| 813 | .subresourceRange = dst_range.SubresourceRange(aspect_mask), | 813 | .pNext = nullptr, |
| 814 | .srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT, | ||
| 815 | .dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | | ||
| 816 | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | | ||
| 817 | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | | ||
| 818 | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | | ||
| 819 | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | | ||
| 820 | VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, | ||
| 821 | .oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | ||
| 822 | .newLayout = VK_IMAGE_LAYOUT_GENERAL, | ||
| 823 | .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, | ||
| 824 | .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, | ||
| 825 | .image = dst_image, | ||
| 826 | .subresourceRange = dst_range.SubresourceRange(aspect_mask), | ||
| 827 | }, | ||
| 814 | }; | 828 | }; |
| 815 | cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, | 829 | cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, |
| 816 | 0, {}, {}, read_barriers); | 830 | 0, {}, {}, pre_barriers); |
| 817 | cmdbuf.CopyImage(src_image, VK_IMAGE_LAYOUT_GENERAL, dst_image, | 831 | cmdbuf.CopyImage(src_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, dst_image, |
| 818 | VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, vk_copies); | 832 | VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, vk_copies); |
| 819 | cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, | 833 | cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, |
| 820 | 0, write_barrier); | 834 | 0, {}, {}, post_barriers); |
| 821 | }); | 835 | }); |
| 822 | } | 836 | } |
| 823 | 837 | ||