aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan/vk_scheduler.cpp
diff options
context:
space:
mode:
authorCaio Oliveira <caiooliveirafarias0@gmail.com>2026-01-07 06:52:17 +0100
committercrueter <crueter@eden-emu.dev>2026-01-07 06:52:17 +0100
commit8440c2074da7b4c901641dea317f570b256f2c03 (patch)
tree03dce9d66d04f52b082c50fc808c62415184f153 /src/video_core/renderer_vulkan/vk_scheduler.cpp
parent5edcdea78fa60a8cf67c2b99cf2bc827865de906 (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.cpp29
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,