commit | 78ae359ba45cab3ca44495b1a040f2f4a6b5cf01 | [log] [tgz] |
---|---|---|
author | Lokbondo Kung <lokokung@google.com> | Tue May 27 20:45:07 2025 -0700 |
committer | Dawn LUCI CQ <dawn-scoped@luci-project-accounts.iam.gserviceaccount.com> | Tue May 27 20:45:07 2025 -0700 |
tree | 57070b33ab3b0abcd2c03e90ff5d8105d5b606ae | |
parent | 0305ffbaf17646a1965964b8fb2081e652c07a70 [diff] |
[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>
Dawn is an open-source and cross-platform implementation of the WebGPU standard. More precisely it implements webgpu.h
that is a one-to-one mapping with the WebGPU IDL. Dawn is meant to be integrated as part of a larger system and is the underlying implementation of WebGPU in Chromium.
Dawn provides several WebGPU building blocks:
webgpu.h
version that Dawn implements.webgpu.h
.Helpful links:
Developer documentation:
User documentation: (TODO, figure out what overlaps with the webgpu.h docs)
BSD 3-Clause License, please see LICENSE.
This is not an officially supported Google product.