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)
74 vkGetInstanceProcAddr =
76 "vkGetInstanceProcAddr");
79 if (vkGetInstanceProcAddr) {
112 if (!vkGetInstanceProcAddr) {
113 SDL_SetError(
"Failed to find %s in either executable or %s: %s",
114 "vkGetInstanceProcAddr",
116 (
const char *) dlerror());
127 extensions = SDL_Vulkan_CreateInstanceExtensionsList(
134 for (
Uint32 i = 0; i < extensionCount; i++) {
137 }
else if (
SDL_strcmp(VK_MVK_MACOS_SURFACE_EXTENSION_NAME, extensions[i].extensionName) == 0) {
138 hasMacOSSurfaceExtension =
SDL_TRUE;
142 if (!hasSurfaceExtension) {
143 SDL_SetError(
"Installed MoltenVK/Vulkan doesn't implement the " 146 }
else if (!hasMacOSSurfaceExtension) {
147 SDL_SetError(
"Installed MoltenVK/Vulkan doesn't implement the " 148 VK_MVK_MACOS_SURFACE_EXTENSION_NAME
"extension");
159 void Cocoa_Vulkan_UnloadLibrary(
_THIS)
174 static const char *
const extensionsForCocoa[] = {
181 return SDL_Vulkan_GetInstanceExtensions_Helper(
193 PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK =
195 (VkInstance)instance,
196 "vkCreateMacOSSurfaceMVK");
197 VkMacOSSurfaceCreateInfoMVK createInfo = {};
205 if (!vkCreateMacOSSurfaceMVK) {
207 " extension is not enabled in the Vulkan instance.");
211 createInfo.pNext =
NULL;
212 createInfo.flags = 0;
213 createInfo.pView = Cocoa_Mtl_AddMetalView(window);
214 result = vkCreateMacOSSurfaceMVK(instance, &createInfo,
218 SDL_Vulkan_GetResultString(result));
226 Cocoa_Mtl_GetDrawableSize(window, w, h);
#define VK_KHR_SURFACE_EXTENSION_NAME
struct SDL_VideoDevice::@35 vulkan_config
GLuint GLuint GLsizei count
GLfloat GLfloat GLfloat GLfloat h
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *pName)
PFN_vkVoidFunction(VKAPI_PTR * PFN_vkGetInstanceProcAddr)(VkInstance instance, const char *pName)
static SDL_VideoDevice * _this
GLubyte GLubyte GLubyte GLubyte w
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
EGLSurface EGLNativeWindowType * window
PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties
The type used to identify a window.
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr
#define SDL_arraysize(array)
GLsizei const GLchar *const * path
void * SDL_LoadFunction(void *handle, const char *name)
GLsizei const GLuint * paths
VkResult(VKAPI_PTR * PFN_vkEnumerateInstanceExtensionProperties)(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties)