Build: Enable Vulkan in USD (no Vulkan SDK)
After some discussion with Brecht and Jeroen, it was decided to use an upstream patch from openusd ([from here](https://github.com/PixarAnimationStudios/OpenUSD/pull/3603)) so we could use the usual vulkan libraries and not the Vulkan SDK. I did not port Ray's Windows changes from the old PR https://projects.blender.org/blender/blender/pulls/137617 as I didn't know if anything else needs to be changed (and I've only tested this on Linux). Pull Request: https://projects.blender.org/blender/blender/pulls/138139
This commit is contained in:
committed by
Sebastian Parborg
parent
be2b8aca91
commit
eb96c2dfb3
@@ -178,6 +178,8 @@ endif()
|
||||
include(cmake/shaderc_deps.cmake)
|
||||
include(cmake/shaderc.cmake)
|
||||
include(cmake/vulkan.cmake)
|
||||
include(cmake/vulkan-memory-allocator.cmake)
|
||||
include(cmake/spirv-reflect.cmake)
|
||||
include(cmake/pybind11.cmake)
|
||||
include(cmake/nanobind.cmake)
|
||||
include(cmake/manifold.cmake)
|
||||
|
||||
@@ -160,7 +160,7 @@ download_source(VCINTRINSICS)
|
||||
download_source(OPENCLHEADERS)
|
||||
download_source(ICDLOADER)
|
||||
download_source(MP11)
|
||||
download_source(SPIRV_HEADERS)
|
||||
download_source(DPCPP_SPIRV_HEADERS)
|
||||
download_source(UNIFIED_RUNTIME)
|
||||
download_source(UNIFIED_MEMORY_FRAMEWORK)
|
||||
download_source(IGC)
|
||||
@@ -181,6 +181,10 @@ download_source(SHADERC_SPIRV_HEADERS)
|
||||
download_source(SHADERC_GLSLANG)
|
||||
download_source(VULKAN_HEADERS)
|
||||
download_source(VULKAN_LOADER)
|
||||
download_source(VULKAN_UTILITY_LIBRARIES)
|
||||
download_source(SPIRV_HEADERS)
|
||||
download_source(SPIRV_REFLECT)
|
||||
download_source(VULKAN_MEMORY_ALLOCATOR)
|
||||
download_source(PYBIND11)
|
||||
download_source(DEFLATE)
|
||||
download_source(HIPRT)
|
||||
|
||||
@@ -42,7 +42,7 @@ set(DPCPP_EXTRA_ARGS
|
||||
-DBOOST_MP11_SOURCE_DIR=${BUILD_DIR}/mp11/src/external_mp11/
|
||||
-DLEVEL_ZERO_LIBRARY=${LIBDIR}/level-zero/lib/${LIBPREFIX}ze_loader${SHAREDLIBEXT}
|
||||
-DLEVEL_ZERO_INCLUDE_DIR=${LIBDIR}/level-zero/include/level_zero
|
||||
-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${BUILD_DIR}/spirvheaders/src/external_spirvheaders/
|
||||
-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${BUILD_DIR}/dpcpp_spirvheaders/src/external_dpcpp_spirvheaders/
|
||||
-DSYCL_UR_USE_FETCH_CONTENT=OFF
|
||||
-DSYCL_UR_SOURCE_DIR=${BUILD_DIR}/unifiedruntime/src/external_unifiedruntime/
|
||||
-DFETCHCONTENT_SOURCE_DIR_UNIFIED-MEMORY-FRAMEWORK=${BUILD_DIR}/unifiedmemoryframework/src/external_unifiedmemoryframework/
|
||||
@@ -138,7 +138,7 @@ add_dependencies(
|
||||
external_icdloader
|
||||
external_mp11
|
||||
external_level-zero
|
||||
external_spirvheaders
|
||||
external_dpcpp_spirvheaders
|
||||
external_unifiedruntime
|
||||
external_unifiedmemoryframework
|
||||
external_zstd
|
||||
|
||||
@@ -52,11 +52,11 @@ ExternalProject_Add(external_mp11
|
||||
INSTALL_COMMAND echo .
|
||||
)
|
||||
|
||||
ExternalProject_Add(external_spirvheaders
|
||||
URL file://${PACKAGE_DIR}/${SPIRV_HEADERS_FILE}
|
||||
URL_HASH ${SPIRV_HEADERS_HASH_TYPE}=${SPIRV_HEADERS_HASH}
|
||||
ExternalProject_Add(external_dpcpp_spirvheaders
|
||||
URL file://${PACKAGE_DIR}/${DPCPP_SPIRV_HEADERS_FILE}
|
||||
URL_HASH ${DPCPP_SPIRV_HEADERS_HASH_TYPE}=${DPCPP_SPIRV_HEADERS_HASH}
|
||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||
PREFIX ${BUILD_DIR}/spirvheaders
|
||||
PREFIX ${BUILD_DIR}/dpcpp_spirvheaders
|
||||
CONFIGURE_COMMAND echo .
|
||||
BUILD_COMMAND echo .
|
||||
INSTALL_COMMAND echo .
|
||||
|
||||
32
build_files/build_environment/cmake/spirv-reflect.cmake
Normal file
32
build_files/build_environment/cmake/spirv-reflect.cmake
Normal file
@@ -0,0 +1,32 @@
|
||||
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
set(SPIRV_REFLECT_EXTRA_ARGS
|
||||
-DSPIRV_REFLECT_EXECUTABLE=OFF
|
||||
-DSPIRV_REFLECT_STATIC_LIB=ON
|
||||
)
|
||||
|
||||
ExternalProject_Add(external_spirv_reflect
|
||||
URL file://${PACKAGE_DIR}/${SPIRV_REFLECT_FILE}
|
||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||
URL_HASH ${SPIRV_REFLECT_HASH_TYPE}=${SPIRV_REFLECT_HASH}
|
||||
PREFIX ${BUILD_DIR}/spirv_reflect
|
||||
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
|
||||
|
||||
PATCH_COMMAND ${PATCH_CMD} -p 1 -d
|
||||
${BUILD_DIR}/spirv_reflect/src/external_spirv_reflect <
|
||||
${PATCH_DIR}/spirv_reflect.diff
|
||||
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/spirv_reflect
|
||||
${DEFAULT_CMAKE_FLAGS}
|
||||
${SPIRV_REFLECT_EXTRA_ARGS}
|
||||
|
||||
INSTALL_DIR ${LIBDIR}/spirv_reflect
|
||||
)
|
||||
|
||||
add_dependencies(
|
||||
external_spirv_reflect
|
||||
external_spirv_headers
|
||||
)
|
||||
@@ -26,10 +26,10 @@ if(WIN32)
|
||||
list(APPEND USD_PLATFORM_FLAGS -DOPENVDB_LIBRARY=${LIBDIR}/openvdb/lib/openvdb_d.lib)
|
||||
endif()
|
||||
elseif(UNIX)
|
||||
# Workaround USD not linking correctly with static Python library, where it would embed
|
||||
# part of the interpret in the USD library. Allow undefined Python symbols and replace
|
||||
# Python library with TBB so it doesn't complain about missing library.
|
||||
set(USD_PLATFORM_FLAGS
|
||||
# Workaround USD not linking correctly with static Python library, where it would embed
|
||||
# part of the interpret in the USD library. Allow undefined Python symbols and replace
|
||||
# Python library with TBB so it doesn't complain about missing library.
|
||||
# NOTE(@ideasman42): Setting the root is needed, without this an older version of Python
|
||||
# is detected from the system. Referencing the root-directory may remove the need
|
||||
# to explicitly set the `PYTHON_INCLUDE_DIR` & `PYTHON_LIBRARY`.
|
||||
@@ -53,6 +53,10 @@ elseif(UNIX)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT APPLE)
|
||||
list(APPEND USD_PLATFORM_FLAGS -DPXR_ENABLE_VULKAN_SUPPORT=ON)
|
||||
endif()
|
||||
|
||||
# Custom namespace to prevent conflicts when importing both bpy module
|
||||
# and usd-core pip packages with the same version but different libs.
|
||||
string(REPLACE "." "_" USD_NAMESPACE "pxrBlender_v${USD_VERSION}")
|
||||
@@ -61,7 +65,6 @@ set(USD_EXTRA_ARGS
|
||||
${USD_PLATFORM_FLAGS}
|
||||
-DOPENSUBDIV_ROOT_DIR=${LIBDIR}/opensubdiv
|
||||
-DOpenImageIO_ROOT=${LIBDIR}/openimageio
|
||||
-DVulkan_ROOT=${LIBDIR}/vulkan_loader
|
||||
-DMaterialX_ROOT=${LIBDIR}/materialx
|
||||
-DOPENEXR_LIBRARIES=${LIBDIR}/imath/lib/${LIBPREFIX}Imath${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}
|
||||
-DOPENEXR_INCLUDE_DIR=${LIBDIR}/imath/include
|
||||
@@ -96,9 +99,6 @@ set(USD_EXTRA_ARGS
|
||||
# USD 22.03 does not support OCIO 2.x
|
||||
# Tracking ticket https://github.com/PixarAnimationStudios/USD/issues/1386
|
||||
-DPXR_BUILD_OPENCOLORIO_PLUGIN=OFF
|
||||
# We'd like Vulkan support on, but it has trouble not finding the SDK since we have
|
||||
# the invididual components in the deps builder.
|
||||
-DPXR_ENABLE_VULKAN_SUPPORT=OFF
|
||||
-DPXR_ENABLE_PTEX_SUPPORT=OFF
|
||||
-DPXR_BUILD_USD_TOOLS=OFF
|
||||
-DCMAKE_DEBUG_POSTFIX=_d
|
||||
@@ -107,6 +107,12 @@ set(USD_EXTRA_ARGS
|
||||
-DTBB_LIBRARIES=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${SHAREDLIBEXT}
|
||||
-DTBB_LIBRARIES_DEBUG=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${SHAREDLIBEXT}
|
||||
-DTBB_LIBRARIES_RELEASE=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${SHAREDLIBEXT}
|
||||
-DVulkanHeaders_ROOT=${LIBDIR}/vulkan_headers
|
||||
-DVulkanLoader_ROOT=${LIBDIR}/vulkan_loader
|
||||
-DVulkanUtilityLibraries_ROOT=${LIBDIR}/vulkan_headers
|
||||
-DVulkanMemoryAllocator_ROOT=${LIBDIR}/vulkan_memory_allocator
|
||||
-DShaderC_ROOT=${LIBDIR}/shaderc
|
||||
-DSpirvReflect_ROOT=${LIBDIR}/spirv_reflect
|
||||
)
|
||||
|
||||
# Ray: I'm not sure if the other platforms relied on this or not but this is no longer
|
||||
@@ -146,7 +152,13 @@ ExternalProject_Add(external_usd
|
||||
${PATCH_DIR}/usd_forward_compat.diff &&
|
||||
${PATCH_CMD} -p 1 -d
|
||||
${BUILD_DIR}/usd/src/external_usd <
|
||||
${PATCH_DIR}/usd_noboost.diff
|
||||
${PATCH_DIR}/usd_noboost.diff &&
|
||||
${PATCH_CMD} -p 1 -d
|
||||
${BUILD_DIR}/usd/src/external_usd <
|
||||
${PATCH_DIR}/usd_no_vulkan_sdk.diff &&
|
||||
${PATCH_CMD} -p 1 -d
|
||||
${BUILD_DIR}/usd/src/external_usd <
|
||||
${PATCH_DIR}/usd_storm_vulkan.diff
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/usd
|
||||
-Wno-dev
|
||||
@@ -163,6 +175,12 @@ add_dependencies(
|
||||
external_python
|
||||
external_openimageio
|
||||
external_materialx
|
||||
external_vulkan_loader
|
||||
external_vulkan_headers
|
||||
external_vulkan_memory_allocator
|
||||
external_vulkan_utility_libraries
|
||||
external_shaderc
|
||||
external_spirv_reflect
|
||||
openvdb
|
||||
)
|
||||
|
||||
|
||||
@@ -1117,15 +1117,15 @@ set(MP11_HOMEPAGE https://github.com/boostorg/mp11)
|
||||
set(MP11_LICENSE SPDX:BSL-1.0)
|
||||
|
||||
# Source llvm-spirv/CMakeLists.txt (repo)
|
||||
# Source llvm-spirv/spirv-headers-tag.conf (commit/version)
|
||||
set(SPIRV_HEADERS_VERSION efb6b4099ddb8fa60f62956dee592c4b94ec6a49)
|
||||
set(SPIRV_HEADERS_URI https://github.com/KhronosGroup/SPIRV-Headers/archive/${SPIRV_HEADERS_VERSION}.tar.gz)
|
||||
set(SPIRV_HEADERS_HASH cb1f5b929f95169493f924f5aacf50ff9ce91e9470c28c5830a5ff4fca47062c)
|
||||
set(SPIRV_HEADERS_HASH_TYPE SHA256)
|
||||
set(SPIRV_HEADERS_FILE SPIR-V-Headers-${SPIRV_HEADERS_VERSION}.tar.gz)
|
||||
set(SPIRV_HEADERS_HOMEPAGE https://github.com/KhronosGroup/SPIRV-Headers)
|
||||
set(SPIRV_HEADERS_LICENSE SPDX:MIT-Khronos-old)
|
||||
set(SPIRV_HEADERS_COPYRIGHT "Copyright (c) 2015-2024 The Khronos Group Inc.")
|
||||
# Source llvm-spirv/spirv-headers-tag.conf (hash)
|
||||
set(DPCPP_SPIRV_HEADERS_VERSION efb6b4099ddb8fa60f62956dee592c4b94ec6a49)
|
||||
set(DPCPP_SPIRV_HEADERS_URI https://github.com/KhronosGroup/SPIRV-Headers/archive/${DPCPP_SPIRV_HEADERS_VERSION}.tar.gz)
|
||||
set(DPCPP_SPIRV_HEADERS_HASH cb1f5b929f95169493f924f5aacf50ff9ce91e9470c28c5830a5ff4fca47062c)
|
||||
set(DPCPP_SPIRV_HEADERS_HASH_TYPE SHA256)
|
||||
set(DPCPP_SPIRV_HEADERS_FILE DPCPP-SPIR-V-Headers-${DPCPP-SPIRV_HEADERS_VERSION}.tar.gz)
|
||||
set(DPCPP_SPIRV_HEADERS_HOMEPAGE https://github.com/KhronosGroup/SPIRV-Headers)
|
||||
set(DPCPP_SPIRV_HEADERS_LICENSE SPDX:MIT-Khronos-old)
|
||||
set(DPCPP_SPIRV_HEADERS_COPYRIGHT "Copyright (c) 2015-2024 The Khronos Group Inc.")
|
||||
|
||||
# Source sycl/cmake/modules/FetchUnifiedRuntime.cmake (repo)
|
||||
# Source sycl/cmake/modules/UnifiedRuntimeTag.cmake (commit/version)
|
||||
@@ -1348,11 +1348,11 @@ Copyright 2020 The Khronos Group Inc.
|
||||
Copyright (C) 2015-2018 Google, Inc.
|
||||
]=])
|
||||
|
||||
set(VULKAN_VERSION v1.3.296)
|
||||
set(VULKAN_VERSION 1.3.296)
|
||||
|
||||
set(VULKAN_HEADERS_VERSION ${VULKAN_VERSION})
|
||||
set(VULKAN_HEADERS_NAME Vulkan-Headers)
|
||||
set(VULKAN_HEADERS_URI https://github.com/KhronosGroup/Vulkan-Headers/archive/refs/tags/${VULKAN_HEADERS_VERSION}.tar.gz)
|
||||
set(VULKAN_HEADERS_URI https://github.com/KhronosGroup/Vulkan-Headers/archive/refs/tags/v${VULKAN_HEADERS_VERSION}.tar.gz)
|
||||
set(VULKAN_HEADERS_HASH 3f4cd229d8f7c24c9b5a6ead3d674803)
|
||||
set(VULKAN_HEADERS_HASH_TYPE MD5)
|
||||
set(VULKAN_HEADERS_FILE Vulkan-Headers-${VULKAN_HEADERS_VERSION}.tar.gz)
|
||||
@@ -1362,7 +1362,7 @@ set(VULKAN_HEADERS_COPYRIGHT "Copyright 2015-2023 The Khronos Group Inc.")
|
||||
|
||||
set(VULKAN_LOADER_VERSION ${VULKAN_VERSION})
|
||||
set(VULKAN_LOADER_NAME Vulkan-Loader)
|
||||
set(VULKAN_LOADER_URI https://github.com/KhronosGroup/Vulkan-Loader/archive/refs/tags/${VULKAN_LOADER_VERSION}.tar.gz)
|
||||
set(VULKAN_LOADER_URI https://github.com/KhronosGroup/Vulkan-Loader/archive/refs/tags/v${VULKAN_LOADER_VERSION}.tar.gz)
|
||||
set(VULKAN_LOADER_HASH bca05ec4914888990c92fa9c3e2738ff)
|
||||
set(VULKAN_LOADER_HASH_TYPE MD5)
|
||||
set(VULKAN_LOADER_FILE Vulkan-Loader-${VULKAN_LOADER_VERSION}.tar.gz)
|
||||
@@ -1375,6 +1375,45 @@ Copyright (c) 2019 LunarG, Inc.
|
||||
Copyright (c) 2019 Google Inc.
|
||||
]=])
|
||||
|
||||
set(VULKAN_UTILITY_LIBRARIES_VERSION ${VULKAN_VERSION})
|
||||
set(VULKAN_UTILITY_LIBRARIES_URI https://github.com/KhronosGroup/Vulkan-Utility-Libraries/archive/refs/tags/v${VULKAN_UTILITY_LIBRARIES_VERSION}.tar.gz)
|
||||
set(VULKAN_UTILITY_LIBRARIES_HASH 02091bdc2b5862685da83b37a6c48821)
|
||||
set(VULKAN_UTILITY_LIBRARIES_HASH_TYPE MD5)
|
||||
set(VULKAN_UTILITY_LIBRARIES_FILE Vulkan-Utility-Libraries-${VULKAN_UTILITY_LIBRARIES_VERSION}.tar.gz)
|
||||
set(VULKAN_UTILITY_LIBRARIES_HOMEPAGE https://github.com/KhronosGroup/Vulkan-Utility-Libraries)
|
||||
set(VULKAN_UTILITY_LIBRARIES_LICENSE SPDX:Apache-2.0)
|
||||
set(VULKAN_UTILITY_LIBRARIES_COPYRIGHT "Copyright 2015-2025 The Khronos Group Inc.")
|
||||
|
||||
set(VULKAN_MEMORY_ALLOCATOR_VERSION 3.2.1)
|
||||
set(VULKAN_MEMORY_ALLOCATOR_NAME Vulkan-Memory-Allocator)
|
||||
set(VULKAN_MEMORY_ALLOCATOR_URI
|
||||
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/archive/refs/tags/v${VULKAN_MEMORY_ALLOCATOR_VERSION}.tar.gz)
|
||||
set(VULKAN_MEMORY_ALLOCATOR_HASH f32b8374858566854e5f77564ea2e16d)
|
||||
set(VULKAN_MEMORY_ALLOCATOR_HASH_TYPE MD5)
|
||||
set(VULKAN_MEMORY_ALLOCATOR_FILE Vulkan-Memory-Allocator-${VULKAN_MEMORY_ALLOCATOR_VERSION}.tar.gz)
|
||||
set(VULKAN_MEMORY_ALLOCATOR_HOMEPAGE https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)
|
||||
set(VULKAN_MEMORY_ALLOCATOR_LICENSE SPDX:MIT)
|
||||
|
||||
set(SPIRV_HEADERS_VERSION ${VULKAN_VERSION})
|
||||
set(SPIRV_HEADERS_URI https://github.com/KhronosGroup/SPIRV-Headers/archive/refs/tags/vulkan-sdk-${SPIRV_HEADERS_VERSION}.0.tar.gz)
|
||||
set(SPIRV_HEADERS_HASH adee3d432b63f345c8ee6d625d0c8e6c)
|
||||
set(SPIRV_HEADERS_HASH_TYPE MD5)
|
||||
set(SPIRV_HEADERS_FILE SPIRV-Headers-${SPIRV_HEADERS_VERSION}.tar.gz)
|
||||
set(SPIRV_HEADERS_NAME SPIR-V Headers)
|
||||
set(SPIRV_HEADERS_HOMEPAGE https://github.com/KhronosGroup/SPIRV-Headers/)
|
||||
set(SPIRV_HEADERS_LICENSE SPDX:Apache-2.0)
|
||||
set(SPIRV_HEADERS_COPYRIGHT "Copyright (c) 2015-2014 The Khronos Group Inc.")
|
||||
|
||||
set(SPIRV_REFLECT_VERSION 1.4.309.0)
|
||||
set(SPIRV_REFLECT_NAME SPIRV-Reflect)
|
||||
set(SPIRV_REFLECT_URI
|
||||
https://github.com/KhronosGroup/SPIRV-Reflect/archive/refs/tags/vulkan-sdk-${SPIRV_REFLECT_VERSION}.tar.gz)
|
||||
set(SPIRV_REFLECT_HASH 11234b7d7895f69c3955e458c7b98914)
|
||||
set(SPIRV_REFLECT_HASH_TYPE MD5)
|
||||
set(SPIRV_REFLECT_FILE SPIRV-Reflect-${SPIRV_REFLECT_VERSION}.tar.gz)
|
||||
set(SPIRV_REFLECT_HOMEPAGE https://github.com/KhronosGroup/SPIRV-Reflect)
|
||||
set(SPIRV_REFLECT_LICENSE SPDX:Apache-2.0)
|
||||
|
||||
set(PYBIND11_VERSION 2.10.1)
|
||||
set(PYBIND11_URI https://github.com/pybind/pybind11/archive/refs/tags/v${PYBIND11_VERSION}.tar.gz)
|
||||
set(PYBIND11_HASH ce07bfd5089245da7807b3faf6cbc878)
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
set(VULKAN_MEMORY_ALLOCATOR_EXTRA_ARGS
|
||||
-DVMA_BUILD_DOCUMENTATION=OFF
|
||||
-DVMA_BUILD_SAMPLES=OFF
|
||||
-DVMA_ENABLE_INSTALL=ON
|
||||
)
|
||||
|
||||
ExternalProject_Add(external_vulkan_memory_allocator
|
||||
URL file://${PACKAGE_DIR}/${VULKAN_MEMORY_ALLOCATOR_FILE}
|
||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||
URL_HASH ${VULKAN_MEMORY_ALLOCATOR_HASH_TYPE}=${VULKAN_MEMORY_ALLOCATOR_HASH}
|
||||
PREFIX ${BUILD_DIR}/vulkan_memory_allocator
|
||||
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
|
||||
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/vulkan_memory_allocator
|
||||
${DEFAULT_CMAKE_FLAGS}
|
||||
${VULKAN_MEMORY_ALLOCATOR_EXTRA_ARGS}
|
||||
|
||||
INSTALL_DIR ${LIBDIR}/vulkan_memory_allocator
|
||||
)
|
||||
@@ -21,6 +21,42 @@ set(VULKAN_LOADER_EXTRA_ARGS
|
||||
-DVULKAN_HEADERS_INSTALL_DIR=${LIBDIR}/vulkan_headers
|
||||
)
|
||||
|
||||
set(VULKAN_UTILITY_LIBRARIES_EXTRA_ARGS
|
||||
-DVulkanHeaders_DIR=${LIBDIR}/vulkan_headers/share/cmake/VulkanHeaders)
|
||||
|
||||
ExternalProject_Add(external_vulkan_utility_libraries
|
||||
URL file://${PACKAGE_DIR}/${VULKAN_UTILITY_LIBRARIES_FILE}
|
||||
URL_HASH ${VULKAN_UTILITY_LIBRARIES_HASH_TYPE}=${VULKAN_UTILITY_LIBRARIES_HASH}
|
||||
PREFIX ${BUILD_DIR}/vulkan_utility_libraries
|
||||
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/vulkan_headers
|
||||
-Wno-dev ${DEFAULT_CMAKE_FLAGS}
|
||||
${VULKAN_UTILITY_LIBRARIES_EXTRA_ARGS}
|
||||
|
||||
INSTALL_DIR ${LIBDIR}/vulkan_headers
|
||||
)
|
||||
|
||||
add_dependencies(
|
||||
external_vulkan_utility_libraries
|
||||
external_vulkan_headers
|
||||
)
|
||||
|
||||
set(SPIRV_HEADERS_EXTRA_ARGS)
|
||||
|
||||
ExternalProject_Add(external_spirv_headers
|
||||
URL file://${PACKAGE_DIR}/${SPIRV_HEADERS_FILE}
|
||||
URL_HASH ${SPIRV_HEADERS_HASH_TYPE}=${SPIRV_HEADERS_HASH}
|
||||
PREFIX ${BUILD_DIR}/spirv_headers
|
||||
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/vulkan_headers
|
||||
-Wno-dev ${DEFAULT_CMAKE_FLAGS}
|
||||
${SPIRV_HEADERS_EXTRA_ARGS}
|
||||
|
||||
INSTALL_DIR ${LIBDIR}/vulkan_headers
|
||||
)
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
# These are used in `cmake/FindWayland.cmake` from `external_vulkan_loader`.
|
||||
# NOTE: When upgrading to CMAKE 3.22 we it would be cleaner to use: `PKG_CONFIG_ARGN`,
|
||||
|
||||
29
build_files/build_environment/patches/spirv_reflect.diff
Normal file
29
build_files/build_environment/patches/spirv_reflect.diff
Normal file
@@ -0,0 +1,29 @@
|
||||
From 9a0c9d47bbe8460bbb0861098bf4ee743bc51f45 Mon Sep 17 00:00:00 2001
|
||||
From: HolyBlackCat <holyblckcat@gmail.com>
|
||||
Date: Tue, 1 Apr 2025 22:48:21 +0500
|
||||
Subject: [PATCH] Install the header along with the library.
|
||||
|
||||
https://github.com/KhronosGroup/SPIRV-Reflect/commit/9a0c9d47bbe8460bbb0861098bf4ee743bc51f45
|
||||
|
||||
---
|
||||
CMakeLists.txt | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 906c208..b4085d1 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -113,8 +113,11 @@ if(SPIRV_REFLECT_STATIC_LIB)
|
||||
|
||||
target_include_directories(spirv-reflect-static
|
||||
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
+
|
||||
+ set_target_properties(spirv-reflect-static PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.h")
|
||||
+
|
||||
install(TARGETS spirv-reflect-static
|
||||
LIBRARY DESTINATION lib
|
||||
- ARCHIVE DESTINATION lib)
|
||||
+ ARCHIVE DESTINATION lib
|
||||
+ PUBLIC_HEADER DESTINATION include)
|
||||
endif()
|
||||
-
|
||||
581
build_files/build_environment/patches/usd_no_vulkan_sdk.diff
Normal file
581
build_files/build_environment/patches/usd_no_vulkan_sdk.diff
Normal file
@@ -0,0 +1,581 @@
|
||||
From 9d89d907a0cd100ee04d4c7feb44745b789c9e4f Mon Sep 17 00:00:00 2001
|
||||
From: Aleksi Sapon <aleksi.sapon@autodesk.com>
|
||||
Date: Fri, 11 Apr 2025 17:33:55 -0400
|
||||
Subject: [PATCH 1/2] build_usd.py now installs Vulkan dependencies
|
||||
|
||||
https://github.com/PixarAnimationStudios/OpenUSD/pull/3603
|
||||
---
|
||||
build_scripts/build_usd.py | 138 ++++++++++++++++++++++-
|
||||
cmake/defaults/Packages.cmake | 75 +++++++-----
|
||||
cmake/macros/Private.cmake | 6 +
|
||||
cmake/modules/FindShaderC.cmake | 41 +++++++
|
||||
cmake/modules/FindSpirvReflect.cmake | 54 +++++++++
|
||||
pxr/imaging/hgiVulkan/CMakeLists.txt | 4 -
|
||||
pxr/imaging/hgiVulkan/device.cpp | 19 +++-
|
||||
pxr/imaging/hgiVulkan/diagnostic.cpp | 2 +-
|
||||
pxr/imaging/hgiVulkan/sampler.cpp | 5 +-
|
||||
pxr/imaging/hgiVulkan/shaderCompiler.cpp | 4 +-
|
||||
pxr/imaging/hgiVulkan/spirv_reflect.cpp | 9 --
|
||||
pxr/imaging/hgiVulkan/spirv_reflect.h | 15 ---
|
||||
pxr/imaging/hgiVulkan/vk_mem_alloc.cpp | 10 --
|
||||
pxr/imaging/hgiVulkan/vk_mem_alloc.h | 15 ---
|
||||
pxr/imaging/hgiVulkan/vulkan.h | 6 +-
|
||||
15 files changed, 305 insertions(+), 98 deletions(-)
|
||||
create mode 100644 cmake/modules/FindShaderC.cmake
|
||||
create mode 100644 cmake/modules/FindSpirvReflect.cmake
|
||||
delete mode 100644 pxr/imaging/hgiVulkan/spirv_reflect.cpp
|
||||
delete mode 100644 pxr/imaging/hgiVulkan/spirv_reflect.h
|
||||
delete mode 100644 pxr/imaging/hgiVulkan/vk_mem_alloc.cpp
|
||||
delete mode 100644 pxr/imaging/hgiVulkan/vk_mem_alloc.h
|
||||
|
||||
diff --git a/cmake/defaults/Packages.cmake b/cmake/defaults/Packages.cmake
|
||||
index 4e9066ca3a..0a929fda3b 100644
|
||||
--- a/cmake/defaults/Packages.cmake
|
||||
+++ b/cmake/defaults/Packages.cmake
|
||||
@@ -187,38 +187,59 @@ if (PXR_BUILD_IMAGING)
|
||||
endif()
|
||||
if (PXR_ENABLE_VULKAN_SUPPORT)
|
||||
message(STATUS "Enabling experimental feature Vulkan support")
|
||||
- if (EXISTS $ENV{VULKAN_SDK})
|
||||
- # Prioritize the VULKAN_SDK includes and packages before any system
|
||||
- # installed headers. This is to prevent linking against older SDKs
|
||||
- # that may be installed by the OS.
|
||||
- # XXX This is fixed in cmake 3.18+
|
||||
- include_directories(BEFORE SYSTEM $ENV{VULKAN_SDK} $ENV{VULKAN_SDK}/include $ENV{VULKAN_SDK}/lib $ENV{VULKAN_SDK}/source)
|
||||
- set(ENV{PATH} "$ENV{VULKAN_SDK}:$ENV{VULKAN_SDK}/include:$ENV{VULKAN_SDK}/lib:$ENV{VULKAN_SDK}/source:$ENV{PATH}")
|
||||
- find_package(Vulkan REQUIRED)
|
||||
+
|
||||
+ if (DEFINED ENV{VULKAN_SDK})
|
||||
+ message(STATUS "Using Vulkan components from: \"$ENV{VULKAN_SDK}\"")
|
||||
+ # Not using usd_build.py: find from the Vulkan SDK
|
||||
+ find_package(Vulkan MODULE REQUIRED COMPONENTS shaderc_combined)
|
||||
+
|
||||
+ # The SDK uniquely places the "vk_mem_alloc.h" header inside a "vma"
|
||||
+ # subdirectory. This means we would need to use "#include <vma/vk_mem_alloc.h>"
|
||||
+ # only for the SDK build. Instead of forcing non-SDK users to create
|
||||
+ # this path, we'll add a another include directory for the SDK build.
|
||||
+ # That way "#include <vk_mem_alloc.h>" should work for everyone.
|
||||
+ target_include_directories(Vulkan::Vulkan INTERFACE
|
||||
+ "${Vulkan_INCLUDE_DIR}/vma")
|
||||
+
|
||||
list(APPEND VULKAN_LIBS Vulkan::Vulkan)
|
||||
+ list(APPEND VULKAN_LIBS Vulkan::shaderc_combined)
|
||||
+ else()
|
||||
+ message(STATUS "Using locally built Vulkan components")
|
||||
+ # Using usd_build.py: find individual components
|
||||
+ find_package(VulkanHeaders CONFIG REQUIRED)
|
||||
+ list(APPEND VULKAN_LIBS Vulkan::Headers)
|
||||
|
||||
- # Find the extra vulkan libraries we need
|
||||
- set(EXTRA_VULKAN_LIBS shaderc_combined)
|
||||
- if (WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
- set(EXTRA_VULKAN_LIBS shaderc_combinedd)
|
||||
- endif()
|
||||
- foreach(EXTRA_LIBRARY ${EXTRA_VULKAN_LIBS})
|
||||
- find_library("${EXTRA_LIBRARY}_PATH" NAMES "${EXTRA_LIBRARY}" PATHS $ENV{VULKAN_SDK}/lib)
|
||||
- list(APPEND VULKAN_LIBS "${${EXTRA_LIBRARY}_PATH}")
|
||||
- endforeach()
|
||||
-
|
||||
- # Find the OS specific libs we need
|
||||
- if (UNIX AND NOT APPLE)
|
||||
- find_package(X11 REQUIRED)
|
||||
- list(APPEND VULKAN_LIBS ${X11_LIBRARIES})
|
||||
- elseif (WIN32)
|
||||
- # No extra libs required
|
||||
- endif()
|
||||
+ find_package(VulkanUtilityLibraries CONFIG REQUIRED)
|
||||
+ list(APPEND VULKAN_LIBS Vulkan::UtilityHeaders)
|
||||
+
|
||||
+ find_package(VulkanLoader CONFIG REQUIRED)
|
||||
+ list(APPEND VULKAN_LIBS Vulkan::Loader)
|
||||
|
||||
- add_definitions(-DPXR_VULKAN_SUPPORT_ENABLED)
|
||||
+ find_package(VulkanMemoryAllocator CONFIG REQUIRED)
|
||||
+ list(APPEND VULKAN_LIBS GPUOpen::VulkanMemoryAllocator)
|
||||
+
|
||||
+ find_package(ShaderC MODULE REQUIRED)
|
||||
+ list(APPEND VULKAN_LIBS shaderc_combined)
|
||||
+ endif()
|
||||
+
|
||||
+ # In either case we have custom logic for SPIRV-Reflect
|
||||
+ find_package(SpirvReflect MODULE REQUIRED)
|
||||
+ if(SpirvReflect_IS_SOURCE_DEP)
|
||||
+ # SPIRV-Reflect should not be installed nor exported
|
||||
+ list(APPEND VULKAN_LIBS $<BUILD_LOCAL_INTERFACE:spirv-reflect>)
|
||||
else()
|
||||
- message(FATAL_ERROR "VULKAN_SDK not valid")
|
||||
+ list(APPEND VULKAN_LIBS spirv-reflect)
|
||||
endif()
|
||||
+
|
||||
+ # Find the OS specific libs we need
|
||||
+ if (UNIX AND NOT APPLE)
|
||||
+ find_package(X11 REQUIRED)
|
||||
+ list(APPEND VULKAN_LIBS ${X11_LIBRARIES})
|
||||
+ elseif (WIN32)
|
||||
+ # No extra libs required
|
||||
+ endif()
|
||||
+
|
||||
+ add_definitions(-DPXR_VULKAN_SUPPORT_ENABLED)
|
||||
endif()
|
||||
# --Opensubdiv
|
||||
set(OPENSUBDIV_USE_GPU ${PXR_BUILD_GPU_SUPPORT})
|
||||
diff --git a/cmake/macros/Private.cmake b/cmake/macros/Private.cmake
|
||||
index 6fe1134c14..4629e5a03f 100644
|
||||
--- a/cmake/macros/Private.cmake
|
||||
+++ b/cmake/macros/Private.cmake
|
||||
@@ -823,6 +823,12 @@ function(_pxr_target_link_libraries NAME)
|
||||
list(APPEND all_libraries ${external})
|
||||
|
||||
foreach(lib ${all_libraries})
|
||||
+ # Remove BUILD and INSTALL generator expressions:
|
||||
+ # $<BUILD_LOCAL_INTERFACE:tgt> -> tgt
|
||||
+ string(REGEX REPLACE
|
||||
+ [[\$\<(BUILD|INSTALL)_[_A-Z]+\:(.+)\>]]
|
||||
+ [[\2]] lib ${lib})
|
||||
+
|
||||
if (NOT TARGET ${lib})
|
||||
continue()
|
||||
endif()
|
||||
diff --git a/cmake/modules/FindShaderC.cmake b/cmake/modules/FindShaderC.cmake
|
||||
new file mode 100644
|
||||
index 0000000000..4dffb19bcc
|
||||
--- /dev/null
|
||||
+++ b/cmake/modules/FindShaderC.cmake
|
||||
@@ -0,0 +1,41 @@
|
||||
+include(FindPackageHandleStandardArgs)
|
||||
+
|
||||
+find_path(shaderc_INCLUDE_DIR "shaderc/shaderc.h")
|
||||
+find_library(shaderc_combined_LIBRARY "shaderc_combined")
|
||||
+find_library(shaderc_combined_DEBUG_LIBRARY "shaderc_combinedd")
|
||||
+
|
||||
+set(shaderc_combined_release_or_debug "${shaderc_combined_LIBRARY}")
|
||||
+if (NOT shaderc_combined_release_or_debug)
|
||||
+ set(shaderc_combined_release_or_debug "${shaderc_combined_DEBUG_LIBRARY}")
|
||||
+endif()
|
||||
+
|
||||
+find_package_handle_standard_args(ShaderC DEFAULT_MSG
|
||||
+ shaderc_combined_release_or_debug
|
||||
+ shaderc_INCLUDE_DIR)
|
||||
+
|
||||
+if (ShaderC_FOUND)
|
||||
+ add_library(shaderc_combined STATIC IMPORTED)
|
||||
+ target_include_directories(shaderc_combined INTERFACE "${shaderc_INCLUDE_DIR}")
|
||||
+
|
||||
+ if (shaderc_combined_LIBRARY AND NOT shaderc_combined_DEBUG_LIBRARY)
|
||||
+ # Only one un-suffixed lib found: ambiguous configuration,
|
||||
+ # so import using the generic IMPORTED_LOCATION.
|
||||
+ set_target_properties(shaderc_combined PROPERTIES
|
||||
+ IMPORTED_LOCATION ${shaderc_combined_LIBRARY})
|
||||
+ else()
|
||||
+ # We found a lib with a debug suffix so we can disambiguate.
|
||||
+ set(found_configurations)
|
||||
+ if (shaderc_combined_LIBRARY)
|
||||
+ set_target_properties(shaderc_combined PROPERTIES
|
||||
+ IMPORTED_LOCATION_RELEASE "${shaderc_combined_LIBRARY}")
|
||||
+ list(APPEND found_configurations Release)
|
||||
+ endif()
|
||||
+ if (shaderc_combined_DEBUG_LIBRARY)
|
||||
+ set_target_properties(shaderc_combined PROPERTIES
|
||||
+ IMPORTED_LOCATION_DEBUG "${shaderc_combined_DEBUG_LIBRARY}")
|
||||
+ list(APPEND found_configurations Debug)
|
||||
+ endif()
|
||||
+ set_target_properties(shaderc_combined PROPERTIES
|
||||
+ IMPORTED_CONFIGURATIONS "${found_configurations}")
|
||||
+ endif()
|
||||
+endif()
|
||||
diff --git a/cmake/modules/FindSpirvReflect.cmake b/cmake/modules/FindSpirvReflect.cmake
|
||||
new file mode 100644
|
||||
index 0000000000..c563252b88
|
||||
--- /dev/null
|
||||
+++ b/cmake/modules/FindSpirvReflect.cmake
|
||||
@@ -0,0 +1,54 @@
|
||||
+include(FindPackageHandleStandardArgs)
|
||||
+
|
||||
+set(vulkan_sdk_source_path_hints)
|
||||
+set(vulkan_sdk_lib_path_hints)
|
||||
+if (DEFINED ENV{VULKAN_SDK})
|
||||
+ list(APPEND vulkan_sdk_source_path_hints "$ENV{VULKAN_SDK}/source/SPIRV-Reflect")
|
||||
+ list(APPEND vulkan_sdk_source_path_hints "$ENV{VULKAN_SDK}/include/SPIRV-Reflect")
|
||||
+ list(APPEND vulkan_sdk_lib_path_hints "$ENV{VULKAN_SDK}/lib")
|
||||
+endif()
|
||||
+
|
||||
+find_path(spirv-reflect_INCLUDE_DIR "spirv_reflect.h"
|
||||
+ HINTS ${vulkan_sdk_source_path_hints})
|
||||
+find_library(spirv-reflect_LIBRARY "spirv-reflect-static"
|
||||
+ HINTS ${vulkan_sdk_lib_path_hints})
|
||||
+
|
||||
+# SPIRV-Reflect is distributed as a source and header file pair,
|
||||
+# but can also be built as a static library.
|
||||
+if (spirv-reflect_LIBRARY)
|
||||
+ find_package_handle_standard_args(SpirvReflect DEFAULT_MSG
|
||||
+ spirv-reflect_LIBRARY
|
||||
+ spirv-reflect_INCLUDE_DIR)
|
||||
+
|
||||
+ if (SpirvReflect_FOUND)
|
||||
+ add_library(spirv-reflect STATIC IMPORTED)
|
||||
+ set_target_properties(spirv-reflect PROPERTIES IMPORTED_LOCATION "${spirv-reflect_LIBRARY}")
|
||||
+ target_include_directories(spirv-reflect INTERFACE "${spirv-reflect_INCLUDE_DIR}")
|
||||
+ set(SpirvReflect_IS_SOURCE_DEP FALSE)
|
||||
+ endif()
|
||||
+else()
|
||||
+ find_file(spirv-reflect_SOURCE "spirv_reflect.c"
|
||||
+ HINTS ${vulkan_sdk_source_path_hints})
|
||||
+ find_package_handle_standard_args(SpirvReflect DEFAULT_MSG
|
||||
+ spirv-reflect_SOURCE
|
||||
+ spirv-reflect_INCLUDE_DIR)
|
||||
+
|
||||
+ if (SpirvReflect_FOUND)
|
||||
+ add_library(spirv-reflect STATIC)
|
||||
+ target_sources(spirv-reflect PRIVATE "${spirv-reflect_SOURCE}")
|
||||
+ target_include_directories(spirv-reflect PUBLIC "${spirv-reflect_INCLUDE_DIR}")
|
||||
+ set_target_properties(spirv-reflect PROPERTIES
|
||||
+ ARCHIVE_OUTPUT_DIRECTORY "third_party")
|
||||
+ set(SpirvReflect_IS_SOURCE_DEP TRUE)
|
||||
+ endif()
|
||||
+endif()
|
||||
+
|
||||
+if (SpirvReflect_FOUND AND NOT EXISTS "${spirv-reflect_INCLUDE_DIR}/include/spirv/unified1/spirv.h")
|
||||
+ # Most probably not from the Vulkan SDK, so use a "system path."
|
||||
+ # If installed from build_usd.py this will be found in the USD install path.
|
||||
+ if (SpirvReflect_IS_SOURCE_DEP)
|
||||
+ target_compile_definitions(spirv-reflect PUBLIC SPIRV_REFLECT_USE_SYSTEM_SPIRV_H)
|
||||
+ else()
|
||||
+ target_compile_definitions(spirv-reflect INTERFACE SPIRV_REFLECT_USE_SYSTEM_SPIRV_H)
|
||||
+ endif()
|
||||
+endif()
|
||||
diff --git a/pxr/imaging/hgiVulkan/CMakeLists.txt b/pxr/imaging/hgiVulkan/CMakeLists.txt
|
||||
index 00ad754480..dff4754366 100644
|
||||
--- a/pxr/imaging/hgiVulkan/CMakeLists.txt
|
||||
+++ b/pxr/imaging/hgiVulkan/CMakeLists.txt
|
||||
@@ -40,15 +40,11 @@ pxr_library(hgiVulkan
|
||||
shaderProgram
|
||||
shaderSection
|
||||
texture
|
||||
- vk_mem_alloc
|
||||
|
||||
PUBLIC_HEADERS
|
||||
api.h
|
||||
vulkan.h
|
||||
|
||||
- PRIVATE_CLASSES
|
||||
- spirv_reflect
|
||||
-
|
||||
RESOURCE_FILES
|
||||
plugInfo.json
|
||||
)
|
||||
diff --git a/pxr/imaging/hgiVulkan/device.cpp b/pxr/imaging/hgiVulkan/device.cpp
|
||||
index 4e5a9627ad..5c0b70ddcb 100644
|
||||
--- a/pxr/imaging/hgiVulkan/device.cpp
|
||||
+++ b/pxr/imaging/hgiVulkan/device.cpp
|
||||
@@ -11,10 +11,12 @@
|
||||
#include "pxr/imaging/hgiVulkan/hgi.h"
|
||||
#include "pxr/imaging/hgiVulkan/instance.h"
|
||||
#include "pxr/imaging/hgiVulkan/pipelineCache.h"
|
||||
-#include "pxr/imaging/hgiVulkan/vk_mem_alloc.h"
|
||||
|
||||
#include "pxr/base/tf/diagnostic.h"
|
||||
|
||||
+#define VMA_IMPLEMENTATION
|
||||
+#include <vk_mem_alloc.h>
|
||||
+
|
||||
|
||||
PXR_NAMESPACE_OPEN_SCOPE
|
||||
|
||||
@@ -171,11 +173,9 @@ HgiVulkanDevice::HgiVulkanDevice(HgiVulkanInstance* instance)
|
||||
|
||||
// Allow certain buffers/images to have dedicated memory allocations to
|
||||
// improve performance on some GPUs.
|
||||
- bool dedicatedAllocations = false;
|
||||
if (IsSupportedExtension(VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME)
|
||||
&& IsSupportedExtension(VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME))
|
||||
{
|
||||
- dedicatedAllocations = true;
|
||||
extensions.push_back(VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME);
|
||||
extensions.push_back(VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME);
|
||||
}
|
||||
@@ -335,9 +335,16 @@ HgiVulkanDevice::HgiVulkanDevice(HgiVulkanInstance* instance)
|
||||
allocatorInfo.instance = instance->GetVulkanInstance();
|
||||
allocatorInfo.physicalDevice = _vkPhysicalDevice;
|
||||
allocatorInfo.device = _vkDevice;
|
||||
- if (dedicatedAllocations) {
|
||||
- allocatorInfo.flags |=VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT;
|
||||
- }
|
||||
+
|
||||
+ // Enable to use Vulkan 1.3 at runtime
|
||||
+ // With Vulkan 1.3, VMA would be able to apply more optimizations.
|
||||
+ allocatorInfo.vulkanApiVersion = VK_API_VERSION_1_3;
|
||||
+
|
||||
+ // VMA will fill the other pointers itself.
|
||||
+ VmaVulkanFunctions vmaVulkanFunctions{};
|
||||
+ vmaVulkanFunctions.vkGetInstanceProcAddr = &vkGetInstanceProcAddr;
|
||||
+ vmaVulkanFunctions.vkGetDeviceProcAddr = &vkGetDeviceProcAddr;
|
||||
+ allocatorInfo.pVulkanFunctions = &vmaVulkanFunctions;
|
||||
|
||||
if (supportsMemExtension) {
|
||||
allocatorInfo.flags |= VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT;
|
||||
diff --git a/pxr/imaging/hgiVulkan/diagnostic.cpp b/pxr/imaging/hgiVulkan/diagnostic.cpp
|
||||
index fb8d756d6d..455780e2c8 100644
|
||||
--- a/pxr/imaging/hgiVulkan/diagnostic.cpp
|
||||
+++ b/pxr/imaging/hgiVulkan/diagnostic.cpp
|
||||
@@ -274,4 +274,4 @@ HgiVulkanResultString(VkResult result)
|
||||
return string_VkResult(result);
|
||||
}
|
||||
|
||||
-PXR_NAMESPACE_CLOSE_SCOPE
|
||||
\ No newline at end of file
|
||||
+PXR_NAMESPACE_CLOSE_SCOPE
|
||||
diff --git a/pxr/imaging/hgiVulkan/sampler.cpp b/pxr/imaging/hgiVulkan/sampler.cpp
|
||||
index e89235cd6f..01de3a85d0 100644
|
||||
--- a/pxr/imaging/hgiVulkan/sampler.cpp
|
||||
+++ b/pxr/imaging/hgiVulkan/sampler.cpp
|
||||
@@ -12,7 +12,8 @@
|
||||
#include "pxr/imaging/hgiVulkan/sampler.h"
|
||||
#include "pxr/imaging/hgiVulkan/diagnostic.h"
|
||||
|
||||
-#include <float.h>
|
||||
+#include <algorithm>
|
||||
+#include <cfloat>
|
||||
|
||||
PXR_NAMESPACE_OPEN_SCOPE
|
||||
|
||||
@@ -104,4 +105,4 @@ HgiVulkanSampler::GetInflightBits()
|
||||
return _inflightBits;
|
||||
}
|
||||
|
||||
-PXR_NAMESPACE_CLOSE_SCOPE
|
||||
\ No newline at end of file
|
||||
+PXR_NAMESPACE_CLOSE_SCOPE
|
||||
diff --git a/pxr/imaging/hgiVulkan/shaderCompiler.cpp b/pxr/imaging/hgiVulkan/shaderCompiler.cpp
|
||||
index 333c2bf125..576b898a99 100644
|
||||
--- a/pxr/imaging/hgiVulkan/shaderCompiler.cpp
|
||||
+++ b/pxr/imaging/hgiVulkan/shaderCompiler.cpp
|
||||
@@ -10,9 +10,9 @@
|
||||
#include "pxr/imaging/hgiVulkan/device.h"
|
||||
#include "pxr/imaging/hgiVulkan/diagnostic.h"
|
||||
#include "pxr/imaging/hgiVulkan/shaderCompiler.h"
|
||||
-#include "pxr/imaging/hgiVulkan/spirv_reflect.h"
|
||||
|
||||
#include <shaderc/shaderc.hpp>
|
||||
+#include <spirv_reflect.h>
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
@@ -278,4 +278,4 @@ HgiVulkanMakeDescriptorSetLayouts(
|
||||
return layouts;
|
||||
}
|
||||
|
||||
-PXR_NAMESPACE_CLOSE_SCOPE
|
||||
\ No newline at end of file
|
||||
+PXR_NAMESPACE_CLOSE_SCOPE
|
||||
diff --git a/pxr/imaging/hgiVulkan/spirv_reflect.cpp b/pxr/imaging/hgiVulkan/spirv_reflect.cpp
|
||||
deleted file mode 100644
|
||||
index b2862df17d..0000000000
|
||||
--- a/pxr/imaging/hgiVulkan/spirv_reflect.cpp
|
||||
+++ /dev/null
|
||||
@@ -1,9 +0,0 @@
|
||||
-//
|
||||
-// Copyright 2023 Pixar
|
||||
-//
|
||||
-// Licensed under the terms set forth in the LICENSE.txt file available at
|
||||
-// https://openusd.org/license.
|
||||
-//
|
||||
-#include "pxr/imaging/hgiVulkan/spirv_reflect.h"
|
||||
-
|
||||
-#include <SPIRV-Reflect/spirv_reflect.c>
|
||||
diff --git a/pxr/imaging/hgiVulkan/spirv_reflect.h b/pxr/imaging/hgiVulkan/spirv_reflect.h
|
||||
deleted file mode 100644
|
||||
index b2779079a5..0000000000
|
||||
--- a/pxr/imaging/hgiVulkan/spirv_reflect.h
|
||||
+++ /dev/null
|
||||
@@ -1,15 +0,0 @@
|
||||
-//
|
||||
-// Copyright 2023 Pixar
|
||||
-//
|
||||
-// Licensed under the terms set forth in the LICENSE.txt file available at
|
||||
-// https://openusd.org/license.
|
||||
-//
|
||||
-#ifndef PXR_IMAGING_HGIVULKAN_SPIRV_REFLECT_H
|
||||
-#define PXR_IMAGING_HGIVULKAN_SPIRV_REFLECT_H
|
||||
-
|
||||
-// This is an implementation of SPIRV-Reflect included
|
||||
-// from the Vulkan SDK.
|
||||
-
|
||||
-#include <SPIRV-Reflect/spirv_reflect.h>
|
||||
-
|
||||
-#endif
|
||||
diff --git a/pxr/imaging/hgiVulkan/vk_mem_alloc.cpp b/pxr/imaging/hgiVulkan/vk_mem_alloc.cpp
|
||||
deleted file mode 100644
|
||||
index 8f47ddc85f..0000000000
|
||||
--- a/pxr/imaging/hgiVulkan/vk_mem_alloc.cpp
|
||||
+++ /dev/null
|
||||
@@ -1,10 +0,0 @@
|
||||
-//
|
||||
-// Copyright 2023 Pixar
|
||||
-//
|
||||
-// Licensed under the terms set forth in the LICENSE.txt file available at
|
||||
-// https://openusd.org/license.
|
||||
-//
|
||||
-#include "pxr/imaging/hgiVulkan/vk_mem_alloc.h"
|
||||
-
|
||||
-#define VMA_IMPLEMENTATION
|
||||
-#include <vma/vk_mem_alloc.h>
|
||||
diff --git a/pxr/imaging/hgiVulkan/vk_mem_alloc.h b/pxr/imaging/hgiVulkan/vk_mem_alloc.h
|
||||
deleted file mode 100644
|
||||
index 48f5fceff2..0000000000
|
||||
--- a/pxr/imaging/hgiVulkan/vk_mem_alloc.h
|
||||
+++ /dev/null
|
||||
@@ -1,15 +0,0 @@
|
||||
-//
|
||||
-// Copyright 2023 Pixar
|
||||
-//
|
||||
-// Licensed under the terms set forth in the LICENSE.txt file available at
|
||||
-// https://openusd.org/license.
|
||||
-//
|
||||
-#ifndef PXR_IMAGING_HGIVULKAN_VK_MEM_ALLOC_H
|
||||
-#define PXR_IMAGING_HGIVULKAN_VK_MEM_ALLOC_H
|
||||
-
|
||||
-// This is an implementation of VMA (Vulkan Memory Allocator) included
|
||||
-// from the Vulkan SDK.
|
||||
-
|
||||
-#include <vma/vk_mem_alloc.h>
|
||||
-
|
||||
-#endif
|
||||
diff --git a/pxr/imaging/hgiVulkan/vulkan.h b/pxr/imaging/hgiVulkan/vulkan.h
|
||||
index 3ea215679f..7f28679328 100644
|
||||
--- a/pxr/imaging/hgiVulkan/vulkan.h
|
||||
+++ b/pxr/imaging/hgiVulkan/vulkan.h
|
||||
@@ -22,7 +22,11 @@
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
-#include "pxr/imaging/hgiVulkan/vk_mem_alloc.h"
|
||||
+#define VMA_STATIC_VULKAN_FUNCTIONS 1
|
||||
+// Allow dynamic fetching too. This is a fallback for anything that doesn't
|
||||
+// have a prototype.
|
||||
+#define VMA_DYNAMIC_VULKAN_FUNCTIONS 1
|
||||
+#include <vk_mem_alloc.h>
|
||||
|
||||
// Use the default allocator (nullptr)
|
||||
inline VkAllocationCallbacks*
|
||||
|
||||
From b8db3a3ed8dea771fdfa3103562f4f33976efd16 Mon Sep 17 00:00:00 2001
|
||||
From: Aleksi Sapon <aleksi.sapon@autodesk.com>
|
||||
Date: Tue, 22 Apr 2025 14:43:10 -0400
|
||||
Subject: [PATCH 2/2] Add Vulkan dependencies to pxrConfig.cmake
|
||||
|
||||
---
|
||||
cmake/defaults/Packages.cmake | 29 +++++++++++++++--------------
|
||||
pxr/pxrConfig.cmake.in | 26 ++++++++++++++++++++++++++
|
||||
2 files changed, 41 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/cmake/defaults/Packages.cmake b/cmake/defaults/Packages.cmake
|
||||
index 0a929fda3b..4d2658441e 100644
|
||||
--- a/cmake/defaults/Packages.cmake
|
||||
+++ b/cmake/defaults/Packages.cmake
|
||||
@@ -188,23 +188,31 @@ if (PXR_BUILD_IMAGING)
|
||||
if (PXR_ENABLE_VULKAN_SUPPORT)
|
||||
message(STATUS "Enabling experimental feature Vulkan support")
|
||||
|
||||
+ # We use BUILD_LOCAL_INTERFACE so that the Vulkan dependencies remain
|
||||
+ # internal only. Except for the headers, which are publicly accessible
|
||||
+ # from hgiVulkan.
|
||||
if (DEFINED ENV{VULKAN_SDK})
|
||||
message(STATUS "Using Vulkan components from: \"$ENV{VULKAN_SDK}\"")
|
||||
+ set(PXR_USING_VULKAN_SDK ON) # for pxrConfig.cmake
|
||||
+
|
||||
# Not using usd_build.py: find from the Vulkan SDK
|
||||
find_package(Vulkan MODULE REQUIRED COMPONENTS shaderc_combined)
|
||||
|
||||
+ list(APPEND VULKAN_LIBS Vulkan::Headers)
|
||||
# The SDK uniquely places the "vk_mem_alloc.h" header inside a "vma"
|
||||
# subdirectory. This means we would need to use "#include <vma/vk_mem_alloc.h>"
|
||||
# only for the SDK build. Instead of forcing non-SDK users to create
|
||||
# this path, we'll add a another include directory for the SDK build.
|
||||
# That way "#include <vk_mem_alloc.h>" should work for everyone.
|
||||
- target_include_directories(Vulkan::Vulkan INTERFACE
|
||||
+ target_include_directories(Vulkan::Headers INTERFACE
|
||||
"${Vulkan_INCLUDE_DIR}/vma")
|
||||
|
||||
- list(APPEND VULKAN_LIBS Vulkan::Vulkan)
|
||||
- list(APPEND VULKAN_LIBS Vulkan::shaderc_combined)
|
||||
+ list(APPEND VULKAN_LIBS $<BUILD_LOCAL_INTERFACE:Vulkan::Vulkan>)
|
||||
+ list(APPEND VULKAN_LIBS $<BUILD_LOCAL_INTERFACE:Vulkan::shaderc_combined>)
|
||||
else()
|
||||
message(STATUS "Using locally built Vulkan components")
|
||||
+ set(PXR_USING_VULKAN_SDK OFF) # for pxrConfig.cmake
|
||||
+
|
||||
# Using usd_build.py: find individual components
|
||||
find_package(VulkanHeaders CONFIG REQUIRED)
|
||||
list(APPEND VULKAN_LIBS Vulkan::Headers)
|
||||
@@ -213,30 +221,23 @@ if (PXR_BUILD_IMAGING)
|
||||
list(APPEND VULKAN_LIBS Vulkan::UtilityHeaders)
|
||||
|
||||
find_package(VulkanLoader CONFIG REQUIRED)
|
||||
- list(APPEND VULKAN_LIBS Vulkan::Loader)
|
||||
+ list(APPEND VULKAN_LIBS $<BUILD_LOCAL_INTERFACE:Vulkan::Loader>)
|
||||
|
||||
find_package(VulkanMemoryAllocator CONFIG REQUIRED)
|
||||
list(APPEND VULKAN_LIBS GPUOpen::VulkanMemoryAllocator)
|
||||
|
||||
find_package(ShaderC MODULE REQUIRED)
|
||||
- list(APPEND VULKAN_LIBS shaderc_combined)
|
||||
+ list(APPEND VULKAN_LIBS $<BUILD_LOCAL_INTERFACE:shaderc_combined>)
|
||||
endif()
|
||||
|
||||
# In either case we have custom logic for SPIRV-Reflect
|
||||
find_package(SpirvReflect MODULE REQUIRED)
|
||||
- if(SpirvReflect_IS_SOURCE_DEP)
|
||||
- # SPIRV-Reflect should not be installed nor exported
|
||||
- list(APPEND VULKAN_LIBS $<BUILD_LOCAL_INTERFACE:spirv-reflect>)
|
||||
- else()
|
||||
- list(APPEND VULKAN_LIBS spirv-reflect)
|
||||
- endif()
|
||||
+ list(APPEND VULKAN_LIBS $<BUILD_LOCAL_INTERFACE:spirv-reflect>)
|
||||
|
||||
# Find the OS specific libs we need
|
||||
if (UNIX AND NOT APPLE)
|
||||
find_package(X11 REQUIRED)
|
||||
- list(APPEND VULKAN_LIBS ${X11_LIBRARIES})
|
||||
- elseif (WIN32)
|
||||
- # No extra libs required
|
||||
+ list(APPEND VULKAN_LIBS $<BUILD_LOCAL_INTERFACE:X11::X11>)
|
||||
endif()
|
||||
|
||||
add_definitions(-DPXR_VULKAN_SUPPORT_ENABLED)
|
||||
diff --git a/pxr/pxrConfig.cmake.in b/pxr/pxrConfig.cmake.in
|
||||
index a7e566bac2..07bd1ad412 100644
|
||||
--- a/pxr/pxrConfig.cmake.in
|
||||
+++ b/pxr/pxrConfig.cmake.in
|
||||
@@ -90,6 +90,32 @@ if(@Imath_FOUND@)
|
||||
find_dependency(Imath)
|
||||
endif()
|
||||
|
||||
+if(@PXR_ENABLE_VULKAN_SUPPORT@)
|
||||
+ if(@PXR_USING_VULKAN_SDK@)
|
||||
+ if(NOT DEFINED Vulkan_DIR AND NOT [[@Vulkan_DIR@]] STREQUAL "")
|
||||
+ set(Vulkan_DIR [[@Vulkan_DIR@]])
|
||||
+ endif()
|
||||
+ find_dependency(Vulkan)
|
||||
+ if(Vulkan_FOUND)
|
||||
+ target_include_directories(Vulkan::Headers INTERFACE
|
||||
+ "${Vulkan_INCLUDE_DIR}/vma")
|
||||
+ endif()
|
||||
+ else()
|
||||
+ if (NOT DEFINED VulkanHeaders_DIR AND NOT [[@VulkanHeaders_DIR@]] STREQUAL "")
|
||||
+ set(VulkanHeaders_DIR [[@VulkanHeaders_DIR@]])
|
||||
+ endif()
|
||||
+ if (NOT DEFINED VulkanUtilityLibraries_DIR AND NOT [[@VulkanUtilityLibraries_DIR@]] STREQUAL "")
|
||||
+ set(VulkanUtilityLibraries_DIR [[@VulkanUtilityLibraries_DIR@]])
|
||||
+ endif()
|
||||
+ if (NOT DEFINED VulkanMemoryAllocator_DIR AND NOT [[@VulkanMemoryAllocator_DIR@]] STREQUAL "")
|
||||
+ set(VulkanMemoryAllocator_DIR [[@VulkanMemoryAllocator_DIR@]])
|
||||
+ endif()
|
||||
+ find_dependency(VulkanHeaders)
|
||||
+ find_dependency(VulkanUtilityLibraries)
|
||||
+ find_dependency(VulkanMemoryAllocator)
|
||||
+ endif()
|
||||
+endif()
|
||||
+
|
||||
include("${PXR_CMAKE_DIR}/cmake/pxrTargets.cmake")
|
||||
if (TARGET usd_ms)
|
||||
set(libs "usd_ms")
|
||||
16
build_files/build_environment/patches/usd_storm_vulkan.diff
Normal file
16
build_files/build_environment/patches/usd_storm_vulkan.diff
Normal file
@@ -0,0 +1,16 @@
|
||||
diff --git a/pxr/imaging/hdSt/renderDelegate.cpp b/pxr/imaging/hdSt/renderDelegate.cpp
|
||||
index 2e34715d2..329933383 100644
|
||||
--- a/pxr/imaging/hdSt/renderDelegate.cpp
|
||||
+++ b/pxr/imaging/hdSt/renderDelegate.cpp
|
||||
@@ -541,7 +541,10 @@ HdStRenderDelegate::CommitResources(HdChangeTracker *tracker)
|
||||
bool
|
||||
HdStRenderDelegate::IsSupported()
|
||||
{
|
||||
- return Hgi::IsSupported();
|
||||
+ // BLENDER: This doesn't take into account the backend, and fails for Vulkan
|
||||
+ // because it defaults to OpenGL. Instead assume Blender already succeeded
|
||||
+ // creating a relevant GPU device before using Storm.
|
||||
+ return true;
|
||||
}
|
||||
|
||||
TfTokenVector
|
||||
Reference in New Issue
Block a user