|
@@ -1715,19 +1715,16 @@ 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)
|
|
|
|
- return;
|
|
|
|
-
|
|
|
|
- extensions[0] = "VK_KHR_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
|
|
|
|
|
|
+ if (_glfw.vk.KHR_surface && _glfw.vk.EXT_metal_surface)
|
|
|
|
+ {
|
|
|
|
+ extensions[0] = "VK_KHR_surface";
|
|
|
|
+ extensions[1] = "VK_EXT_metal_surface";
|
|
|
|
+ }
|
|
|
|
+ else if (_glfw.vk.KHR_surface && _glfw.vk.MVK_macos_surface)
|
|
|
|
+ {
|
|
|
|
+ extensions[0] = "VK_KHR_surface";
|
|
|
|
+ extensions[1] = "VK_MVK_macos_surface";
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance,
|
|
int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance,
|
|
@@ -1745,35 +1742,6 @@ VkResult _glfwPlatformCreateWindowSurface(VkInstance instance,
|
|
@autoreleasepool {
|
|
@autoreleasepool {
|
|
|
|
|
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101100
|
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101100
|
|
- VkResult err;
|
|
|
|
-
|
|
|
|
-#if defined(VK_USE_PLATFORM_MACOS_MVK)
|
|
|
|
- VkMacOSSurfaceCreateInfoMVK sci;
|
|
|
|
-
|
|
|
|
- PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK;
|
|
|
|
- vkCreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK)
|
|
|
|
- vkGetInstanceProcAddr(instance, "vkCreateMacOSSurfaceMVK");
|
|
|
|
- if (!vkCreateMacOSSurfaceMVK)
|
|
|
|
- {
|
|
|
|
- _glfwInputError(GLFW_API_UNAVAILABLE,
|
|
|
|
- "Cocoa: Vulkan instance missing VK_MVK_macos_surface extension");
|
|
|
|
- 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"];
|
|
@@ -1799,21 +1767,49 @@ VkResult _glfwPlatformCreateWindowSurface(VkInstance instance,
|
|
[window->ns.view setLayer:window->ns.layer];
|
|
[window->ns.view setLayer:window->ns.layer];
|
|
[window->ns.view setWantsLayer:YES];
|
|
[window->ns.view setWantsLayer:YES];
|
|
|
|
|
|
- memset(&sci, 0, sizeof(sci));
|
|
|
|
-#if defined(VK_USE_PLATFORM_MACOS_MVK)
|
|
|
|
- sci.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
|
|
|
|
- sci.pView = window->ns.view;
|
|
|
|
|
|
+ VkResult err;
|
|
|
|
+
|
|
|
|
+ if (_glfw.vk.EXT_metal_surface)
|
|
|
|
+ {
|
|
|
|
+ VkMetalSurfaceCreateInfoEXT sci;
|
|
|
|
|
|
- err = vkCreateMacOSSurfaceMVK(instance, &sci, allocator, surface);
|
|
|
|
|
|
+ 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;
|
|
|
|
+ }
|
|
|
|
|
|
-#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;
|
|
|
|
|
|
+ memset(&sci, 0, sizeof(sci));
|
|
|
|
+ sci.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
|
|
|
|
+ sci.pLayer = window->ns.layer;
|
|
|
|
+
|
|
|
|
+ err = vkCreateMetalSurfaceEXT(instance, &sci, allocator, surface);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ VkMacOSSurfaceCreateInfoMVK sci;
|
|
|
|
+
|
|
|
|
+ PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK;
|
|
|
|
+ vkCreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK)
|
|
|
|
+ vkGetInstanceProcAddr(instance, "vkCreateMacOSSurfaceMVK");
|
|
|
|
+ if (!vkCreateMacOSSurfaceMVK)
|
|
|
|
+ {
|
|
|
|
+ _glfwInputError(GLFW_API_UNAVAILABLE,
|
|
|
|
+ "Cocoa: Vulkan instance missing VK_MVK_macos_surface extension");
|
|
|
|
+ return VK_ERROR_EXTENSION_NOT_PRESENT;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ memset(&sci, 0, sizeof(sci));
|
|
|
|
+ sci.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
|
|
|
|
+ sci.pView = window->ns.view;
|
|
|
|
+
|
|
|
|
+ err = vkCreateMacOSSurfaceMVK(instance, &sci, allocator, surface);
|
|
|
|
+ }
|
|
|
|
|
|
- err = vkCreateMetalSurfaceEXT(instance, &sci, allocator, surface);
|
|
|
|
-#endif
|
|
|
|
if (err)
|
|
if (err)
|
|
{
|
|
{
|
|
_glfwInputError(GLFW_PLATFORM_ERROR,
|
|
_glfwInputError(GLFW_PLATFORM_ERROR,
|