summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar liamwhite2023-10-12 11:17:20 -0400
committerGravatar GitHub2023-10-12 11:17:20 -0400
commit7b2ac196d220f11094b78092f3be474e692d861b (patch)
tree6e422af0a5b5df0a3317a670d8b82f7640b330cf /src/video_core/renderer_vulkan
parentMerge pull request #11752 from lat9nq/msvc-tz-2022g (diff)
parentTransition MSAA images to general layout without uploading data (diff)
downloadyuzu-7b2ac196d220f11094b78092f3be474e692d861b.tar.gz
yuzu-7b2ac196d220f11094b78092f3be474e692d861b.tar.xz
yuzu-7b2ac196d220f11094b78092f3be474e692d861b.zip
Merge pull request #11751 from Kelebek1/transition_msaa_image
Transition MSAA images to general layout without uploading data
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_texture_cache.cpp28
-rw-r--r--src/video_core/renderer_vulkan/vk_texture_cache.h2
2 files changed, 30 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp
index 1b8bb9662..93773a69f 100644
--- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp
@@ -2013,4 +2013,32 @@ void TextureCacheRuntime::AccelerateImageUpload(
2013 ASSERT(false); 2013 ASSERT(false);
2014} 2014}
2015 2015
2016void TextureCacheRuntime::TransitionImageLayout(Image& image) {
2017 if (!image.ExchangeInitialization()) {
2018 VkImageMemoryBarrier barrier{
2019 .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
2020 .pNext = nullptr,
2021 .srcAccessMask = VK_ACCESS_NONE,
2022 .dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT,
2023 .oldLayout = VK_IMAGE_LAYOUT_UNDEFINED,
2024 .newLayout = VK_IMAGE_LAYOUT_GENERAL,
2025 .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
2026 .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
2027 .image = image.Handle(),
2028 .subresourceRange{
2029 .aspectMask = image.AspectMask(),
2030 .baseMipLevel = 0,
2031 .levelCount = VK_REMAINING_MIP_LEVELS,
2032 .baseArrayLayer = 0,
2033 .layerCount = VK_REMAINING_ARRAY_LAYERS,
2034 },
2035 };
2036 scheduler.RequestOutsideRenderPassOperationContext();
2037 scheduler.Record([barrier = barrier](vk::CommandBuffer cmdbuf) {
2038 cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
2039 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, barrier);
2040 });
2041 }
2042}
2043
2016} // namespace Vulkan 2044} // namespace Vulkan
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.h b/src/video_core/renderer_vulkan/vk_texture_cache.h
index d6c5a15cc..7a0807709 100644
--- a/src/video_core/renderer_vulkan/vk_texture_cache.h
+++ b/src/video_core/renderer_vulkan/vk_texture_cache.h
@@ -92,6 +92,8 @@ public:
92 92
93 void InsertUploadMemoryBarrier() {} 93 void InsertUploadMemoryBarrier() {}
94 94
95 void TransitionImageLayout(Image& image);
96
95 bool HasBrokenTextureViewFormats() const noexcept { 97 bool HasBrokenTextureViewFormats() const noexcept {
96 // No known Vulkan driver has broken image views 98 // No known Vulkan driver has broken image views
97 return false; 99 return false;