Browse Source

just map directly

pull/2798/head
Ribbit 5 months ago
committed by crueter
parent
commit
7b22a27547
  1. 13
      src/video_core/renderer_vulkan/vk_scheduler.cpp
  2. 17
      src/video_core/renderer_vulkan/vk_scheduler.h

13
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;
}
}

17
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<u64>(reinterpret_cast<uintptr_t>(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;

Loading…
Cancel
Save