diff options
| author | Quentin Ladevie <ladevie.quentin@gmail.com> | 2021-03-14 23:28:39 +0100 |
|---|---|---|
| committer | Quentin Ladevie <ladevie.quentin@gmail.com> | 2021-03-14 23:28:39 +0100 |
| commit | da0bf8dc570f6e8421b8d80546dfce913b8251ad (patch) | |
| tree | 06646be201b1157923a8f08e7d7562859cb3f1a5 /src | |
| parent | 26369a8cdf90320cdd472fdca23ee38f7ce48302 (diff) | |
Make it compile on mac
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | src/vk-api.cpp | 17 | ||||
| -rw-r--r-- | src/vk-context.cpp | 2 | ||||
| -rw-r--r-- | src/vk-renderer.cpp | 9 | ||||
| -rw-r--r-- | src/vulkan-loader.cpp | 2 | ||||
| -rw-r--r-- | src/window.cpp | 7 |
6 files changed, 27 insertions, 14 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5380cde..6ebef73 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,7 +3,7 @@ add_definitions(-DNOMINMAX -D_USE_MATH_DEFINES) include_directories(${CMAKE_SOURCE_DIR}/include) include_directories(${Vulkan_INCLUDE_DIRS}) -if(UNIX) +if(${CMAKE_SYSTEM_NAME} EQUAL "Linux") include_directories(${X11_xcb_INCLUDE_PATH}) endif() @@ -24,7 +24,7 @@ add_executable( window.cpp ) -if(UNIX) +if(${CMAKE_SYSTEM_NAME} EQUAL "Linux") list(APPEND LIBRARIES ${CMAKE_DL_LIBS} ${X11_xcb_LIB} ${X11_xkbcommon_LIB} ${X11_xkbcommon_X11_LIB}) endif() diff --git a/src/vk-api.cpp b/src/vk-api.cpp index 440af02..dc30520 100644 --- a/src/vk-api.cpp +++ b/src/vk-api.cpp @@ -666,6 +666,14 @@ VkSurfaceKHR vkapi::create_surface(window& wnd) { create_info.hwnd = wnd.win_handle; VKRESULT(vkCreateWin32SurfaceKHR(context.instance, &create_info, nullptr, &surface)) +#elif defined(MACOS) + VkMetalSurfaceCreateInfoEXT create_info = {}; + create_info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; + create_info.pNext = nullptr; + create_info.flags = 0; + // create_info.pLayer = GetModuleHandle(NULL); + + VKRESULT(vkCreateMetalSurfaceEXT(context.instance, &create_info, nullptr, &surface)) #endif return surface; @@ -676,7 +684,7 @@ void vkapi::destroy_surface(VkSurfaceKHR surface) { } -Swapchain vkapi::create_swapchain(VkSurfaceKHR surface, size_t min_image_count, VkImageUsageFlags usages, std::optional<std::reference_wrapper<Swapchain>> old_swapchain) { +Swapchain vkapi::create_swapchain(VkSurfaceKHR surface, size_t min_image_count, VkImageUsageFlags usages, VkSwapchainKHR old_swapchain) { Swapchain swapchain; VkBool32 queue_support_presentation = VK_FALSE; VKRESULT(vkGetPhysicalDeviceSurfaceSupportKHR(context.physical_device, context.queue_index, surface, &queue_support_presentation)) @@ -713,7 +721,6 @@ Swapchain vkapi::create_swapchain(VkSurfaceKHR surface, size_t min_image_count, VKRESULT(vkGetPhysicalDeviceSurfacePresentModesKHR(context.physical_device, surface, &supported_present_modes_count, supported_present_modes.data())) swapchain.surface_format = supported_formats[0]; - VkSwapchainKHR old_swapchain_handle = (old_swapchain != std::nullopt) ? old_swapchain.value().get().handle : VK_NULL_HANDLE; VkSwapchainCreateInfoKHR create_info = {}; create_info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; @@ -731,14 +738,10 @@ Swapchain vkapi::create_swapchain(VkSurfaceKHR surface, size_t min_image_count, create_info.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; create_info.presentMode = VK_PRESENT_MODE_FIFO_KHR; create_info.clipped = VK_TRUE; - create_info.oldSwapchain = old_swapchain_handle; + create_info.oldSwapchain = old_swapchain; VKRESULT(vkCreateSwapchainKHR(context.device, &create_info, nullptr, &swapchain.handle)) - if (old_swapchain != std::nullopt) { - destroy_swapchain(old_swapchain.value()); - } - uint32_t image_count = 0; VKRESULT(vkGetSwapchainImagesKHR(context.device, swapchain.handle, &image_count, VK_NULL_HANDLE)) diff --git a/src/vk-context.cpp b/src/vk-context.cpp index 936efb7..ce593ab 100644 --- a/src/vk-context.cpp +++ b/src/vk-context.cpp @@ -54,6 +54,8 @@ void vkcontext::create_instance() { "VK_KHR_xcb_surface" #elif defined(WINDOWS) "VK_KHR_win32_surface" +#elif defined(MACOS) + "VK_EXT_metal_surface" #endif }; diff --git a/src/vk-renderer.cpp b/src/vk-renderer.cpp index dfd2bca..8d074c5 100644 --- a/src/vk-renderer.cpp +++ b/src/vk-renderer.cpp @@ -2,8 +2,6 @@ #include <cstring> #include <cassert> -#include <functional> - #include "imgui.h" #include "vk-renderer.hpp" #include "thirdparty/vk_mem_alloc.h" @@ -34,7 +32,7 @@ vkrenderer::vkrenderer(window& wnd, const input_data& inputs) { VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT, - std::nullopt + VK_NULL_HANDLE ); compute_sets_bindings = { @@ -406,13 +404,16 @@ void vkrenderer::finish_frame() { void vkrenderer::recreate_swapchain() { VKRESULT(vkWaitForFences(api.context.device, submission_fences.size(), submission_fences.data(), VK_TRUE, UINT64_MAX)) + Swapchain old_swapchain = swapchain; swapchain = api.create_swapchain( platform_surface, min_swapchain_image_count, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT, - std::optional<std::reference_wrapper<Swapchain>> { std::ref(swapchain) } + old_swapchain.handle ); + api.destroy_swapchain(old_swapchain); + api.destroy_images(accumulation_images); VkExtent3D image_size = { .width = swapchain.extent.width, diff --git a/src/vulkan-loader.cpp b/src/vulkan-loader.cpp index 2214bbf..044ccee 100644 --- a/src/vulkan-loader.cpp +++ b/src/vulkan-loader.cpp @@ -11,7 +11,7 @@ HMODULE vulkanLibrary = LoadLibrary("vulkan-1.dll"); #define LoadProcAddress GetProcAddress -#elif defined(LINUX) +#elif defined(LINUX) || defined(MACOS) #include <dlfcn.h> void *vulkanLibrary = dlopen( "libvulkan.so.1", RTLD_NOW ); diff --git a/src/window.cpp b/src/window.cpp index 320e282..793f67d 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -345,4 +345,11 @@ LRESULT window::message_handler(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lpar } return 0; } +#elif defined(MACOS) +window::window(uint32_t width, uint32_t height) { +} + +window::~window() {}; + +void window::poll_events() {} #endif |
