Add wrapping for using external vulkan images as textures
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>
diff --git a/BUILD.gn b/BUILD.gn
index aed63b1..4375a36 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -362,6 +362,7 @@
"src/dawn_native/vulkan/ComputePipelineVk.h",
"src/dawn_native/vulkan/DeviceVk.cpp",
"src/dawn_native/vulkan/DeviceVk.h",
+ "src/dawn_native/vulkan/ExternalHandle.h",
"src/dawn_native/vulkan/FencedDeleter.cpp",
"src/dawn_native/vulkan/FencedDeleter.h",
"src/dawn_native/vulkan/Forward.h",
@@ -395,7 +396,21 @@
"src/dawn_native/vulkan/VulkanFunctions.h",
"src/dawn_native/vulkan/VulkanInfo.cpp",
"src/dawn_native/vulkan/VulkanInfo.h",
+ "src/dawn_native/vulkan/external_memory/MemoryService.h",
+ "src/dawn_native/vulkan/external_semaphore/SemaphoreService.h",
]
+
+ if (is_linux) {
+ sources += [
+ "src/dawn_native/vulkan/external_memory/MemoryServiceOpaqueFD.cpp",
+ "src/dawn_native/vulkan/external_semaphore/SemaphoreServiceOpaqueFD.cpp",
+ ]
+ } else {
+ sources += [
+ "src/dawn_native/vulkan/external_memory/MemoryServiceNull.cpp",
+ "src/dawn_native/vulkan/external_semaphore/SemaphoreServiceNull.cpp",
+ ]
+ }
}
}
@@ -667,8 +682,9 @@
}
}
-test("dawn_end2end_tests") {
+source_set("dawn_end2end_tests_sources") {
configs += [ "${dawn_root}/src/common:dawn_internal" ]
+ testonly = true
deps = [
":dawn_utils",
@@ -681,7 +697,6 @@
]
sources = [
- "src/tests/DawnTest.cpp",
"src/tests/DawnTest.h",
"src/tests/end2end/BasicTests.cpp",
"src/tests/end2end/BindGroupTests.cpp",
@@ -729,6 +744,59 @@
libs += [ "IOSurface.framework" ]
}
+}
+
+source_set("dawn_white_box_tests_sources") {
+ configs += [ "${dawn_root}/src/common:dawn_internal" ]
+ testonly = true
+
+ deps = [
+ ":dawn_utils",
+ ":libdawn_native",
+ ":libdawn_native_sources",
+ ":libdawn_wire",
+ "${dawn_root}/src/common",
+ "${dawn_root}/src/dawn:libdawn",
+ "third_party:glfw",
+ "third_party:gmock_and_gtest",
+ ]
+
+ sources = [
+ "src/tests/DawnTest.h",
+ ]
+
+ if (dawn_enable_vulkan) {
+ deps += [ "third_party:vulkan_headers" ]
+
+ if (is_linux) {
+ sources += [ "src/tests/white_box/VulkanImageWrappingTests.cpp" ]
+ }
+ }
+
+ libs = []
+}
+
+test("dawn_end2end_tests") {
+ configs += [ "${dawn_root}/src/common:dawn_internal" ]
+
+ deps = [
+ ":dawn_end2end_tests_sources",
+ ":dawn_utils",
+ ":dawn_white_box_tests_sources",
+ ":libdawn_native",
+ ":libdawn_wire",
+ "${dawn_root}/src/common",
+ "${dawn_root}/src/dawn:libdawn",
+ "third_party:glfw",
+ "third_party:gmock_and_gtest",
+ ]
+
+ sources = [
+ "src/tests/DawnTest.cpp",
+ "src/tests/DawnTest.h",
+ ]
+
+ libs = []
# When building inside Chromium, use their gtest main function because it is
# needed to run in swarming correctly.