From 7b22a27547a26ef3820550e6efc24539eea821d4 Mon Sep 17 00:00:00 2001 From: Ribbit Date: Sun, 19 Oct 2025 23:41:24 -0700 Subject: [PATCH] just map directly --- src/video_core/renderer_vulkan/vk_scheduler.cpp | 13 +++++++++---- src/video_core/renderer_vulkan/vk_scheduler.h | 17 ++++------------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp index 8edabfb87a..023c919859 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.cpp +++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp @@ -112,8 +112,13 @@ void Scheduler::RequestRenderpass(const Framebuffer* framebuffer) { previous_layouts.fill(VK_IMAGE_LAYOUT_GENERAL); for (size_t i = 0; i < framebuffer_image_count; ++i) { const VkImage image = framebuffer_images[i]; - previous_layouts[i] = GetTrackedLayout(image); - SetTrackedLayout(image, framebuffer_layouts[i]); + const u64 key = ImageKey(image); + if (const auto it = image_layout_cache.find(key); it != image_layout_cache.end()) { + previous_layouts[i] = it->second; + } else { + previous_layouts[i] = VK_IMAGE_LAYOUT_GENERAL; + } + image_layout_cache[key] = framebuffer_layouts[i]; } Record([renderpass, framebuffer_handle, render_area, framebuffer_image_count, @@ -419,7 +424,7 @@ void Scheduler::EndRenderPass(bool force_general) }); for (size_t i = 0; i < num_renderpass_images; ++i) { - SetTrackedLayout(renderpass_images[i], VK_IMAGE_LAYOUT_GENERAL); + image_layout_cache[ImageKey(renderpass_images[i])] = VK_IMAGE_LAYOUT_GENERAL; } } else { Record([](vk::CommandBuffer cmdbuf) { @@ -430,7 +435,7 @@ void Scheduler::EndRenderPass(bool force_general) renderpass_image_layouts[i] != VK_IMAGE_LAYOUT_UNDEFINED ? renderpass_image_layouts[i] : VK_IMAGE_LAYOUT_GENERAL; - SetTrackedLayout(renderpass_images[i], render_layout); + image_layout_cache[ImageKey(renderpass_images[i])] = render_layout; } } diff --git a/src/video_core/renderer_vulkan/vk_scheduler.h b/src/video_core/renderer_vulkan/vk_scheduler.h index dce6b7a8be..e8ded78cad 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.h +++ b/src/video_core/renderer_vulkan/vk_scheduler.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -125,7 +128,7 @@ public: } void TrackImageLayout(VkImage image, VkImageLayout layout) noexcept { - SetTrackedLayout(image, layout); + image_layout_cache[ImageKey(image)] = layout; } std::mutex submit_mutex; @@ -240,18 +243,6 @@ private: return static_cast(reinterpret_cast(image)); } - [[nodiscard]] VkImageLayout GetTrackedLayout(VkImage image) const noexcept { - const auto it = image_layout_cache.find(ImageKey(image)); - if (it == image_layout_cache.end()) { - return VK_IMAGE_LAYOUT_GENERAL; - } - return it->second; - } - - void SetTrackedLayout(VkImage image, VkImageLayout layout) noexcept { - image_layout_cache[ImageKey(image)] = layout; - } - const Device& device; StateTracker& state_tracker;