diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2020-08-02 19:03:51 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2020-08-02 19:03:51 +0000 |
| commit | 399c93d52ed4ed89c73d80a934ce3aa14aa7eb90 (patch) | |
| tree | 7ed96054625ca08284be75bb6b289d92eac4ac3f /Graphics/GraphicsEngineVulkan | |
| parent | Merge pull request #150 from tombish/master (diff) | |
| download | DiligentCore-399c93d52ed4ed89c73d80a934ce3aa14aa7eb90.tar.gz DiligentCore-399c93d52ed4ed89c73d80a934ce3aa14aa7eb90.zip | |
Switched to using Volk on Windows (https://github.com/DiligentGraphics/DiligentCore/issues/151)
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
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; |
