commit | 4d94647e1f0c6c0dbd43fe0cf09124af2bdcc6ec | [log] [tgz] |
---|---|---|
author | Brian Ho <hob@chromium.org> | Wed Jul 21 17:49:20 2021 +0000 |
committer | Dawn LUCI CQ <dawn-scoped@luci-project-accounts.iam.gserviceaccount.com> | Wed Jul 21 17:49:20 2021 +0000 |
tree | c9805ac3a3f4de3eec699c1b2838aedf2e8799c8 | |
parent | c635acdfba3da241cf106580a90ceb9d2e043802 [diff] |
Vulkan: Export VkSemaphores as SYNC_FDs instead of OPAQUE_FDs 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>
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.h
version that Dawn implements.webgpu.h
.Helpful links:
Developer documentation:
User documentation: (TODO, figure out what overlaps with the webgpu.h docs)
(TODO)
Apache 2.0 Public License, please see LICENSE.
This is not an officially supported Google product.