summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2020-04-20 01:18:45 +0000
committerassiduous <assiduous@diligentgraphics.com>2020-04-20 01:18:45 +0000
commit7236e0bafef595aa1f2908b38478466cf4019907 (patch)
tree915c189fbfd5b16c402869a353dbf0165b6ce0cf /Graphics/GraphicsEngineVulkan
parentFixed few Android build problems (diff)
downloadDiligentCore-7236e0bafef595aa1f2908b38478466cf4019907.tar.gz
DiligentCore-7236e0bafef595aa1f2908b38478466cf4019907.zip
VK backend: added option to use Volk instead of linking with the loader to support Android
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
-rw-r--r--Graphics/GraphicsEngineVulkan/CMakeLists.txt10
-rw-r--r--Graphics/GraphicsEngineVulkan/include/CommandListVkImpl.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/CommandQueueVkImpl.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanDynamicHeap.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBuffer.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBufferPool.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanDebug.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanFencePool.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanHeaders.h45
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanInstance.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanLogicalDevice.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanPhysicalDevice.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/pch.h2
-rw-r--r--Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp19
14 files changed, 83 insertions, 13 deletions
diff --git a/Graphics/GraphicsEngineVulkan/CMakeLists.txt b/Graphics/GraphicsEngineVulkan/CMakeLists.txt
index baf08498..08c732f0 100644
--- a/Graphics/GraphicsEngineVulkan/CMakeLists.txt
+++ b/Graphics/GraphicsEngineVulkan/CMakeLists.txt
@@ -46,6 +46,7 @@ set(VULKAN_UTILS_INCLUDE
include/VulkanUtilities/VulkanMemoryManager.hpp
include/VulkanUtilities/VulkanObjectWrappers.hpp
include/VulkanUtilities/VulkanPhysicalDevice.hpp
+ include/VulkanUtilities/VulkanHeaders.h
)
@@ -163,7 +164,7 @@ endif()
target_include_directories(Diligent-GraphicsEngineVk-static
PRIVATE
include
- ../../ThirdParty/vulkan
+ ../../ThirdParty
)
set(PRIVATE_DEPENDENCIES
@@ -188,10 +189,15 @@ elseif(PLATFORM_IOS)
set(Vulkan_LIBRARY ${MoltenVK_LIBRARY})
elseif(PLATFORM_LINUX)
find_library(Vulkan_LIBRARY NAMES vulkan HINTS "$ENV{VULKAN_SDK}/lib" "../../ThirdParty/vulkan/libs/linux")
+elseif(PLATFORM_ANDROID)
+ set(USE_VOLK TRUE)
else()
find_library(Vulkan_LIBRARY NAMES vulkan)
endif()
-list(APPEND PRIVATE_DEPENDENCIES ${Vulkan_LIBRARY})
+
+if(NOT USE_VOLK)
+ list(APPEND PRIVATE_DEPENDENCIES ${Vulkan_LIBRARY})
+endif()
set(PUBLIC_DEPENDENCIES
Diligent-GraphicsEngineVkInterface
diff --git a/Graphics/GraphicsEngineVulkan/include/CommandListVkImpl.hpp b/Graphics/GraphicsEngineVulkan/include/CommandListVkImpl.hpp
index d541ca7d..9c4340ce 100644
--- a/Graphics/GraphicsEngineVulkan/include/CommandListVkImpl.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/CommandListVkImpl.hpp
@@ -30,7 +30,7 @@
/// \file
/// Declaration of Diligent::CommandListVkImpl class
-#include "vulkan.h"
+#include "VulkanUtilities/VulkanHeaders.h"
#include "CommandListBase.hpp"
#include "RenderDeviceVkImpl.hpp"
diff --git a/Graphics/GraphicsEngineVulkan/include/CommandQueueVkImpl.hpp b/Graphics/GraphicsEngineVulkan/include/CommandQueueVkImpl.hpp
index b635b748..4f258afe 100644
--- a/Graphics/GraphicsEngineVulkan/include/CommandQueueVkImpl.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/CommandQueueVkImpl.hpp
@@ -32,7 +32,7 @@
#include <mutex>
#include <deque>
-#include "vulkan.h"
+#include "VulkanUtilities/VulkanHeaders.h"
#include "CommandQueueVk.h"
#include "ObjectBase.hpp"
#include "VulkanUtilities/VulkanLogicalDevice.hpp"
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanDynamicHeap.hpp b/Graphics/GraphicsEngineVulkan/include/VulkanDynamicHeap.hpp
index 6aa8ba38..6a03cd50 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanDynamicHeap.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanDynamicHeap.hpp
@@ -28,7 +28,7 @@
#pragma once
#include <mutex>
-#include "vulkan.h"
+#include "VulkanUtilities/VulkanHeaders.h"
#include "VulkanUtilities/VulkanMemoryManager.hpp"
#include "VulkanUtilities/VulkanLogicalDevice.hpp"
#include "VulkanUtilities/VulkanObjectWrappers.hpp"
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBuffer.hpp b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBuffer.hpp
index dbbfe91a..1465024b 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBuffer.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBuffer.hpp
@@ -27,7 +27,7 @@
#pragma once
-#include "vulkan.h"
+#include "VulkanHeaders.h"
#include "DebugUtilities.hpp"
namespace VulkanUtilities
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBufferPool.hpp b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBufferPool.hpp
index e755ffe4..75095f08 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBufferPool.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBufferPool.hpp
@@ -31,7 +31,7 @@
#include <memory>
#include <mutex>
#include <atomic>
-#include "vulkan.h"
+#include "VulkanHeaders.h"
#include "VulkanLogicalDevice.hpp"
#include "VulkanObjectWrappers.hpp"
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanDebug.hpp b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanDebug.hpp
index ee812f08..6d522fb4 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanDebug.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanDebug.hpp
@@ -1,7 +1,7 @@
#pragma once
#include <string>
-#include "vulkan.h"
+#include "VulkanHeaders.h"
namespace VulkanUtilities
{
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanFencePool.hpp b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanFencePool.hpp
index a1402b99..7a7719e2 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanFencePool.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanFencePool.hpp
@@ -29,7 +29,7 @@
#include <vector>
#include <memory>
-#include "vulkan.h"
+#include "VulkanHeaders.h"
#include "VulkanLogicalDevice.hpp"
#include "VulkanUtilities/VulkanObjectWrappers.hpp"
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanHeaders.h b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanHeaders.h
new file mode 100644
index 00000000..6794a4ee
--- /dev/null
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanHeaders.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2019-2020 Diligent Graphics LLC
+ * Copyright 2015-2019 Egor Yusov
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * In no event and under no legal theory, whether in tort (including negligence),
+ * contract, or otherwise, unless required by applicable law (such as deliberate
+ * and grossly negligent acts) or agreed to in writing, shall any Contributor be
+ * liable for any damages, including any direct, indirect, special, incidental,
+ * or consequential damages of any character arising as a result of this License or
+ * out of the use or inability to use the software (including but not limited to damages
+ * for loss of goodwill, work stoppage, computer failure or malfunction, or any and
+ * all other commercial damages or losses), even if such Contributor has been advised
+ * of the possibility of such damages.
+ */
+
+#pragma once
+
+
+#if PLATFORM_ANDROID
+// Android provides Vulkan loader starting with API level 24. To be
+// compatible with earlier versions, we will use manual loading.
+// On other platforms we link with the loader.
+# define USE_VOLK 1
+#endif
+
+#if USE_VOLK
+# define VK_NO_PROTOTYPES
+#endif
+#include "vulkan/vulkan.h"
+
+#if USE_VOLK
+# include "volk/volk.h"
+#endif
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanInstance.hpp b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanInstance.hpp
index 5993848c..3fcb736d 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanInstance.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanInstance.hpp
@@ -29,7 +29,7 @@
#include <vector>
#include <memory>
-#include "vulkan.h"
+#include "VulkanHeaders.h"
namespace VulkanUtilities
{
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanLogicalDevice.hpp b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanLogicalDevice.hpp
index b580eb45..d4a6bcb6 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanLogicalDevice.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanLogicalDevice.hpp
@@ -28,7 +28,7 @@
#pragma once
#include <memory>
-#include "vulkan.h"
+#include "VulkanHeaders.h"
namespace VulkanUtilities
{
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanPhysicalDevice.hpp b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanPhysicalDevice.hpp
index 43f4be84..24212950 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanPhysicalDevice.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanPhysicalDevice.hpp
@@ -29,7 +29,7 @@
#include <memory>
#include <vector>
-#include "vulkan.h"
+#include "VulkanHeaders.h"
namespace VulkanUtilities
{
diff --git a/Graphics/GraphicsEngineVulkan/include/pch.h b/Graphics/GraphicsEngineVulkan/include/pch.h
index e51075ef..cf6891b3 100644
--- a/Graphics/GraphicsEngineVulkan/include/pch.h
+++ b/Graphics/GraphicsEngineVulkan/include/pch.h
@@ -46,7 +46,7 @@
#include <exception>
#include <algorithm>
-#include "vulkan.h"
+#include "VulkanUtilities/VulkanHeaders.h"
#include "GraphicsTypes.h"
diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp
index 4dee5553..fe489efd 100644
--- a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp
@@ -27,6 +27,14 @@
#include <vector>
#include <cstring>
+
+#if PLATFORM_ANDROID
+// Android provides Vulkan loader starting with API level 24. To be
+// compatible with earlier versions, we will use manual loading.
+# define VOLK_IMPLEMENTATION
+# include "volk/volk.h"
+#endif
+
#include "VulkanErrors.hpp"
#include "VulkanUtilities/VulkanInstance.hpp"
#include "VulkanUtilities/VulkanDebug.hpp"
@@ -73,6 +81,13 @@ VulkanInstance::VulkanInstance(bool EnableValidation,
VkAllocationCallbacks* pVkAllocator) :
m_pVkAllocator{pVkAllocator}
{
+#if PLATFORM_ANDROID
+ if (volkInitialize() != VK_SUCCESS)
+ {
+ LOG_ERROR_AND_THROW("Failed to load Vulkan.");
+ }
+#endif
+
{
// Enumerate available layers
uint32_t LayerCount = 0;
@@ -188,6 +203,10 @@ VulkanInstance::VulkanInstance(bool EnableValidation,
auto res = vkCreateInstance(&InstanceCreateInfo, m_pVkAllocator, &m_VkInstance);
CHECK_VK_ERROR_AND_THROW(res, "Failed to create Vulkan instance");
+#if PLATFORM_ANDROID
+ volkLoadInstance(m_VkInstance);
+#endif
+
// If requested, we enable the default validation layers for debugging
if (m_DebugUtilsEnabled)
{