[dawn][vulkan] Removes queue serial assertion.
- The assertion is currently causing flakes after the changes
in https://dawn-review.googlesource.com/c/dawn/+/242714. The
change in that CL is necessary to implement spontaneous
callbacks, but by moving the `CheckPassedSerial` call which is
the call responsible for actually updating the `mCompletedSerial`
member in `ExecutionQueue` outside of the scope of the global
Device lock, the assertion can fail when:
Thread A:
- Successfully waited for serial 3 in the critical section of
`WaitQueueSerials`.
- Calls `CheckPassedSerial`->`CheckAndUpdateCompletedSerial`
and gets 3. Note that in the Vulkan implementation of
`CheckAndUpdateCompletedSerial`, this updates the internal
fences that are tracked, so all serials < 3 are now no
longer in `mFencesInFlight`. Begins to try calling
`UpdateCompletedSerial(3)` but is interrupted by Thread B.
Thread B:
- `WaitForQueueSerial` is called for a serial of 2. Since
the backend implementation, i.e. Vulkan's
`CheckAndUpdateCompletedSerial` has already been called,
in `QueueVk::CheckAndUpdateCompletedSerial` we don't
find a wait fence, so we enter the code block with the
DAWN_ASSERT. Unfortunately, since Thread A did not
complete `UpdateCompletedSerial(3)` yet, the actual
value of `mCompletedSerial == 1`. As a result, the
assertion fails.
- This temporary change should fix the crashes we are seeing in
the bugs, but a follow up more extensive change will be done
to make sure that serials in `ExecutionQueue` are a bit more
consistent in a multithreaded environment.
Bug: 419598089, 420681969
Change-Id: I8c3002379cec1ce0ab10e314cf3cd9d3a3512314
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/244035
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Auto-Submit: Loko Kung <lokokung@google.com>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
diff --git a/src/dawn/native/vulkan/QueueVk.cpp b/src/dawn/native/vulkan/QueueVk.cpp
index 14a3ac6..34082be 100644
--- a/src/dawn/native/vulkan/QueueVk.cpp
+++ b/src/dawn/native/vulkan/QueueVk.cpp
@@ -492,7 +492,6 @@
if (waitFence == VK_NULL_HANDLE) {
// Fence not found. This serial must have already completed.
// Return a VK_SUCCESS status.
- DAWN_ASSERT(serial <= GetCompletedCommandSerial());
return VkResult::WrapUnsafe(VK_SUCCESS);
}
// Wait for the fence.