From 588ffbfc7de1d74f4c161c25d11df48ca324a527 Mon Sep 17 00:00:00 2001 From: wildcard Date: Sun, 8 Mar 2026 20:07:04 +0100 Subject: [PATCH] [vulkan] Reset event before setting them fixes the said error: Render.Vulkan video_core/vulkan_common/vulkan_debug_callback.cpp:71:DebugUtilCallback: vkCmdSetEvent(): commandBuffer VkCommandBuffer 0xb400007cfb508310 sets event VkEvent 0x6970000000697 which was already set (in this command buffer or in the executed secondary command buffers). If this is not the desired behavior, the event must be reset before it is set again. --- src/video_core/renderer_vulkan/vk_rasterizer.cpp | 1 + src/video_core/vulkan_common/vulkan_wrapper.cpp | 1 + src/video_core/vulkan_common/vulkan_wrapper.h | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 60b899a811..c12c07171d 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -818,6 +818,7 @@ void RasterizerVulkan::WaitForIdle() { scheduler.RequestOutsideRenderPassOperationContext(); scheduler.Record([event = *wfi_event, flags](vk::CommandBuffer cmdbuf) { + cmdbuf.ResetEvent(event, flags); cmdbuf.SetEvent(event, flags); cmdbuf.WaitEvents(event, flags, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, {}, {}, {}); }); diff --git a/src/video_core/vulkan_common/vulkan_wrapper.cpp b/src/video_core/vulkan_common/vulkan_wrapper.cpp index 926f48de89..b698937820 100644 --- a/src/video_core/vulkan_common/vulkan_wrapper.cpp +++ b/src/video_core/vulkan_common/vulkan_wrapper.cpp @@ -127,6 +127,7 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept { X(vkCmdPipelineBarrier); X(vkCmdPushConstants); X(vkCmdPushDescriptorSetWithTemplateKHR); + X(vkCmdResetEvent); X(vkCmdSetBlendConstants); X(vkCmdSetDepthBias); X(vkCmdSetDepthBias2EXT); diff --git a/src/video_core/vulkan_common/vulkan_wrapper.h b/src/video_core/vulkan_common/vulkan_wrapper.h index 872fbd858e..d4400feb8c 100644 --- a/src/video_core/vulkan_common/vulkan_wrapper.h +++ b/src/video_core/vulkan_common/vulkan_wrapper.h @@ -230,6 +230,7 @@ struct DeviceDispatch : InstanceDispatch { PFN_vkCmdPushConstants vkCmdPushConstants{}; PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR{}; PFN_vkCmdResolveImage vkCmdResolveImage{}; + PFN_vkCmdResetEvent vkCmdResetEvent{}; PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants{}; PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT{}; PFN_vkCmdSetDepthBias vkCmdSetDepthBias{}; @@ -1414,6 +1415,10 @@ public: dld->vkCmdSetEvent(handle, event, stage_flags); } + void ResetEvent(VkEvent event, VkPipelineStageFlags stage_mask) const noexcept { + dld->vkCmdResetEvent(handle, event, stage_mask); + } + void WaitEvents(Span events, VkPipelineStageFlags src_stage_mask, VkPipelineStageFlags dst_stage_mask, Span memory_barriers, Span buffer_barriers,