From 604b9ef1a83ffc02eb90f48d5ca7bd5ed78ce8c4 Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Sun, 23 Dec 2018 19:40:32 -0800 Subject: Enabled Vulkan build on macOS --- CMakeLists.txt | 1 + External/CMakeLists.txt | 2 +- External/vulkan/.gitignore | 1 + External/vulkan/libs/.gitignore | 5 +++++ External/vulkan/libs/macOS/MoltenVK_icd.json | 7 +++++++ External/vulkan/libs/macOS/libMoltenVK.dylib | Bin 0 -> 2519972 bytes Graphics/GraphicsEngineVulkan/CMakeLists.txt | 16 +++++++++++++++- Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp | 4 ++-- 8 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 External/vulkan/.gitignore create mode 100644 External/vulkan/libs/.gitignore create mode 100644 External/vulkan/libs/macOS/MoltenVK_icd.json create mode 100755 External/vulkan/libs/macOS/libMoltenVK.dylib diff --git a/CMakeLists.txt b/CMakeLists.txt index 9bb5bb7e..e4fbf3cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,6 +98,7 @@ elseif(PLATFORM_LINUX) target_compile_definitions(BuildSettings INTERFACE PLATFORM_LINUX=1) elseif(PLATFORM_MACOS) set(GL_SUPPORTED TRUE CACHE INTERNAL "OpenGL is supported on MacOS platform") + set(VULKAN_SUPPORTED TRUE CACHE INTERNAL "Vulkan is enabled through MoltenVK on MacOS platform") target_compile_definitions(BuildSettings INTERFACE PLATFORM_MACOS=1) elseif(PLATFORM_IOS) set(GLES_SUPPORTED TRUE CACHE INTERNAL "OpenGLES is supported on iOS platform") diff --git a/External/CMakeLists.txt b/External/CMakeLists.txt index c1f0a01a..32fd9231 100644 --- a/External/CMakeLists.txt +++ b/External/CMakeLists.txt @@ -15,7 +15,7 @@ if(PLATFORM_ANDROID) add_subdirectory(Android) endif() -if(PLATFORM_WIN32 OR PLATFORM_LINUX) +if(PLATFORM_WIN32 OR PLATFORM_LINUX OR PLATFORM_MACOS) # We only need to have SPIRV-Headers folder, but we # do not really need any target from the project. #add_subdirectory(SPIRV-Headers) diff --git a/External/vulkan/.gitignore b/External/vulkan/.gitignore new file mode 100644 index 00000000..38c648bb --- /dev/null +++ b/External/vulkan/.gitignore @@ -0,0 +1 @@ +!/libs \ No newline at end of file diff --git a/External/vulkan/libs/.gitignore b/External/vulkan/libs/.gitignore new file mode 100644 index 00000000..8bc81845 --- /dev/null +++ b/External/vulkan/libs/.gitignore @@ -0,0 +1,5 @@ +!*.so +!*.lib +!*.a +!*.dylib +!*.json \ No newline at end of file diff --git a/External/vulkan/libs/macOS/MoltenVK_icd.json b/External/vulkan/libs/macOS/MoltenVK_icd.json new file mode 100644 index 00000000..60593301 --- /dev/null +++ b/External/vulkan/libs/macOS/MoltenVK_icd.json @@ -0,0 +1,7 @@ +{ + "file_format_version" : "1.0.0", + "ICD": { + "library_path": "./libMoltenVK.dylib", + "api_version" : "1.0.0" + } +} diff --git a/External/vulkan/libs/macOS/libMoltenVK.dylib b/External/vulkan/libs/macOS/libMoltenVK.dylib new file mode 100755 index 00000000..32b90be1 Binary files /dev/null and b/External/vulkan/libs/macOS/libMoltenVK.dylib differ diff --git a/Graphics/GraphicsEngineVulkan/CMakeLists.txt b/Graphics/GraphicsEngineVulkan/CMakeLists.txt index 6bb043f5..a0401154 100644 --- a/Graphics/GraphicsEngineVulkan/CMakeLists.txt +++ b/Graphics/GraphicsEngineVulkan/CMakeLists.txt @@ -178,6 +178,8 @@ set(PRIVATE_DEPENDENCIES if(PLATFORM_WIN32) find_library(Vulkan_LIBRARY NAMES vulkan-1 vulkan PATHS "../../External/vulkan/libs") +elseif(PLATFORM_MACOS) + find_library(Vulkan_LIBRARY NAMES MoltenVK PATHS "../../External/vulkan/libs/macOS" REQUIRED) else() find_library(Vulkan_LIBRARY NAMES vulkan HINTS "$ENV{VULKAN_SDK}/lib" "../../External/vulkan/libs" REQUIRED) endif() @@ -197,10 +199,22 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR set_target_properties(GraphicsEngineVk-shared PROPERTIES CXX_VISIBILITY_PRESET hidden) # -fvisibility=hidden endif() +if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + # Disable the following clang warning + # '' hides overloaded virtual function + # as hiding is intended + target_compile_options(GraphicsEngineVk-static PRIVATE -Wno-overloaded-virtual) + target_compile_options(GraphicsEngineVk-shared PRIVATE -Wno-overloaded-virtual) +endif() + if(PLATFORM_WIN32) set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_WIN32_KHR=1 NOMINMAX) elseif(PLATFORM_LINUX) set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_XCB_KHR=1) +elseif(PLATFORM_MACOS) + set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_MACOS_MVK=1) +elseif(PLATFORM_IOS) + set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_IOS_MVK=1) else() message(FATAL_ERROR "Unknown platform") endif() @@ -260,4 +274,4 @@ set_target_properties(ProcessGenerateMipsVkShader PROPERTIES if(INSTALL_DILIGENT_CORE) install_core_lib(GraphicsEngineVk-shared) install_core_lib(GraphicsEngineVk-static) -endif() \ No newline at end of file +endif() diff --git a/Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp index 89b05416..d7434bae 100644 --- a/Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp @@ -57,12 +57,12 @@ SwapChainVkImpl::SwapChainVkImpl(IReferenceCounters* pRefCounters, #elif defined(VK_USE_PLATFORM_IOS_MVK) VkIOSSurfaceCreateInfoMVK surfaceCreateInfo = {}; surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK; - surfaceCreateInfo.pView = nullptr; + surfaceCreateInfo.pView = pNativeWndHandle; auto err = vkCreateIOSSurfaceMVK(m_VulkanInstance->GetVkInstance(), &surfaceCreateInfo, nullptr, &m_VkSurface); #elif defined(VK_USE_PLATFORM_MACOS_MVK) VkMacOSSurfaceCreateInfoMVK surfaceCreateInfo = {}; surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK; - surfaceCreateInfo.pView = nullptr; + surfaceCreateInfo.pView = pNativeWndHandle; auto err = vkCreateMacOSSurfaceMVK(m_VulkanInstance->GetVkInstance(), &surfaceCreateInfo, NULL, &m_VkSurface); #elif defined(VK_USE_PLATFORM_WAYLAND_KHR) VkWaylandSurfaceCreateInfoKHR surfaceCreateInfo = {}; -- cgit v1.2.3