From 622f4d60627a43395797bb147a7c138171ee025d Mon Sep 17 00:00:00 2001 From: Nicolas James Date: Wed, 8 Apr 2026 14:44:40 +1000 Subject: Guard against bad vkQueueSubmit before notifying contexts --- src/layer.cc | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/layer.cc') diff --git a/src/layer.cc b/src/layer.cc index 5df896a..e94fe54 100644 --- a/src/layer.cc +++ b/src/layer.cc @@ -420,9 +420,13 @@ vkQueueSubmit(VkQueue queue, std::uint32_t submit_count, return next_submit; }); - const auto result = vtable.QueueSubmit( - queue, static_cast(std::size(next_submits)), - std::data(next_submits), fence); + if (const auto result = vtable.QueueSubmit( + queue, static_cast(std::size(next_submits)), + std::data(next_submits), fence); + result != VK_SUCCESS) { + + return result; + } // We have to notify after we submit - otherwise we have a race where we // wait for work that wasn't submitted. @@ -430,7 +434,7 @@ vkQueueSubmit(VkQueue queue, std::uint32_t submit_count, context->strategy->notify_submit(submit, std::move(handle)); } - return result; + return VK_SUCCESS; } // The logic for this function is identical to vkSubmitInfo. @@ -480,15 +484,19 @@ vkQueueSubmit2(VkQueue queue, std::uint32_t submit_count, return next_submit; }); - const auto result = vtable.QueueSubmit2( - queue, static_cast(std::size(next_submits)), - std::data(next_submits), fence); + if (const auto result = vtable.QueueSubmit2( + queue, static_cast(std::size(next_submits)), + std::data(next_submits), fence); + result != VK_SUCCESS) { + + return result; + } for (auto&& [submit, handle] : std::views::zip(submit_span, handles)) { context->strategy->notify_submit(submit, std::move(handle)); } - return result; + return VK_SUCCESS; } static VKAPI_ATTR VkResult VKAPI_CALL -- cgit v1.2.3