summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-12-24 03:40:32 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-12-24 03:40:32 +0000
commit604b9ef1a83ffc02eb90f48d5ca7bd5ed78ce8c4 (patch)
tree18f48291890de1ca8b909b5dbf6252991cc7b917
parentA bunch of minor changes to fix clang warnings and errors (diff)
downloadDiligentCore-604b9ef1a83ffc02eb90f48d5ca7bd5ed78ce8c4.tar.gz
DiligentCore-604b9ef1a83ffc02eb90f48d5ca7bd5ed78ce8c4.zip
Enabled Vulkan build on macOS
-rw-r--r--CMakeLists.txt1
-rw-r--r--External/CMakeLists.txt2
-rw-r--r--External/vulkan/.gitignore1
-rw-r--r--External/vulkan/libs/.gitignore5
-rw-r--r--External/vulkan/libs/macOS/MoltenVK_icd.json7
-rwxr-xr-xExternal/vulkan/libs/macOS/libMoltenVK.dylibbin0 -> 2519972 bytes
-rw-r--r--Graphics/GraphicsEngineVulkan/CMakeLists.txt16
-rw-r--r--Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp4
8 files changed, 32 insertions, 4 deletions
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
--- /dev/null
+++ b/External/vulkan/libs/macOS/libMoltenVK.dylib
Binary files 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
+ # '<function name>' 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 = {};