vulkan: Use newer VK_EXT_metal_surface to create surface for MoltenVK.
This commit is contained in:
parent
a10bdaf934
commit
e146a00345
4 changed files with 19 additions and 15 deletions
|
@ -19,11 +19,9 @@
|
|||
#include <windows.h>
|
||||
// ensure include order
|
||||
#include <vulkan/vulkan_win32.h>
|
||||
#elif defined(__APPLE__)
|
||||
#include <vulkan/vulkan_macos.h>
|
||||
#elif defined(__ANDROID__)
|
||||
#include <vulkan/vulkan_android.h>
|
||||
#else
|
||||
#elif !defined(__APPLE__)
|
||||
#include <X11/Xlib.h>
|
||||
#include <vulkan/vulkan_wayland.h>
|
||||
#include <vulkan/vulkan_xlib.h>
|
||||
|
@ -68,7 +66,7 @@ namespace {
|
|||
break;
|
||||
#elif defined(__APPLE__)
|
||||
case Core::Frontend::WindowSystemType::Cocoa:
|
||||
extensions.push_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME);
|
||||
extensions.push_back(VK_EXT_METAL_SURFACE_EXTENSION_NAME);
|
||||
break;
|
||||
#elif defined(__ANDROID__)
|
||||
case Core::Frontend::WindowSystemType::Android:
|
||||
|
|
|
@ -11,11 +11,9 @@
|
|||
#include <windows.h>
|
||||
// ensure include order
|
||||
#include <vulkan/vulkan_win32.h>
|
||||
#elif defined(__APPLE__)
|
||||
#include <vulkan/vulkan_macos.h>
|
||||
#elif defined(__ANDROID__)
|
||||
#include <vulkan/vulkan_android.h>
|
||||
#else
|
||||
#elif !defined(__APPLE__)
|
||||
#include <X11/Xlib.h>
|
||||
#include <vulkan/vulkan_wayland.h>
|
||||
#include <vulkan/vulkan_xlib.h>
|
||||
|
@ -44,12 +42,13 @@ vk::SurfaceKHR CreateSurface(
|
|||
}
|
||||
#elif defined(__APPLE__)
|
||||
if (window_info.type == Core::Frontend::WindowSystemType::Cocoa) {
|
||||
const VkMacOSSurfaceCreateInfoMVK mvk_ci{VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK,
|
||||
nullptr, 0, window_info.render_surface};
|
||||
const auto vkCreateMacOSSurfaceMVK = reinterpret_cast<PFN_vkCreateMacOSSurfaceMVK>(
|
||||
dld.vkGetInstanceProcAddr(*instance, "vkCreateMacOSSurfaceMVK"));
|
||||
if (!vkCreateMacOSSurfaceMVK ||
|
||||
vkCreateMacOSSurfaceMVK(*instance, &mvk_ci, nullptr, &unsafe_surface) != VK_SUCCESS) {
|
||||
const VkMetalSurfaceCreateInfoEXT macos_ci = {
|
||||
.pLayer = static_cast<const CAMetalLayer*>(window_info.render_surface),
|
||||
};
|
||||
const auto vkCreateMetalSurfaceEXT = reinterpret_cast<PFN_vkCreateMetalSurfaceEXT>(
|
||||
dld.vkGetInstanceProcAddr(*instance, "vkCreateMetalSurfaceEXT"));
|
||||
if (!vkCreateMetalSurfaceEXT ||
|
||||
vkCreateMetalSurfaceEXT(*instance, &macos_ci, nullptr, &unsafe_surface) != VK_SUCCESS) {
|
||||
LOG_ERROR(Render_Vulkan, "Failed to initialize Metal surface");
|
||||
throw vk::Exception(VK_ERROR_INITIALIZATION_FAILED);
|
||||
}
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
#define VK_NO_PROTOTYPES
|
||||
#ifdef _WIN32
|
||||
#define VK_USE_PLATFORM_WIN32_KHR
|
||||
#elif defined(__APPLE__)
|
||||
#define VK_USE_PLATFORM_METAL_EXT
|
||||
#endif
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue