diff options
| author | Stenzek <stenzek@gmail.com> | 2020-04-07 18:49:40 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2020-04-07 18:56:55 +1000 |
| commit | a2f4fafe86b8407ecbe1228257ab993fd2c1b815 (patch) | |
| tree | 1c26191fd452ff8dd74a9cb230e912cd8861fb9d /Source/Core/VideoBackends/Vulkan/SwapChain.cpp | |
| parent | 52d47566791672309ba984b22dd420168e88beb3 (diff) | |
Vulkan: Switch from vkCreateMacOSSurfaceMVK() to vkCreateMetalSurfaceEXT()
Since we are calling this off the UI thread, we can't use anything which
accesses the underlying NSView object. We create and set the Metal layer
on the UI thread before the video backend is initialized. This extension
is both compatible with MoltenVK and gfx-portability for accepting a
layer at surface creation.
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/SwapChain.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/SwapChain.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/SwapChain.cpp b/Source/Core/VideoBackends/Vulkan/SwapChain.cpp index 66f20e5a6e..7c2d8c09fa 100644 --- a/Source/Core/VideoBackends/Vulkan/SwapChain.cpp +++ b/Source/Core/VideoBackends/Vulkan/SwapChain.cpp @@ -107,17 +107,18 @@ VkSurfaceKHR SwapChain::CreateVulkanSurface(VkInstance instance, const WindowSys } #endif -#if defined(VK_USE_PLATFORM_MACOS_MVK) +#if defined(VK_USE_PLATFORM_METAL_EXT) if (wsi.type == WindowSystemType::MacOS) { - VkMacOSSurfaceCreateInfoMVK surface_create_info = { - VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK, nullptr, 0, wsi.render_surface}; + VkMetalSurfaceCreateInfoEXT surface_create_info = { + VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT, nullptr, 0, + static_cast<const CAMetalLayer*>(wsi.render_surface)}; VkSurfaceKHR surface; - VkResult res = vkCreateMacOSSurfaceMVK(instance, &surface_create_info, nullptr, &surface); + VkResult res = vkCreateMetalSurfaceEXT(instance, &surface_create_info, nullptr, &surface); if (res != VK_SUCCESS) { - LOG_VULKAN_ERROR(res, "vkCreateMacOSSurfaceMVK failed: "); + LOG_VULKAN_ERROR(res, "vkCreateMetalSurfaceEXT failed: "); return VK_NULL_HANDLE; } |
