summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2020-08-02 19:03:51 +0000
committerassiduous <assiduous@diligentgraphics.com>2020-08-02 19:03:51 +0000
commit399c93d52ed4ed89c73d80a934ce3aa14aa7eb90 (patch)
tree7ed96054625ca08284be75bb6b289d92eac4ac3f /Graphics/GraphicsEngineVulkan
parentMerge pull request #150 from tombish/master (diff)
downloadDiligentCore-399c93d52ed4ed89c73d80a934ce3aa14aa7eb90.tar.gz
DiligentCore-399c93d52ed4ed89c73d80a934ce3aa14aa7eb90.zip
Switched to using Volk on Windows (https://github.com/DiligentGraphics/DiligentCore/issues/151)
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
-rw-r--r--Graphics/GraphicsEngineVulkan/CMakeLists.txt15
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanHeaders.h12
-rw-r--r--Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp8
-rw-r--r--Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanLogicalDevice.cpp6
4 files changed, 16 insertions, 25 deletions
diff --git a/Graphics/GraphicsEngineVulkan/CMakeLists.txt b/Graphics/GraphicsEngineVulkan/CMakeLists.txt
index bb1809f0..28cf8b0f 100644
--- a/Graphics/GraphicsEngineVulkan/CMakeLists.txt
+++ b/Graphics/GraphicsEngineVulkan/CMakeLists.txt
@@ -182,12 +182,7 @@ else()
endif()
if(PLATFORM_WIN32)
- if(${ARCH} EQUAL 64)
- set(VULKAN_LIB_FOLDER x64)
- else()
- set(VULKAN_LIB_FOLDER x86)
- endif()
- find_library(Vulkan_LIBRARY NAMES vulkan-1 vulkan PATHS "../../ThirdParty/vulkan/libs/windows/${VULKAN_LIB_FOLDER}")
+ # Use Volk
elseif(PLATFORM_MACOS)
find_library(Vulkan_LIBRARY NAMES vulkan.1 vulkan PATHS "../../ThirdParty/vulkan/libs/macOS")
elseif(PLATFORM_IOS)
@@ -201,12 +196,12 @@ elseif(PLATFORM_IOS)
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)
+ # Use Volk
else()
find_library(Vulkan_LIBRARY NAMES vulkan)
endif()
-if(NOT USE_VOLK)
+if(Vulkan_LIBRARY)
list(APPEND PRIVATE_DEPENDENCIES ${Vulkan_LIBRARY})
endif()
@@ -260,7 +255,7 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
endif()
if(PLATFORM_WIN32)
- set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_WIN32_KHR=1 NOMINMAX)
+ set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_WIN32_KHR=1 NOMINMAX DILIGENT_USE_VOLK=1)
elseif(PLATFORM_LINUX)
set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_XCB_KHR=1 VK_USE_PLATFORM_XLIB_KHR=1)
elseif(PLATFORM_MACOS)
@@ -268,7 +263,7 @@ elseif(PLATFORM_MACOS)
elseif(PLATFORM_IOS)
set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_IOS_MVK=1)
elseif(PLATFORM_ANDROID)
- set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_ANDROID_KHR=1)
+ set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_ANDROID_KHR=1 DILIGENT_USE_VOLK=1)
else()
message(FATAL_ERROR "Unknown platform")
endif()
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanHeaders.h b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanHeaders.h
index 98bad1e8..c99145dd 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanHeaders.h
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanHeaders.h
@@ -27,20 +27,12 @@
#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
+#if DILIGENT_USE_VOLK
# define VK_NO_PROTOTYPES
#endif
#include "vulkan/vulkan.h"
-#if USE_VOLK
+#if DILIGENT_USE_VOLK
# include "volk/volk.h"
#endif
diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp
index 224b2f38..aa6235f3 100644
--- a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp
@@ -28,9 +28,7 @@
#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.
+#if DILIGENT_USE_VOLK
# define VOLK_IMPLEMENTATION
# include "volk/volk.h"
#endif
@@ -81,7 +79,7 @@ VulkanInstance::VulkanInstance(bool EnableValidation,
VkAllocationCallbacks* pVkAllocator) :
m_pVkAllocator{pVkAllocator}
{
-#if PLATFORM_ANDROID
+#if DILIGENT_USE_VOLK
if (volkInitialize() != VK_SUCCESS)
{
LOG_ERROR_AND_THROW("Failed to load Vulkan.");
@@ -211,7 +209,7 @@ 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
+#if DILIGENT_USE_VOLK
volkLoadInstance(m_VkInstance);
#endif
diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanLogicalDevice.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanLogicalDevice.cpp
index fbe6439a..29a8a836 100644
--- a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanLogicalDevice.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanLogicalDevice.cpp
@@ -55,6 +55,12 @@ VulkanLogicalDevice::VulkanLogicalDevice(VkPhysicalDevice vkPhysical
auto res = vkCreateDevice(vkPhysicalDevice, &DeviceCI, vkAllocator, &m_VkDevice);
CHECK_VK_ERROR_AND_THROW(res, "Failed to create logical device");
+#if DILIGENT_USE_VOLK
+ // Since we only use one device at this time, load device function entries
+ // https://github.com/zeux/volk#optimizing-device-calls
+ volkLoadDevice(m_VkDevice);
+#endif
+
m_EnabledGraphicsShaderStages = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
if (DeviceCI.pEnabledFeatures->geometryShader)
m_EnabledGraphicsShaderStages |= VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT;