From 8ef1b734bdbe7e90d485f7cfe20c65e00fcceb13 Mon Sep 17 00:00:00 2001 From: lizzie Date: Thu, 27 Nov 2025 01:26:28 +0000 Subject: [PATCH] enable macos surface --- src/video_core/vulkan_common/vulkan.h | 4 ++++ src/video_core/vulkan_common/vulkan_instance.cpp | 2 ++ src/video_core/vulkan_common/vulkan_surface.cpp | 5 +---- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/video_core/vulkan_common/vulkan.h b/src/video_core/vulkan_common/vulkan.h index 13f679ff54..8f48d55799 100644 --- a/src/video_core/vulkan_common/vulkan.h +++ b/src/video_core/vulkan_common/vulkan.h @@ -22,6 +22,10 @@ #include +#ifndef VK_MVK_MACOS_SURFACE_EXTENSION_NAME +# define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface" +#endif + // Sanitize macros #undef CreateEvent #undef CreateSemaphore diff --git a/src/video_core/vulkan_common/vulkan_instance.cpp b/src/video_core/vulkan_common/vulkan_instance.cpp index d9404933cd..28655e91dc 100644 --- a/src/video_core/vulkan_common/vulkan_instance.cpp +++ b/src/video_core/vulkan_common/vulkan_instance.cpp @@ -54,6 +54,8 @@ namespace { #elif defined(__APPLE__) case Core::Frontend::WindowSystemType::Cocoa: extensions.push_back(VK_EXT_METAL_SURFACE_EXTENSION_NAME); + extensions.push_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME); + //extensions.push_back(VK_MVK_MOLTENVK_EXTENSION_NAME); break; #elif defined(__ANDROID__) case Core::Frontend::WindowSystemType::Android: diff --git a/src/video_core/vulkan_common/vulkan_surface.cpp b/src/video_core/vulkan_common/vulkan_surface.cpp index e68f46bcc5..514f2ff8c9 100644 --- a/src/video_core/vulkan_common/vulkan_surface.cpp +++ b/src/video_core/vulkan_common/vulkan_surface.cpp @@ -40,8 +40,7 @@ vk::SurfaceKHR CreateSurface( }; const auto vkCreateMetalSurfaceEXT = reinterpret_cast(dld.vkGetInstanceProcAddr(*instance, "vkCreateMetalSurfaceEXT")); if (!vkCreateMetalSurfaceEXT || vkCreateMetalSurfaceEXT(*instance, &metal_ci, nullptr, &unsafe_surface) != VK_SUCCESS) { -// TODO: Way to fallback? - where's my vulkan headers -#if 0 + // TODO: Way to fallback? - where's my vulkan headers // Attempt to make a macOS surface instead then... // This is the deprecated VkMacOSSurfaceCreateInfoMVK(3) version; but should work if the above failed // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMacOSSurfaceCreateInfoMVK.html @@ -56,9 +55,7 @@ vk::SurfaceKHR CreateSurface( LOG_ERROR(Render_Vulkan, "Failed to initialize Metal/macOS surface"); throw vk::Exception(VK_ERROR_INITIALIZATION_FAILED); } -#endif LOG_ERROR(Render_Vulkan, "Failed to initialize Metal/macOS surface"); - throw vk::Exception(VK_ERROR_INITIALIZATION_FAILED); } } #elif defined(__ANDROID__)