diff --git a/build_files/cmake/Modules/FindShaderC.cmake b/build_files/cmake/Modules/FindShaderC.cmake new file mode 100644 index 00000000000..e38ca137775 --- /dev/null +++ b/build_files/cmake/Modules/FindShaderC.cmake @@ -0,0 +1,63 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2023 Blender Foundation. + +# - Find ShaderC libraries +# Find the ShaderC includes and libraries +# This module defines +# SHADERC_INCLUDE_DIRS, where to find MoltenVK headers, Set when +# SHADERC_INCLUDE_DIR is found. +# SHADERC_LIBRARIES, libraries to link against to use ShaderC. +# SHADERC_ROOT_DIR, The base directory to search for ShaderC. +# This can also be an environment variable. +# SHADERC_FOUND, If false, do not try to use ShaderC. +# + +# If SHADERC_ROOT_DIR was defined in the environment, use it. +IF(NOT SHADERC_ROOT_DIR AND NOT $ENV{SHADERC_ROOT_DIR} STREQUAL "") + SET(SHADERC_ROOT_DIR $ENV{SHADERC_ROOT_DIR}) +ENDIF() + +SET(_shaderc_SEARCH_DIRS + ${SHADERC_ROOT_DIR} +) + +# FIXME: These finder modules typically don't use LIBDIR, +# this should be set by `./build_files/cmake/platform/` instead. +IF(DEFINED LIBDIR) + SET(_shaderc_SEARCH_DIRS ${_shaderc_SEARCH_DIRS} ${LIBDIR}/shaderc) +ENDIF() + +FIND_PATH(SHADERC_INCLUDE_DIR + NAMES + shaderc/shaderc.h + HINTS + ${_shaderc_SEARCH_DIRS} + PATH_SUFFIXES + include +) + +FIND_LIBRARY(SHADERC_LIBRARY + NAMES + shaderc_combined + HINTS + ${_shaderc_SEARCH_DIRS} + PATH_SUFFIXES + lib +) + +# handle the QUIETLY and REQUIRED arguments and set SHADERC_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ShaderC DEFAULT_MSG SHADERC_LIBRARY SHADERC_INCLUDE_DIR) + +IF(SHADERC_FOUND) + SET(SHADERC_LIBRARIES ${SHADERC_LIBRARY}) + SET(SHADERC_INCLUDE_DIRS ${SHADERC_INCLUDE_DIR}) +ENDIF() + +MARK_AS_ADVANCED( + SHADERC_INCLUDE_DIR + SHADERC_LIBRARY +) + +UNSET(_shaderc_SEARCH_DIRS) diff --git a/build_files/cmake/Modules/FindVulkan.cmake b/build_files/cmake/Modules/FindVulkan.cmake new file mode 100644 index 00000000000..37da42543db --- /dev/null +++ b/build_files/cmake/Modules/FindVulkan.cmake @@ -0,0 +1,63 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2023 Blender Foundation. + +# - Find Vulkan libraries +# Find the Vulkan includes and libraries +# This module defines +# VULKAN_INCLUDE_DIRS, where to find Vulkan headers, Set when +# VULKAN_INCLUDE_DIR is found. +# VULKAN_LIBRARIES, libraries to link against to use Vulkan. +# VULKAN_ROOT_DIR, The base directory to search for Vulkan. +# This can also be an environment variable. +# VULKAN_FOUND, If false, do not try to use Vulkan. +# + +# If VULKAN_ROOT_DIR was defined in the environment, use it. +IF(NOT VULKAN_ROOT_DIR AND NOT $ENV{VULKAN_ROOT_DIR} STREQUAL "") + SET(VULKAN_ROOT_DIR $ENV{VULKAN_ROOT_DIR}) +ENDIF() + +SET(_vulkan_SEARCH_DIRS + ${VULKAN_ROOT_DIR} +) + +# FIXME: These finder modules typically don't use LIBDIR, +# this should be set by `./build_files/cmake/platform/` instead. +IF(DEFINED LIBDIR) + SET(_vulkan_SEARCH_DIRS ${_vulkan_SEARCH_DIRS} ${LIBDIR}/vulkan) +ENDIF() + +FIND_PATH(VULKAN_INCLUDE_DIR + NAMES + vulkan/vulkan.h + HINTS + ${_vulkan_SEARCH_DIRS} + PATH_SUFFIXES + include +) + +FIND_LIBRARY(VULKAN_LIBRARY + NAMES + vulkan + HINTS + ${_vulkan_SEARCH_DIRS} + PATH_SUFFIXES + lib +) + +# handle the QUIETLY and REQUIRED arguments and set VULKAN_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Vulkan DEFAULT_MSG VULKAN_LIBRARY VULKAN_INCLUDE_DIR) + +IF(VULKAN_FOUND) + SET(VULKAN_LIBRARIES ${VULKAN_LIBRARY}) + SET(VULKAN_INCLUDE_DIRS ${VULKAN_INCLUDE_DIR}) +ENDIF() + +MARK_AS_ADVANCED( + VULKAN_INCLUDE_DIR + VULKAN_LIBRARY +) + +UNSET(_vulkan_SEARCH_DIRS) diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake index 09f9d79a6cf..0b7ae0532d8 100644 --- a/build_files/cmake/platform/platform_apple.cmake +++ b/build_files/cmake/platform/platform_apple.cmake @@ -97,22 +97,8 @@ add_bundled_libraries(materialx/lib) if(WITH_VULKAN_BACKEND) find_package(MoltenVK REQUIRED) - - if(EXISTS ${LIBDIR}/vulkan) - set(VULKAN_FOUND On) - set(VULKAN_ROOT_DIR ${LIBDIR}/vulkan) - set(VULKAN_INCLUDE_DIR ${VULKAN_ROOT_DIR}/include) - set(VULKAN_LIBRARY ${VULKAN_ROOT_DIR}/lib/libvulkan.dylib) - set(SHADERC_ROOT_DIR ${LIBDIR}/shaderc) - set(SHADERC_INCLUDE_DIR ${SHADERC_ROOT_DIR}/include) - set(SHADERC_LIBRARY ${SHADERC_ROOT_DIR}/lib/libshaderc_combined.a) - - set(VULKAN_INCLUDE_DIRS ${VULKAN_INCLUDE_DIR} ${SHADERC_INCLUDE_DIR} ${MOLTENVK_INCLUDE_DIRS}) - set(VULKAN_LIBRARIES ${VULKAN_LIBRARY} ${SHADERC_LIBRARY} ${MOLTENVK_LIBRARIES}) - else() - message(WARNING "Vulkan SDK was not found, disabling WITH_VULKAN_BACKEND") - set(WITH_VULKAN_BACKEND OFF) - endif() + find_package(ShaderC REQUIRED) + find_package(Vulkan REQUIRED) endif() if(WITH_OPENSUBDIV) diff --git a/extern/vulkan_memory_allocator/CMakeLists.txt b/extern/vulkan_memory_allocator/CMakeLists.txt index 0b709e8dda1..666fb824322 100644 --- a/extern/vulkan_memory_allocator/CMakeLists.txt +++ b/extern/vulkan_memory_allocator/CMakeLists.txt @@ -7,6 +7,7 @@ set(INC set(INC_SYS ${VULKAN_INCLUDE_DIRS} + ${MOLTENVK_INCLUDE_DIRS} ) set(SRC diff --git a/intern/ghost/CMakeLists.txt b/intern/ghost/CMakeLists.txt index ac7dd6ca5cf..3ea91256a3d 100644 --- a/intern/ghost/CMakeLists.txt +++ b/intern/ghost/CMakeLists.txt @@ -85,10 +85,12 @@ if(WITH_VULKAN_BACKEND) list(APPEND INC_SYS ${VULKAN_INCLUDE_DIRS} + ${MOLTENVK_INCLUDE_DIRS} ) list(APPEND LIB ${VULKAN_LIBRARIES} + ${MOLTENVK_LIBRARIES} ) add_definitions(-DWITH_VULKAN_BACKEND) diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 554ce065edb..68e77ef9a92 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -287,6 +287,8 @@ if(WITH_VULKAN_BACKEND) ) list(APPEND INC_SYS ${VULKAN_INCLUDE_DIRS} + ${MOLTENVK_INCLUDE_DIRS} + ${SHADERC_INCLUDE_DIRS} ) list(APPEND SRC ${VULKAN_SRC} @@ -294,6 +296,8 @@ if(WITH_VULKAN_BACKEND) list(APPEND LIB ${VULKAN_LIBRARIES} + ${SHADERC_LIBRARIES} + ${MOLTENVK_LIBRARIES} extern_vulkan_memory_allocator ) add_definitions(-DWITH_VULKAN_BACKEND) diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index a0816f41724..22b3d197672 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -1373,6 +1373,13 @@ elseif(APPLE) ) endif() + if(WITH_VULKAN_BACKEND) + install( + FILES ${VULKAN_LIBRARY} ${MOLTENVK_LIBRARY} + DESTINATION ${TARGETDIR_LIB} + ) + endif() + # Python. if(WITH_PYTHON AND NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK) # Copy the python libraries into the install directory.