aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Hollings <bill.hollings@brenwill.com>2019-07-15 17:39:18 -0400
committerjeremyk-lunarg <jeremyk@lunarg.com>2019-12-02 09:05:10 -0700
commit0a0625a3dca69b9d7ecb73558539ce5e3cd4ddfa (patch)
tree657bf2c7af3366f64b77a5e28be9d714f03e70ac
parent979b531e9fff8ef044cf036d8ebd7fab3c17bec3 (diff)
downloadusermoji-0a0625a3dca69b9d7ecb73558539ce5e3cd4ddfa.tar.xz
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
-rw-r--r--cube/CMakeLists.txt2
-rw-r--r--cube/cube.c51
-rw-r--r--cube/cube.cpp49
-rw-r--r--cube/macOS/cube/DemoViewController.m2
-rw-r--r--cube/macOS/cubepp/DemoViewController.mm2
5 files changed, 34 insertions, 72 deletions
diff --git a/cube/CMakeLists.txt b/cube/CMakeLists.txt
index 4fc00344..4a0f76ba 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 9cbc45e5..c4f98afe 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 4af97856..5e875a15 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 *>(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 eb28ad57..c6e229d3 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 049ec6b6..9e003b9b 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