Skip to content

Commit b620da6

Browse files
Vulkan: use standalone volk library instead of headers to avoid link conflicts
1 parent 231f0dc commit b620da6

File tree

6 files changed

+48
-16
lines changed

6 files changed

+48
-16
lines changed

BuildTools/CMake/VulkanUtils.cmake

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Returns platform-specific Vulkan definitions
2+
function(get_vulkan_platform_definitions OutVarName)
3+
if(PLATFORM_WIN32)
4+
set(Defs
5+
VK_USE_PLATFORM_WIN32_KHR=1
6+
)
7+
elseif(PLATFORM_LINUX)
8+
set(Defs
9+
VK_USE_PLATFORM_XCB_KHR=1
10+
VK_USE_PLATFORM_XLIB_KHR=1
11+
)
12+
elseif(PLATFORM_APPLE)
13+
set(Defs
14+
VK_USE_PLATFORM_METAL_EXT=1
15+
)
16+
elseif(PLATFORM_ANDROID)
17+
set(Defs
18+
VK_USE_PLATFORM_ANDROID_KHR=1
19+
)
20+
else()
21+
message(FATAL_ERROR "Unsupported platform")
22+
endif()
23+
24+
set(${OutVarName} ${Defs} PARENT_SCOPE)
25+
endfunction()

Graphics/GraphicsEngineVulkan/CMakeLists.txt

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
cmake_minimum_required (VERSION 3.10)
22

3+
include(../../BuildTools/CMake/VulkanUtils.cmake)
4+
35
project(Diligent-GraphicsEngineVk CXX)
46

57
set(INCLUDE
@@ -248,9 +250,9 @@ else()
248250
endif()
249251

250252
if(PLATFORM_WIN32)
251-
list(APPEND PRIVATE_DEPENDENCIES volk::volk_headers)
253+
list(APPEND PRIVATE_DEPENDENCIES volk::volk)
252254
elseif(PLATFORM_MACOS)
253-
list(APPEND PRIVATE_DEPENDENCIES volk::volk_headers)
255+
list(APPEND PRIVATE_DEPENDENCIES volk::volk)
254256
elseif(PLATFORM_IOS OR PLATFORM_TVOS)
255257
find_library(CORE_GRAPHICS CoreGraphics)
256258
find_library(METAL_LIBRARY Metal)
@@ -260,9 +262,9 @@ elseif(PLATFORM_IOS OR PLATFORM_TVOS)
260262
# Note that volk may be defined by external CMake, but we don't use it on iOS/tvOS
261263
list(APPEND PRIVATE_DEPENDENCIES ${MOLTENVK_LIBRARY} ${CORE_GRAPHICS} ${METAL_LIBRARY} ${QUARTZ_CORE} ${UI_KIT} ${IO_SURFACE})
262264
elseif(PLATFORM_LINUX)
263-
list(APPEND PRIVATE_DEPENDENCIES volk::volk_headers)
265+
list(APPEND PRIVATE_DEPENDENCIES volk::volk)
264266
elseif(PLATFORM_ANDROID)
265-
list(APPEND PRIVATE_DEPENDENCIES volk::volk_headers)
267+
list(APPEND PRIVATE_DEPENDENCIES volk::volk)
266268
else()
267269
find_library(Vulkan_LIBRARY NAMES vulkan)
268270
list(APPEND PRIVATE_DEPENDENCIES ${Vulkan_LIBRARY})
@@ -299,18 +301,19 @@ if (MINGW_BUILD)
299301
endif()
300302

301303
if(PLATFORM_WIN32)
302-
set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_WIN32_KHR=1 NOMINMAX DILIGENT_USE_VOLK=1)
304+
set(PRIVATE_COMPILE_DEFINITIONS NOMINMAX DILIGENT_USE_VOLK=1)
303305
elseif(PLATFORM_LINUX)
304-
set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_XCB_KHR=1 VK_USE_PLATFORM_XLIB_KHR=1 DILIGENT_USE_VOLK=1)
306+
set(PRIVATE_COMPILE_DEFINITIONS DILIGENT_USE_VOLK=1)
305307
elseif(PLATFORM_MACOS)
306-
set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_METAL_EXT=1 DILIGENT_USE_VOLK=1)
308+
set(PRIVATE_COMPILE_DEFINITIONS DILIGENT_USE_VOLK=1)
307309
elseif(PLATFORM_IOS OR PLATFORM_TVOS)
308-
set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_METAL_EXT=1)
309310
elseif(PLATFORM_ANDROID)
310-
set(PRIVATE_COMPILE_DEFINITIONS VK_USE_PLATFORM_ANDROID_KHR=1 DILIGENT_USE_VOLK=1)
311+
set(PRIVATE_COMPILE_DEFINITIONS DILIGENT_USE_VOLK=1)
311312
else()
312313
message(FATAL_ERROR "Unknown platform")
313314
endif()
315+
get_vulkan_platform_definitions(VULKAN_PLATFORM_DEFINES)
316+
list(APPEND PRIVATE_COMPILE_DEFINITIONS ${VULKAN_PLATFORM_DEFINES})
314317

