27 #include "../../SDL_internal.h"
29 #if SDL_VIDEO_VULKAN && SDL_VIDEO_DRIVER_COCOA
42 const char* defaultPaths[] = {
43 "vulkan.framework/vulkan",
45 "MoltenVK.framework/MoltenVK",
50 #define DEFAULT_HANDLE RTLD_DEFAULT
52 int Cocoa_Vulkan_LoadLibrary(
_THIS,
const char *
path)
75 "vkGetInstanceProcAddr");
82 const char *foundPath =
NULL;
102 return SDL_SetError(
"Failed to load Vulkan/MoltenVK library");
112 SDL_SetError(
"Failed to find %s in either executable or %s: %s",
113 "vkGetInstanceProcAddr",
115 (
const char *) dlerror());
126 extensions = SDL_Vulkan_CreateInstanceExtensionsList(
133 for (
Uint32 i = 0;
i < extensionCount;
i++) {
136 }
else if (
SDL_strcmp(VK_MVK_MACOS_SURFACE_EXTENSION_NAME, extensions[
i].extensionName) == 0) {
137 hasMacOSSurfaceExtension =
SDL_TRUE;
141 if (!hasSurfaceExtension) {
142 SDL_SetError(
"Installed MoltenVK/Vulkan doesn't implement the "
145 }
else if (!hasMacOSSurfaceExtension) {
146 SDL_SetError(
"Installed MoltenVK/Vulkan doesn't implement the "
147 VK_MVK_MACOS_SURFACE_EXTENSION_NAME
"extension");
158 void Cocoa_Vulkan_UnloadLibrary(
_THIS)
173 static const char *
const extensionsForCocoa[] = {
180 return SDL_Vulkan_GetInstanceExtensions_Helper(
192 PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK =
195 "vkCreateMacOSSurfaceMVK");
196 VkMacOSSurfaceCreateInfoMVK createInfo = {};
204 if (!vkCreateMacOSSurfaceMVK) {
206 " extension is not enabled in the Vulkan instance.");
210 createInfo.pNext =
NULL;
211 createInfo.flags = 0;
212 createInfo.pView = Cocoa_Mtl_AddMetalView(
window);
217 SDL_Vulkan_GetResultString(
result));
225 Cocoa_Mtl_GetDrawableSize(
window,
w,
h);