aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt4
-rw-r--r--src/vk-api.cpp17
-rw-r--r--src/vk-context.cpp2
-rw-r--r--src/vk-renderer.cpp9
-rw-r--r--src/vulkan-loader.cpp2
-rw-r--r--src/window.cpp7
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