|
@@ -1715,11 +1715,19 @@ const char* _glfwPlatformGetClipboardString(void)
|
|
|
|
|
|
void _glfwPlatformGetRequiredInstanceExtensions(char** extensions)
|
|
void _glfwPlatformGetRequiredInstanceExtensions(char** extensions)
|
|
{
|
|
{
|
|
|
|
+#if defined(VK_USE_PLATFORM_MACOS_MVK)
|
|
if (!_glfw.vk.KHR_surface || !_glfw.vk.MVK_macos_surface)
|
|
if (!_glfw.vk.KHR_surface || !_glfw.vk.MVK_macos_surface)
|
|
return;
|
|
return;
|
|
|
|
|
|
extensions[0] = "VK_KHR_surface";
|
|
extensions[0] = "VK_KHR_surface";
|
|
extensions[1] = "VK_MVK_macos_surface";
|
|
extensions[1] = "VK_MVK_macos_surface";
|
|
|
|
+
|
|
|
|
+#elif defined(VK_USE_PLATFORM_METAL_EXT)
|
|
|
|
+ if (!_glfw.vk.KHR_surface || !_glfw.vk.EXT_metal_surface)
|
|
|
|
+ return;
|
|
|
|
+ extensions[0] = "VK_KHR_surface";
|
|
|
|
+ extensions[1] = "VK_EXT_metal_surface";
|
|
|
|
+#endif
|
|
}
|
|
}
|
|
|
|
|
|
int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance,
|
|
int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance,
|
|
@@ -1738,9 +1746,11 @@ VkResult _glfwPlatformCreateWindowSurface(VkInstance instance,
|
|
|
|
|
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101100
|
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101100
|
|
VkResult err;
|
|
VkResult err;
|
|
|
|
+
|
|
|
|
+#if defined(VK_USE_PLATFORM_MACOS_MVK)
|
|
VkMacOSSurfaceCreateInfoMVK sci;
|
|
VkMacOSSurfaceCreateInfoMVK sci;
|
|
- PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK;
|
|
|
|
|
|
|
|
|
|
+ PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK;
|
|
vkCreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK)
|
|
vkCreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK)
|
|
vkGetInstanceProcAddr(instance, "vkCreateMacOSSurfaceMVK");
|
|
vkGetInstanceProcAddr(instance, "vkCreateMacOSSurfaceMVK");
|
|
if (!vkCreateMacOSSurfaceMVK)
|
|
if (!vkCreateMacOSSurfaceMVK)
|
|
@@ -1750,6 +1760,20 @@ VkResult _glfwPlatformCreateWindowSurface(VkInstance instance,
|
|
return VK_ERROR_EXTENSION_NOT_PRESENT;
|
|
return VK_ERROR_EXTENSION_NOT_PRESENT;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#elif defined(VK_USE_PLATFORM_METAL_EXT)
|
|
|
|
+ VkMetalSurfaceCreateInfoEXT sci;
|
|
|
|
+
|
|
|
|
+ PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT;
|
|
|
|
+ vkCreateMetalSurfaceEXT = (PFN_vkCreateMetalSurfaceEXT)
|
|
|
|
+ vkGetInstanceProcAddr(instance, "vkCreateMetalSurfaceEXT");
|
|
|
|
+ if (!vkCreateMetalSurfaceEXT)
|
|
|
|
+ {
|
|
|
|
+ _glfwInputError(GLFW_API_UNAVAILABLE,
|
|
|
|
+ "Cocoa: Vulkan instance missing VK_EXT_metal_surface extension");
|
|
|
|
+ return VK_ERROR_EXTENSION_NOT_PRESENT;
|
|
|
|
+ }
|
|
|
|
+#endif
|
|
|
|
+
|
|
// HACK: Dynamically load Core Animation to avoid adding an extra
|
|
// HACK: Dynamically load Core Animation to avoid adding an extra
|
|
// dependency for the majority who don't use MoltenVK
|
|
// dependency for the majority who don't use MoltenVK
|
|
NSBundle* bundle = [NSBundle bundleWithPath:@"/System/Library/Frameworks/QuartzCore.framework"];
|
|
NSBundle* bundle = [NSBundle bundleWithPath:@"/System/Library/Frameworks/QuartzCore.framework"];
|
|
@@ -1776,10 +1800,20 @@ VkResult _glfwPlatformCreateWindowSurface(VkInstance instance,
|
|
[window->ns.view setWantsLayer:YES];
|
|
[window->ns.view setWantsLayer:YES];
|
|
|
|
|
|
memset(&sci, 0, sizeof(sci));
|
|
memset(&sci, 0, sizeof(sci));
|
|
|
|
+#if defined(VK_USE_PLATFORM_MACOS_MVK)
|
|
sci.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
|
|
sci.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
|
|
sci.pView = window->ns.view;
|
|
sci.pView = window->ns.view;
|
|
|
|
|
|
err = vkCreateMacOSSurfaceMVK(instance, &sci, allocator, surface);
|
|
err = vkCreateMacOSSurfaceMVK(instance, &sci, allocator, surface);
|
|
|
|
+
|
|
|
|
+#elif defined(VK_USE_PLATFORM_METAL_EXT)
|
|
|
|
+ sci.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
|
|
|
|
+ sci.pNext = NULL;
|
|
|
|
+ sci.flags = 0;
|
|
|
|
+ sci.pLayer = window->ns.layer;
|
|
|
|
+
|
|
|
|
+ err = vkCreateMetalSurfaceEXT(instance, &sci, allocator, surface);
|
|
|
|
+#endif
|
|
if (err)
|
|
if (err)
|
|
{
|
|
{
|
|
_glfwInputError(GLFW_PLATFORM_ERROR,
|
|
_glfwInputError(GLFW_PLATFORM_ERROR,
|