Fix capture deadlock when vkQueuePresentKHR
unlocks a CPU wait
#1708
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This bug can be observed when capturing the Khronos Vulkan-Sample "timeline_semaphore"
In a situation where you have two threads:
VkSemaphore
,VkFence
....)vkQueuePresentKHR
is necessary to signal that primitiveThen if the "CPU waiting call" (
vkWaitForFences
,vkWaitSemaphores
...) is reached by thread 1 beforevkQueuePresentKHR
is reached by thread 2, theapi_call_mutex_
of theCaptureManager
is locked by the CPU waiting call which makes it impossible to lock by the call tovkQueuePresentKHR
(which is always an exclusive lock) and we end up in a deadlock situation.I don't see why the lock inside
vkQueuePresentKHR
should be exclusive, so I propose to solve this issue by simply using the same system of shared lock as for all the other calls.