7474#ifdef __APPLE__
7575#include < vulkan/vulkan_metal.h>
7676
77- #ifdef VK_USE_PLATFORM_IOS_MVK
77+
78+ #ifdef VK_USE_PLATFORM_METAL_EXT
7879extern " C" const char *getWorkingFolderForiOS (void );
80+ extern " C" void *makeViewMetalCompatible (void * handle);
7981#endif
8082#endif
8183
@@ -119,12 +121,9 @@ OSInfo getOperatingSystem()
119121#if defined(VK_USE_PLATFORM_ANDROID_KHR)
120122 osInfo.type = 2 ;
121123#endif
122- #if defined(VK_USE_PLATFORM_MACOS_MVK )
124+ #if defined(VK_USE_PLATFORM_METAL_EXT )
123125 osInfo.type = 3 ;
124126#endif
125- #if defined(VK_USE_PLATFORM_IOS_MVK)
126- osInfo.type = 4 ;
127- #endif
128127
129128 return osInfo;
130129}
@@ -307,7 +306,7 @@ VulkanCapsViewer::VulkanCapsViewer(QWidget *parent)
307306VulkanCapsViewer::~VulkanCapsViewer ()
308307{
309308 // Free up hidden window used on Apple platforms
310- #if defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK )
309+ #if defined(VK_USE_PLATFORM_METAL_EXT )
311310 if (pMetalSurrogate != nullptr )
312311 delete pMetalSurrogate;
313312#endif
@@ -623,13 +622,9 @@ bool VulkanCapsViewer::initVulkan()
623622 VK_KHR_XCB_SURFACE_EXTENSION_NAME,
624623#endif
625624
626- // #if defined(VK_USE_PLATFORM_MACOS_MVK)
627- // VK_MVK_MACOS_SURFACE_EXTENSION_NAME,
628- // #endif
629- //
630- // #if defined(VK_USE_PLATFORM_IOS_MVK)
631- // VK_MVK_IOS_SURFACE_EXTENSION_NAME,
632- // #endif
625+ #if defined(VK_USE_PLATFORM_METAL_EXT)
626+ VK_EXT_METAL_SURFACE_EXTENSION_NAME,
627+ #endif
633628 };
634629
635630 std::vector<const char *> enabledExtensions = {};
@@ -643,9 +638,6 @@ bool VulkanCapsViewer::initVulkan()
643638 enabledExtensions.push_back (VK_KHR_SURFACE_EXTENSION_NAME);
644639 }
645640
646- #if __APPLE__
647- enabledExtensions.push_back (" VK_EXT_metal_surface" );
648- #endif
649641
650642 std::vector<std::string> surfaceExtensionsAvailable = {};
651643
@@ -683,13 +675,14 @@ bool VulkanCapsViewer::initVulkan()
683675 if (strcmp (ext.extensionName , VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME) == 0 ) {
684676 enabledExtensions.push_back (VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME);
685677 }
686- }
687678
688679#if defined(__APPLE__) && (VK_HEADER_VERSION >= 216)
689- instanceCreateInfo.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;
690- enabledExtensions.push_back (VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
691- enabledExtensions.push_back (VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
680+ if (strcmp (ext.extensionName , VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME) == 0 ) {
681+ instanceCreateInfo.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;
682+ enabledExtensions.push_back (VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
683+ }
692684#endif
685+ }
693686
694687 instanceCreateInfo.ppEnabledExtensionNames = enabledExtensions.data ();
695688 instanceCreateInfo.enabledExtensionCount = (uint32_t )enabledExtensions.size ();
@@ -812,13 +805,16 @@ bool VulkanCapsViewer::initVulkan()
812805#endif
813806
814807// This works for deskop and iOS devices
815- #if __APPLE__
816- VkMetalSurfaceCreateInfoEXT info = {};
817- info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
818- info.pNext = nullptr ;
819- info.pLayer = (void *)pMetalSurrogate->winId ();
820- info.flags = 0 ;
821- vkCreateMetalSurfaceEXT (vulkanContext.instance , &info, nullptr , &vulkanContext.surface );
808+ #if defined(VK_USE_PLATFORM_METAL_EXT)
809+ if (surface_extension == VK_EXT_METAL_SURFACE_EXTENSION_NAME) {
810+ pMetalSurrogate = new QVukanSurrogate;
811+ VkMetalSurfaceCreateInfoEXT info = {};
812+ info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
813+ info.pNext = nullptr ;
814+ info.pLayer = (void *)makeViewMetalCompatible ((void *)pMetalSurrogate->winId ());
815+ info.flags = 0 ;
816+ surfaceResult = vkCreateMetalSurfaceEXT (vulkanContext.instance , &info, nullptr , &vulkanContext.surface );
817+ }
822818#endif
823819
824820 if (surfaceResult == VK_SUCCESS) {
@@ -865,7 +861,7 @@ void VulkanCapsViewer::getGPUinfo(VulkanDeviceInfo *GPU, uint32_t id, VkPhysical
865861 }
866862
867863 std::vector<const char *> enabledExtensions;
868- #if defined(VK_USE_PLATFORM_MACOS_MVK ) && (VK_HEADER_VERSION >= 216)
864+ #if defined(__APPLE__ ) && (VK_HEADER_VERSION >= 216)
869865 enabledExtensions.push_back (VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME);
870866#endif
871867
0 commit comments