From 0a0625a3dca69b9d7ecb73558539ce5e3cd4ddfa Mon Sep 17 00:00:00 2001 From: Bill Hollings Date: Mon, 15 Jul 2019 17:39:18 -0400 Subject: [PATCH] vkcube: Replace MoltenVK surfaces with Metal Made DemoViewController.m compatible with VK_EXT_metal_surface extension and replaced all references to VK_MVK_macos_surface and VK_MVK_ios_surface with VK_EXT_metal_surface. Change-Id: I4a163bc9c6109b44d169c6565313ab52161d38fc --- cube/CMakeLists.txt | 2 +- cube/cube.c | 51 +++++++++++---------------------- cube/cube.cpp | 49 ++++++++++--------------------- cube/macOS/cube/DemoViewController.m | 2 +- cube/macOS/cubepp/DemoViewController.mm | 2 +- 5 files changed, 34 insertions(+), 72 deletions(-) diff --git a/cube/CMakeLists.txt b/cube/CMakeLists.txt index 4fc0034..4a0f76b 100644 --- a/cube/CMakeLists.txt +++ b/cube/CMakeLists.txt @@ -76,7 +76,7 @@ if(WIN32) elseif(ANDROID) add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR) elseif(APPLE) - add_definitions(-DVK_USE_PLATFORM_MACOS_MVK) + add_definitions(-DVK_USE_PLATFORM_METAL_EXT) elseif(UNIX AND NOT APPLE) # i.e. Linux if(NOT CUBE_WSI_SELECTION) set(CUBE_WSI_SELECTION "XCB") diff --git a/cube/cube.c b/cube/cube.c index 9cbc45e..c4f98af 100644 --- a/cube/cube.c +++ b/cube/cube.c @@ -334,8 +334,8 @@ struct demo { struct wl_keyboard *keyboard; #elif defined(VK_USE_PLATFORM_ANDROID_KHR) struct ANativeWindow *window; -#elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK)) - void *window; +#elif defined(VK_USE_PLATFORM_METAL_EXT) + void *caMetalLayer; #endif VkSurfaceKHR surface; bool prepared; @@ -2826,7 +2826,7 @@ static void demo_run(struct demo *demo) { demo_draw(demo); demo->curFrame++; } -#elif defined(VK_USE_PLATFORM_MACOS_MVK) +#elif defined(VK_USE_PLATFORM_METAL_EXT) static void demo_run(struct demo *demo) { demo_draw(demo); demo->curFrame++; @@ -3091,15 +3091,10 @@ static void demo_init_vk(struct demo *demo) { platformSurfaceExtFound = 1; demo->extension_names[demo->enabled_extension_count++] = VK_KHR_ANDROID_SURFACE_EXTENSION_NAME; } -#elif defined(VK_USE_PLATFORM_IOS_MVK) - if (!strcmp(VK_MVK_IOS_SURFACE_EXTENSION_NAME, instance_extensions[i].extensionName)) { +#elif defined(VK_USE_PLATFORM_METAL_EXT) + if (!strcmp(VK_EXT_METAL_SURFACE_EXTENSION_NAME, instance_extensions[i].extensionName)) { platformSurfaceExtFound = 1; - demo->extension_names[demo->enabled_extension_count++] = VK_MVK_IOS_SURFACE_EXTENSION_NAME; - } -#elif defined(VK_USE_PLATFORM_MACOS_MVK) - if (!strcmp(VK_MVK_MACOS_SURFACE_EXTENSION_NAME, instance_extensions[i].extensionName)) { - platformSurfaceExtFound = 1; - demo->extension_names[demo->enabled_extension_count++] = VK_MVK_MACOS_SURFACE_EXTENSION_NAME; + demo->extension_names[demo->enabled_extension_count++] = VK_EXT_METAL_SURFACE_EXTENSION_NAME; } #endif if (!strcmp(VK_EXT_DEBUG_UTILS_EXTENSION_NAME, instance_extensions[i].extensionName)) { @@ -3127,14 +3122,8 @@ static void demo_init_vk(struct demo *demo) { "Do you have a compatible Vulkan installable client driver (ICD) installed?\n" "Please look at the Getting Started guide for additional information.\n", "vkCreateInstance Failure"); -#elif defined(VK_USE_PLATFORM_IOS_MVK) - ERR_EXIT("vkEnumerateInstanceExtensionProperties failed to find the " VK_MVK_IOS_SURFACE_EXTENSION_NAME - " extension.\n\n" - "Do you have a compatible Vulkan installable client driver (ICD) installed?\n" - "Please look at the Getting Started guide for additional information.\n", - "vkCreateInstance Failure"); -#elif defined(VK_USE_PLATFORM_MACOS_MVK) - ERR_EXIT("vkEnumerateInstanceExtensionProperties failed to find the " VK_MVK_MACOS_SURFACE_EXTENSION_NAME +#elif defined(VK_USE_PLATFORM_METAL_EXT) + ERR_EXIT("vkEnumerateInstanceExtensionProperties failed to find the " VK_EXT_METAL_SURFACE_EXTENSION_NAME " extension.\n\n" "Do you have a compatible Vulkan installable client driver (ICD) installed?\n" "Please look at the Getting Started guide for additional information.\n", @@ -3464,22 +3453,14 @@ static void demo_create_surface(struct demo *demo) { err = vkCreateXcbSurfaceKHR(demo->inst, &createInfo, NULL, &demo->surface); #elif defined(VK_USE_PLATFORM_DISPLAY_KHR) err = demo_create_display_surface(demo); -#elif defined(VK_USE_PLATFORM_IOS_MVK) - VkIOSSurfaceCreateInfoMVK surface; - surface.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK; - surface.pNext = NULL; - surface.flags = 0; - surface.pView = demo->window; - - err = vkCreateIOSSurfaceMVK(demo->inst, &surface, NULL, &demo->surface); -#elif defined(VK_USE_PLATFORM_MACOS_MVK) - VkMacOSSurfaceCreateInfoMVK surface; - surface.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK; +#elif defined(VK_USE_PLATFORM_METAL_EXT) + VkMetalSurfaceCreateInfoEXT surface; + surface.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; surface.pNext = NULL; surface.flags = 0; - surface.pView = demo->window; + surface.pLayer = demo->caMetalLayer; - err = vkCreateMacOSSurfaceMVK(demo->inst, &surface, NULL, &demo->surface); + err = vkCreateMetalSurfaceEXT(demo->inst, &surface, NULL, &demo->surface); #endif assert(!err); } @@ -3958,10 +3939,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pCmdLine, return (int)msg.wParam; } -#elif defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK) -static void demo_main(struct demo *demo, void *view, int argc, const char *argv[]) { +#elif defined(VK_USE_PLATFORM_METAL_EXT) +static void demo_main(struct demo *demo, void *caMetalLayer, int argc, const char *argv[]) { demo_init(demo, argc, (char **)argv); - demo->window = view; + demo->caMetalLayer = caMetalLayer; demo_init_vk_swapchain(demo); demo_prepare(demo); demo->spin_angle = 0.4f; diff --git a/cube/cube.cpp b/cube/cube.cpp index 4af9785..5e875a1 100644 --- a/cube/cube.cpp +++ b/cube/cube.cpp @@ -265,7 +265,7 @@ struct Demo { #elif defined(VK_USE_PLATFORM_WAYLAND_KHR) void run(); void create_window(); -#elif defined(VK_USE_PLATFORM_MACOS_MVK) +#elif defined(VK_USE_PLATFORM_METAL_EXT) void run(); #elif defined(VK_USE_PLATFORM_DISPLAY_KHR) vk::Result create_display_surface(); @@ -300,8 +300,8 @@ struct Demo { wl_seat *seat; wl_pointer *pointer; wl_keyboard *keyboard; -#elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK)) - void *window; +#elif defined(VK_USE_PLATFORM_METAL_EXT) + void *caMetalLayer; #endif vk::SurfaceKHR surface; @@ -1137,15 +1137,10 @@ void Demo::init_vk() { platformSurfaceExtFound = 1; extension_names[enabled_extension_count++] = VK_KHR_DISPLAY_EXTENSION_NAME; } -#elif defined(VK_USE_PLATFORM_IOS_MVK) - if (!strcmp(VK_MVK_IOS_SURFACE_EXTENSION_NAME, instance_extensions[i].extensionName)) { +#elif defined(VK_USE_PLATFORM_METAL_EXT) + if (!strcmp(VK_EXT_METAL_SURFACE_EXTENSION_NAME, instance_extensions[i].extensionName)) { platformSurfaceExtFound = 1; - extension_names[enabled_extension_count++] = VK_MVK_IOS_SURFACE_EXTENSION_NAME; - } -#elif defined(VK_USE_PLATFORM_MACOS_MVK) - if (!strcmp(VK_MVK_MACOS_SURFACE_EXTENSION_NAME, instance_extensions[i].extensionName)) { - platformSurfaceExtFound = 1; - extension_names[enabled_extension_count++] = VK_MVK_MACOS_SURFACE_EXTENSION_NAME; + extension_names[enabled_extension_count++] = VK_EXT_METAL_SURFACE_EXTENSION_NAME; } #endif @@ -1192,15 +1187,8 @@ void Demo::init_vk() { "Do you have a compatible Vulkan installable client driver (ICD) installed?\n" "Please look at the Getting Started guide for additional information.\n", "vkCreateInstance Failure"); -#elif defined(VK_USE_PLATFORM_IOS_MVK) - ERR_EXIT("vkEnumerateInstanceExtensionProperties failed to find the " VK_MVK_IOS_SURFACE_EXTENSION_NAME - " extension.\n\nDo you have a compatible " - "Vulkan installable client driver (ICD) installed?\nPlease " - "look at the Getting Started guide for additional " - "information.\n", - "vkCreateInstance Failure"); -#elif defined(VK_USE_PLATFORM_MACOS_MVK) - ERR_EXIT("vkEnumerateInstanceExtensionProperties failed to find the " VK_MVK_MACOS_SURFACE_EXTENSION_NAME +#elif defined(VK_USE_PLATFORM_METAL_EXT) + ERR_EXIT("vkEnumerateInstanceExtensionProperties failed to find the " VK_EXT_METAL_SURFACE_EXTENSION_NAME " extension.\n\nDo you have a compatible " "Vulkan installable client driver (ICD) installed?\nPlease " "look at the Getting Started guide for additional " @@ -1337,18 +1325,11 @@ void Demo::create_surface() { auto result = inst.createXcbSurfaceKHR(&createInfo, nullptr, &surface); VERIFY(result == vk::Result::eSuccess); } -#elif defined(VK_USE_PLATFORM_IOS_MVK) - { - auto const createInfo = vk::IOSSurfaceCreateInfoMVK().setPView(nullptr); - - auto result = inst.createIOSSurfaceMVK(&createInfo, nullptr, &surface); - VERIFY(result == vk::Result::eSuccess); - } -#elif defined(VK_USE_PLATFORM_MACOS_MVK) +#elif defined(VK_USE_PLATFORM_METAL_EXT) { - auto const createInfo = vk::MacOSSurfaceCreateInfoMVK().setPView(window); + auto const createInfo = vk::MetalSurfaceCreateInfoEXT().setPLayer(static_cast(caMetalLayer)); - auto result = inst.createMacOSSurfaceMVK(&createInfo, nullptr, &surface); + auto result = inst.createMetalSurfaceEXT(&createInfo, nullptr, &surface); VERIFY(result == vk::Result::eSuccess); } #elif defined(VK_USE_PLATFORM_DISPLAY_KHR) @@ -2790,7 +2771,7 @@ void Demo::create_window() { wl_surface_commit(window); } -#elif defined(VK_USE_PLATFORM_MACOS_MVK) +#elif defined(VK_USE_PLATFORM_METAL_EXT) void Demo::run() { draw(); curFrame++; @@ -3124,12 +3105,12 @@ int main(int argc, char **argv) { return validation_error; } -#elif defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK) +#elif defined(VK_USE_PLATFORM_METAL_EXT) // Global function invoked from NS or UI views and controllers to create demo -static void demo_main(struct Demo &demo, void *view, int argc, const char *argv[]) { +static void demo_main(struct Demo &demo, void *caMetalLayer, int argc, const char *argv[]) { demo.init(argc, (char **)argv); - demo.window = view; + demo.caMetalLayer = caMetalLayer; demo.init_vk_swapchain(); demo.prepare(); demo.spin_angle = 0.4f; diff --git a/cube/macOS/cube/DemoViewController.m b/cube/macOS/cube/DemoViewController.m index eb28ad5..c6e229d 100644 --- a/cube/macOS/cube/DemoViewController.m +++ b/cube/macOS/cube/DemoViewController.m @@ -52,7 +52,7 @@ argv[i] = s.UTF8String; } - demo_main(&demo, self.view, args.count, argv); + demo_main(&demo, self.view.layer, args.count, argv); // Monitor the rendering loop for a quit condition _timer = [NSTimer scheduledTimerWithTimeInterval: 0.2 diff --git a/cube/macOS/cubepp/DemoViewController.mm b/cube/macOS/cubepp/DemoViewController.mm index 049ec6b..9e003b9 100644 --- a/cube/macOS/cubepp/DemoViewController.mm +++ b/cube/macOS/cubepp/DemoViewController.mm @@ -52,7 +52,7 @@ argv[i] = s.UTF8String; } - demo_main(demo, self.view, args.count, argv); + demo_main(demo, self.view.layer, args.count, argv); // Monitor the rendering loop for a quit condition _timer = [NSTimer scheduledTimerWithTimeInterval: 0.2 -- 2.7.4