This CL is part of a chain of CLs that imports dma-bufs as VkImages
to support WebGPU on Chrome OS.
There are currently two steps for importing external memory into
Vulkan:
1. DeviceVk::ImportExternalImage: calls into
MemoryServiceOpaqueFD::ImportMemory which in turn calls into
vkAllocateMemory and outputs a VkDeviceMemory handle to the
imported memory.
2. TextureVk::CreateFromExternal: creates the actual TextureVk
object, creates the VkImage, and binds the VkDeviceMemory from
ImportExternalImage to the VkImage.
For dma-buf support, however, we need to re-order these two steps
because importing dma-buf memory requires a handle to the VkImage
that will alias it [1].
This CL splits these two steps into three steps to ensure we create
the VkImage first so we can use it in vkAllocateMemory:
1. TextureVk::CreateFromExternal: creates the TextureVk and
VkImage (no longer concerns itself with vkBindImageMemory).
2. DeviceVk::ImportExternalImage: now takes the VkImage as input
but is otherwise unchanged.
3. TextureVk::BindExternalMemory: calls vkBindImageMemory with
handles to VkDeviceMemory and VkImage.
[1] https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkMemoryDedicatedAllocateInfo.html
BUG=chromium:996470
Change-Id: Id2d5951e9b573af79c44ce8c63be5210a279f946
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13780
Commit-Queue: Brian Ho <hob@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Checks if we support specific handles and specific usages on the
current device. If we don't, Supported() fails and we stop the import.
Bug: chromium:976495
Change-Id: Icfe044a3c4d912913823728100888ab05f22afd5
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10160
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Idan Raiter <idanr@google.com>
This change adds platform-dependent services that handle creating
semaphores and importing image memory. Then, we use them to wrap a
texture from an outside source, and release a signal semaphore back
when we're done with it. This will be used to allow chrome to render
dawn on Vulkan platforms.
Bug: chromium:976495
Change-Id: I9f07eaf436e10aa6bd88cffdc74fd23834d62ee0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/8340
Commit-Queue: Idan Raiter <idanr@google.com>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>