aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan/vk_scheduler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_scheduler.cpp')
-rw-r--r--src/video_core/renderer_vulkan/vk_scheduler.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp
index d109d22cab..cd5793746b 100644
--- a/src/video_core/renderer_vulkan/vk_scheduler.cpp
+++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp
@@ -287,10 +287,10 @@ void Scheduler::EndRenderPass()
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;
- const bool is_depth_stencil = range.aspectMask
+ const bool is_color = (range.aspectMask & VK_IMAGE_ASPECT_COLOR_BIT) != 0;
+ const bool is_depth_stencil = (range.aspectMask
& (VK_IMAGE_ASPECT_DEPTH_BIT
- | VK_IMAGE_ASPECT_STENCIL_BIT);
+ | VK_IMAGE_ASPECT_STENCIL_BIT)) !=0;
VkAccessFlags src_access = 0;
VkPipelineStageFlags this_stage = 0;
@@ -326,14 +326,19 @@ void Scheduler::EndRenderPass()
};
}
+ // 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,
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
0,
- {},
- {},
- {barriers.data(), num_images} // Batched image barriers
+ nullptr,
+ nullptr,
+ vk::Span(barriers.data(), num_images) // Batched image barriers
);
});