commit | ce0659e06b9c7da83f8627966eaa906a4a74005f | [log] [tgz] |
---|---|---|
author | Lokbondo Kung <lokokung@google.com> | Wed Jul 02 22:28:34 2025 -0700 |
committer | Dawn LUCI CQ <dawn-scoped@luci-project-accounts.iam.gserviceaccount.com> | Wed Jul 02 22:28:34 2025 -0700 |
tree | 70f24174fc72a29f075f5db9933f5fa9510dc5ee | |
parent | f11197d3fd47bffc3ce5f0948ceb0ef3249bf8b7 [diff] |
[dawn][native] Make a separate entry point for ExecutionQueue for callbacks. - We have seen lock inversion issues w.r.t the lock in ExecutionQueue and the device lock before (see 417802523). In order to avoid this as the device-lock is a temporary solution for multithreading, this change introduces a separate function that we can use to implement new code without running into the lock ordering issue. - This change also depends on the fact that the device lock is now recursively acquireable and makes all implementations (modulo Metal) explicitly acquire the device lock for CheckAndUpdateCompletedSerials. We may be able to remove some of those locks, as we go forwards hence the TODOs. - This change reverts the change in: https://dawn-review.googlesource.com/c/dawn/+/246534 so that we can guarantee callback ordering. For context, if we call the callbacks like we did before outside of the lock after moving them into a temporary vector, two threads updating serials 1 and 2 respectively can race and each remove one task, then in the non-critical section, serial 2's thread can run first resulting in what appears to be out of order callback execution. This design has some restrictions documented in the comments, but may be alleviated in the future if needed by using a recursive mutex for the waiting tasks in ExecutionQueue. Bug: 412761228, 412761367, 40643114, 42240396 Change-Id: I61b217db066d09f22756c5a242968cffc9c9f19c Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/249099 Commit-Queue: Loko Kung <lokokung@google.com> Reviewed-by: Kai Ninomiya <kainino@chromium.org> Reviewed-by: Corentin Wallez <cwallez@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.