diff options
| author | Caio Oliveira <caiooliveirafarias0@gmail.com> | 2026-01-07 06:52:17 +0100 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-01-07 06:52:17 +0100 |
| commit | 8440c2074da7b4c901641dea317f570b256f2c03 (patch) | |
| tree | 03dce9d66d04f52b082c50fc808c62415184f153 /src/video_core/renderer_vulkan/vk_scheduler.cpp | |
| parent | 5edcdea78fa60a8cf67c2b99cf2bc827865de906 (diff) | |
[vk] Remove UniformRing and vkCmdResetQueryPool (#3270)
Fixes perfomance regression on Xenoblade Chronicles DE and Pokemon Scarlet (among other games)
It should be investigated the reason why such perfomance loss (more than ~10% in some case)
At core it partially reverted the following commits:
Reverts "[vk] Introduce Ring Buffers for Uniform Buffer (#2698)"
This reverts commit 776958c79d.
Revert "[vk] Bring Vulkan closer to Spec (#180)"
This reverts commit c8d6f23129.
Revert "[VK] PR 180 extension (#257)"
This reverts commit 444b9f361e.
Revert "[vk] Fixes regression of PR #180 vk_scheduler.cpp for AMD GPU and Windows OS (#3071)"
This reverts commit be218cc020.
Signed-off-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3270
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Co-authored-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Co-committed-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_scheduler.cpp')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_scheduler.cpp | 29 |
1 files changed, 8 insertions, 21 deletions
diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp index 4e56055f97..04684b5246 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.cpp +++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp @@ -302,8 +302,6 @@ void Scheduler::EndRenderPass() images = renderpass_images, ranges = renderpass_image_ranges](vk::CommandBuffer cmdbuf) { std::array<VkImageMemoryBarrier, 9> barriers; - VkPipelineStageFlags src_stages = 0; - for (size_t i = 0; i < num_images; ++i) { const VkImageSubresourceRange& range = ranges[i]; const bool is_color = (range.aspectMask & VK_IMAGE_ASPECT_COLOR_BIT) != 0; @@ -312,20 +310,14 @@ void Scheduler::EndRenderPass() | VK_IMAGE_ASPECT_STENCIL_BIT)) !=0; VkAccessFlags src_access = 0; - VkPipelineStageFlags this_stage = 0; - if (is_color) { + if (is_color) src_access |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; - this_stage |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; - } - - if (is_depth_stencil) { + else if (is_depth_stencil) src_access |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; - this_stage |= VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT - | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; - } - - src_stages |= this_stage; + else + src_access |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT + | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; barriers[i] = VkImageMemoryBarrier{ .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, @@ -344,15 +336,10 @@ void Scheduler::EndRenderPass() .subresourceRange = range, }; } - - // Graft: ensure explicit fragment tests + color output stages are always synchronized (AMD/Windows fix) - src_stages |= VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | - VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT | - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; - cmdbuf.EndRenderPass(); - - cmdbuf.PipelineBarrier(src_stages, + cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | + VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT | + VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, nullptr, |
