|  |  | @ -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.EXT_metal_surface) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     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[0] = "VK_KHR_surface"; | 
			
		
	
		
		
			
				
					
					|  |  |  |         extensions[1] = "VK_EXT_metal_surface"; |  |  |  |         extensions[1] = "VK_EXT_metal_surface"; | 
			
		
	
		
		
			
				
					
					|  |  |  | #endif |  |  |  |     } | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     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)); |  |  |  |     VkResult err; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | #if defined(VK_USE_PLATFORM_MACOS_MVK) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     sci.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     sci.pView = window->ns.view; |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     err = vkCreateMacOSSurfaceMVK(instance, &sci, allocator, surface); |  |  |  |     if (_glfw.vk.EXT_metal_surface) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         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; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #elif defined(VK_USE_PLATFORM_METAL_EXT) |  |  |  |         memset(&sci, 0, sizeof(sci)); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         sci.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; |  |  |  |         sci.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; | 
			
		
	
		
		
			
				
					
					|  |  |  |     sci.pNext = NULL; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     sci.flags = 0; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sci.pLayer = window->ns.layer; |  |  |  |         sci.pLayer = window->ns.layer; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         err = vkCreateMetalSurfaceEXT(instance, &sci, allocator, surface); |  |  |  |         err = vkCreateMetalSurfaceEXT(instance, &sci, allocator, surface); | 
			
		
	
		
		
			
				
					
					|  |  |  | #endif |  |  |  |     } | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     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); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (err) |  |  |  |     if (err) | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         _glfwInputError(GLFW_PLATFORM_ERROR, |  |  |  |         _glfwInputError(GLFW_PLATFORM_ERROR, | 
			
		
	
	
		
		
			
				
					|  |  | 
 |