Summary
When the GPU is lost during a compute dispatch (TDR, thermal shutdown, OOM, driver crash), Vulkan-Hpp throws vk::DeviceLostError from vkQueueSubmit or vkWaitForFences. Kompute's Sequence::evalAsync / evalAwait set mIsRunning = true just before these calls but never reset it on an exception path — so any follow-up call (even just to destroy and retry) hits the "already running" guard and deadlocks.
Fix
Catch-and-rethrow around the two Vulkan calls so mIsRunning is cleared on any throw, while letting the exception (including vk::DeviceLostError) propagate unchanged to the caller.
References
Summary
When the GPU is lost during a compute dispatch (TDR, thermal shutdown, OOM, driver crash), Vulkan-Hpp throws
vk::DeviceLostErrorfromvkQueueSubmitorvkWaitForFences. Kompute'sSequence::evalAsync/evalAwaitsetmIsRunning = truejust before these calls but never reset it on an exception path — so any follow-up call (even just to destroy and retry) hits the "already running" guard and deadlocks.Fix
Catch-and-rethrow around the two Vulkan calls so
mIsRunningis cleared on any throw, while letting the exception (includingvk::DeviceLostError) propagate unchanged to the caller.References
Sequence::evalAsync(),Sequence::evalAwait()insrc/Sequence.cpp