Vulkan: Load functions for surface extensions we support.
Previously the surface extensions were only enabled so we could import
VkSurfaceKHR's created from GLFW. To implement the webgpu.h
surface-based swapchains, we are going to use the extension entrypoints
too.
This changes vulkan_platform.h to set defines that make vulkan.h expose
the entrypoints and datatypes for all the Vulkan extensions we might
care about for a given compilation configuration.
Bug: dawn:269
Change-Id: If4202ff5e31c816eccb5f5381bd36b660a3b6c5b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/17964
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/src/common/vulkan_platform.h b/src/common/vulkan_platform.h
index fb02018..3478fd6 100644
--- a/src/common/vulkan_platform.h
+++ b/src/common/vulkan_platform.h
@@ -143,6 +143,31 @@
} \
} // namespace dawn_native::vulkan
+// Import additional parts of Vulkan that are supported on our architecture and preemptively include
+// headers that vulkan.h includes that we have "undefs" for.
+#if defined(DAWN_PLATFORM_WINDOWS)
+# define VK_USE_PLATFORM_WIN32_KHR
+# include "common/windows_with_undefs.h"
+#endif // DAWN_PLATFORM_WINDOWS
+
+#if defined(DAWN_USE_X11)
+# define VK_USE_PLATFORM_XLIB_KHR
+# include "common/xlib_with_undefs.h"
+#endif // defined(DAWN_USE_X11)
+
+#if defined(DAWN_ENABLE_BACKEND_METAL)
+# define VK_USE_PLATFORM_METAL_EXT
+#endif // defined(DAWN_ENABLE_BACKEND_METAL)
+
+#if defined(DAWN_PLATFORM_ANDROID)
+# define VK_USE_PLATFORM_ANDROID_KHR
+#endif // defined(DAWN_PLATFORM_ANDROID)
+
+#if defined(DAWN_PLATFORM_FUCHSIA)
+# define VK_USE_PLATFORM_FUCHSIA
+#endif // defined(DAWN_PLATFORM_FUCHSIA)
+
+// The actual inclusion of vulkan.h!
#define VK_NO_PROTOTYPES
#include <vulkan/vulkan.h>
@@ -156,18 +181,9 @@
# error "Unsupported platform"
#endif
-// Remove windows.h macros after vulkan_platform's include of windows.h
-#if defined(DAWN_PLATFORM_WINDOWS)
-# include "common/windows_with_undefs.h"
-#endif
-// Remove X11/Xlib.h macros after vulkan_platform's include of it.
-#if defined(DAWN_USE_X11)
-# include "common/xlib_with_undefs.h"
-#endif
-
// Include Fuchsia-specific definitions that are not upstreamed yet.
#if defined(DAWN_PLATFORM_FUCHSIA)
# include <vulkan/vulkan_fuchsia_extras.h>
-#endif
+#endif // defined(DAWN_PLATFORM_FUCHSIA)
#endif // COMMON_VULKANPLATFORM_H_
diff --git a/src/dawn_native/vulkan/VulkanFunctions.cpp b/src/dawn_native/vulkan/VulkanFunctions.cpp
index 5d17fae..3d9aee0 100644
--- a/src/dawn_native/vulkan/VulkanFunctions.cpp
+++ b/src/dawn_native/vulkan/VulkanFunctions.cpp
@@ -116,12 +116,31 @@
GET_INSTANCE_PROC(GetPhysicalDeviceSurfacePresentModesKHR);
}
-#ifdef VK_USE_PLATFORM_FUCHSIA
+#if defined(VK_USE_PLATFORM_FUCHSIA)
if (globalInfo.fuchsiaImagePipeSurface) {
GET_INSTANCE_PROC(CreateImagePipeSurfaceFUCHSIA);
}
-#endif
+#endif // defined(VK_USE_PLATFORM_FUCHSIA)
+#if defined(DAWN_ENABLE_BACKEND_METAL)
+ if (globalInfo.metalSurface) {
+ GET_INSTANCE_PROC(CreateMetalSurfaceEXT);
+ }
+#endif // defined(DAWN_ENABLE_BACKEND_METAL)
+
+#if defined(DAWN_PLATFORM_WINDOWS)
+ if (globalInfo.win32Surface) {
+ GET_INSTANCE_PROC(CreateWin32SurfaceKHR);
+ GET_INSTANCE_PROC(GetPhysicalDeviceWin32PresentationSupportKHR);
+ }
+#endif // defined(DAWN_PLATFORM_WINDOWS)
+
+#if defined(DAWN_USE_X11)
+ if (globalInfo.xlibSurface) {
+ GET_INSTANCE_PROC(CreateXlibSurfaceKHR);
+ GET_INSTANCE_PROC(GetPhysicalDeviceXlibPresentationSupportKHR);
+ }
+#endif // defined(DAWN_USE_X11)
return {};
}
diff --git a/src/dawn_native/vulkan/VulkanFunctions.h b/src/dawn_native/vulkan/VulkanFunctions.h
index e59ac09..1f0a453 100644
--- a/src/dawn_native/vulkan/VulkanFunctions.h
+++ b/src/dawn_native/vulkan/VulkanFunctions.h
@@ -107,10 +107,29 @@
PFN_vkGetPhysicalDeviceSparseImageFormatProperties2
GetPhysicalDeviceSparseImageFormatProperties2 = nullptr;
-#ifdef VK_USE_PLATFORM_FUCHSIA
+#if defined(VK_USE_PLATFORM_FUCHSIA)
// FUCHSIA_image_pipe_surface
PFN_vkCreateImagePipeSurfaceFUCHSIA CreateImagePipeSurfaceFUCHSIA = nullptr;
-#endif
+#endif // defined(VK_USE_PLATFORM_FUCHSIA)
+
+#if defined(DAWN_ENABLE_BACKEND_METAL)
+ // EXT_metal_surface
+ PFN_vkCreateMetalSurfaceEXT CreateMetalSurfaceEXT = nullptr;
+#endif // defined(DAWN_ENABLE_BACKEND_METAL)
+
+#if defined(DAWN_PLATFORM_WINDOWS)
+ // KHR_win32_surface
+ PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR = nullptr;
+ PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR
+ GetPhysicalDeviceWin32PresentationSupportKHR = nullptr;
+#endif // defined(DAWN_PLATFORM_WINDOWS)
+
+#if defined(DAWN_USE_X11)
+ // KHR_xlib_surface
+ PFN_vkCreateXlibSurfaceKHR CreateXlibSurfaceKHR = nullptr;
+ PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR
+ GetPhysicalDeviceXlibPresentationSupportKHR = nullptr;
+#endif // defined(DAWN_USE_X11)
// ---------- Device procs
diff --git a/third_party/BUILD.gn b/third_party/BUILD.gn
index 6ecb9cb..af046c8 100644
--- a/third_party/BUILD.gn
+++ b/third_party/BUILD.gn
@@ -27,18 +27,6 @@
config("vulkan_headers_config") {
include_dirs = [ "khronos" ]
- if (is_win) {
- defines = [ "VK_USE_PLATFORM_WIN32_KHR" ]
- }
- if (is_linux && !is_chromeos) {
- defines = [ "VK_USE_PLATFORM_XCB_KHR" ]
- }
- if (is_android) {
- defines = [ "VK_USE_PLATFORM_ANDROID_KHR" ]
- }
- if (is_fuchsia) {
- defines = [ "VK_USE_PLATFORM_FUCHSIA" ]
- }
}
source_set("vulkan_headers") {