CMake-only fork of https://dawn.googlesource.com/dawn with cleaned, vendored dependencies
4d94647e1f
For Dawn/Chrome interop, Chrome OS differs from Linux as it uses the NativePixmap-based SharedImageBacking which stores image memory as dma-bufs as opposed to opaque FDs. Likewise, for synchronization, Chrome OS wants to use sync obj FDs as opposed to opaque FDs for more flexibility. The motivating difference between sync obj FDs and their opaque counterparts is how they are created. As their name suggests, Opaque FDs are mostly meaningless outside of the Vulkan ecosystem and must be created from a VkDevice. As a result, Linux’s ExternalVkImageBacking needs the Vulkan implementation to create the FD even when accessing the SharedImage as a GL texture [1]. On Chrome OS, however, we don’t guarantee Vulkan outside of Dawn, so we aren’t able to create the opaque FD directly in Chrome. Instead, we are always able to create sync objs (e.g. via a fence [2]) which can be imported as VkSemaphores by simply changing VkImportSemaphoreFdInfoKHR::handleType. Similarly, we can export signal VkSemaphores as sync objs as well by updating VkSemaphoreGetFdInfoKHR::handleType. This CL adds conditional support for using SYNC_FDs on Chrome OS when importing/exporting VkSemaphores and renames SemaphoreServiceOpaqueFD accordingly. With this, we can properly wait on reads/writes on a GL SharedImage representation before accessing the same memory in Dawn [3]. [1] https://source.chromium.org/chromium/chromium/src/+/main:gpu/command_buffer/service/external_vk_image_gl_representation.cc;l=75;drc=f887797b3b527feabd5dfe9b3f2cc7f6deade49f [2] https://source.chromium.org/chromium/chromium/src/+/main:gpu/command_buffer/service/shared_image_backing_gl_image.cc;l=681;drc=f887797b3b527feabd5dfe9b3f2cc7f6deade49f [3] https://chromium-review.googlesource.com/c/chromium/src/+/3042460 BUG=b:172208313 Change-Id: I5357847fea40e41d1b982054e3573d363e17530c Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/59080 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Brian Ho <hob@chromium.org> |
||
---|---|---|
.vscode | ||
build_overrides | ||
docs | ||
examples | ||
generator | ||
infra/config | ||
scripts | ||
src | ||
third_party | ||
tools/memory/asan | ||
.clang-format | ||
.gitattributes | ||
.gitignore | ||
.gn | ||
AUTHORS | ||
BUILD.gn | ||
CMakeLists.txt | ||
DEPS | ||
DIR_METADATA | ||
LICENSE | ||
OWNERS | ||
PRESUBMIT.py | ||
README.chromium | ||
README.md | ||
codereview.settings | ||
dawn.json | ||
dawn_wire.json |
README.md
Dawn, a WebGPU implementation
Dawn is an open-source and cross-platform implementation of the work-in-progress 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 C/C++ headers that applications and other building blocks use.
- The
webgpu.h
version that Dawn implements. - A C++ wrapper for the
webgpu.h
.
- The
- A "native" implementation of WebGPU using platforms' GPU APIs:
- D3D12 on Windows 10
- Metal on macOS and iOS
- Vulkan on Windows, Linux, ChromeOS, Android and Fuchsia
- OpenGL as best effort where available
- A client-server implementation of WebGPU for applications that are in a sandbox without access to native drivers
Helpful links:
- Dawn's bug tracker if you find issues with Dawn.
- Dawn's mailing list for other discussions related to Dawn.
- Dawn's source code
- Dawn's Matrix chatroom for live discussion around contributing or using Dawn.
- WebGPU's Matrix chatroom
Documentation table of content
Developer documentation:
User documentation: (TODO, figure out what overlaps with the webgpu.h docs)
Status
(TODO)
License
Apache 2.0 Public License, please see LICENSE.
Disclaimer
This is not an officially supported Google product.