315318
if (${DILIGENT_NO_GLSLANG})
316319
message("GLSLang is not being built. Vulkan backend will only be able to consume SPIRV byte code.")

Graphics/GraphicsEngineVulkan/src/VulkanUtilities/Instance.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
#include <array>
3535

3636
#if DILIGENT_USE_VOLK
37-
# define VOLK_IMPLEMENTATION
3837
# include "volk.h"
3938
#endif
4039

Tests/GPUTestFramework/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ if(PLATFORM_LINUX)
111111
endif()
112112

113113
if(VULKAN_SUPPORTED)
114-
target_link_libraries(Diligent-GPUTestFramework PUBLIC Vulkan::Headers volk::volk_headers)
114+
target_link_libraries(Diligent-GPUTestFramework PUBLIC Vulkan::Headers volk::volk)
115115

116116
if(PLATFORM_LINUX)
117117
target_link_libraries(Diligent-GPUTestFramework

Tests/GPUTestFramework/src/Vulkan/TestingEnvironmentVk.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232

3333
#include "GLSLangUtils.hpp"
3434

35-
#define VOLK_IMPLEMENTATION
3635
#include "volk.h"
3736

3837
namespace Diligent

ThirdParty/CMakeLists.txt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required (VERSION 3.11)
1+
cmake_minimum_required (VERSION 3.13)
22

33
# cmake_minimum_required(VERSION) resets all policies to their default
44
# values for the VERSION, so calling cmake_policy(SET CMP0063 NEW) has
@@ -150,16 +150,22 @@ if (VULKAN_SUPPORTED OR METAL_SUPPORTED OR WEBGPU_SUPPORTED OR (ARCHIVER_SUPPORT
150150
CXX_VISIBILITY_PRESET hidden # -fvisibility=hidden
151151
C_VISIBILITY_PRESET hidden # -fvisibility=hidden
152152
VISIBILITY_INLINES_HIDDEN TRUE
153-
)
153+
)
154154
else()
155155
set(DILIGENT_USE_SPIRV_TOOLCHAIN FALSE CACHE INTERNAL "")
156156
endif()
157157

158-
if (VULKAN_SUPPORTED AND (PLATFORM_WIN32 OR PLATFORM_LINUX OR PLATFORM_MACOS OR PLATFORM_ANDROID) AND (NOT TARGET volk::volk_headers))
158+
if (VULKAN_SUPPORTED AND (PLATFORM_WIN32 OR PLATFORM_LINUX OR PLATFORM_MACOS OR PLATFORM_ANDROID) AND (NOT TARGET volk::volk))
159+
include(../BuildTools/CMake/VulkanUtils.cmake)
159160
set(VOLK_PULL_IN_VULKAN OFF)
160161
set(VOLK_INSTALL OFF)
161-
set(VOLK_HEADERS_ONLY ON)
162+
set(VOLK_HEADERS_ONLY OFF)
162163
add_subdirectory(volk)
164+
target_link_libraries(volk PRIVATE Vulkan::Headers)
165+
get_vulkan_platform_definitions(VULKAN_PLATFORM_DEFINES)
166+
target_compile_definitions(volk PRIVATE ${VULKAN_PLATFORM_DEFINES})
167+
set_common_target_properties(volk)
168+
set_directory_root_folder("volk" "DiligentCore/ThirdParty")
163169
install(FILES "${volk_SOURCE_DIR}/LICENSE.md" DESTINATION "Licenses/ThirdParty/${DILIGENT_CORE_DIR}" RENAME Volk-License.md)
164170
endif()
165171

0 commit comments

Comments
 (0)