diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index c7a8ee5bdf8..af93de42f79 100644 --- a/build_files/build_environment/CMakeLists.txt +++ b/build_files/build_environment/CMakeLists.txt @@ -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) diff --git a/build_files/build_environment/cmake/download.cmake b/build_files/build_environment/cmake/download.cmake index b0bf25bbbd7..cab987c2ea8 100644 --- a/build_files/build_environment/cmake/download.cmake +++ b/build_files/build_environment/cmake/download.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) diff --git a/build_files/build_environment/cmake/dpcpp.cmake b/build_files/build_environment/cmake/dpcpp.cmake index 4f68ff89e10..3e30e696a5a 100644 --- a/build_files/build_environment/cmake/dpcpp.cmake +++ b/build_files/build_environment/cmake/dpcpp.cmake @@ -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 diff --git a/build_files/build_environment/cmake/dpcpp_deps.cmake b/build_files/build_environment/cmake/dpcpp_deps.cmake index b74c205da64..86738edbc5a 100644 --- a/build_files/build_environment/cmake/dpcpp_deps.cmake +++ b/build_files/build_environment/cmake/dpcpp_deps.cmake @@ -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 . diff --git a/build_files/build_environment/cmake/spirv-reflect.cmake b/build_files/build_environment/cmake/spirv-reflect.cmake new file mode 100644 index 00000000000..bac5771636c --- /dev/null +++ b/build_files/build_environment/cmake/spirv-reflect.cmake @@ -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 +) diff --git a/build_files/build_environment/cmake/usd.cmake b/build_files/build_environment/cmake/usd.cmake index 229e00945b6..96cbf535314 100644 --- a/build_files/build_environment/cmake/usd.cmake +++ b/build_files/build_environment/cmake/usd.cmake @@ -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 ) diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index 0dbb68de75c..6e3b70131df 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -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) diff --git a/build_files/build_environment/cmake/vulkan-memory-allocator.cmake b/build_files/build_environment/cmake/vulkan-memory-allocator.cmake new file mode 100644 index 00000000000..14f575d6b5c --- /dev/null +++ b/build_files/build_environment/cmake/vulkan-memory-allocator.cmake @@ -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 +) diff --git a/build_files/build_environment/cmake/vulkan.cmake b/build_files/build_environment/cmake/vulkan.cmake index 595164dddd7..f9bb84c6365 100644 --- a/build_files/build_environment/cmake/vulkan.cmake +++ b/build_files/build_environment/cmake/vulkan.cmake @@ -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`, diff --git a/build_files/build_environment/patches/spirv_reflect.diff b/build_files/build_environment/patches/spirv_reflect.diff new file mode 100644 index 00000000000..ac43086759c --- /dev/null +++ b/build_files/build_environment/patches/spirv_reflect.diff @@ -0,0 +1,29 @@ +From 9a0c9d47bbe8460bbb0861098bf4ee743bc51f45 Mon Sep 17 00:00:00 2001 +From: HolyBlackCat +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() +- diff --git a/build_files/build_environment/patches/usd_no_vulkan_sdk.diff b/build_files/build_environment/patches/usd_no_vulkan_sdk.diff new file mode 100644 index 00000000000..fa0565232f7 --- /dev/null +++ b/build_files/build_environment/patches/usd_no_vulkan_sdk.diff @@ -0,0 +1,581 @@ +From 9d89d907a0cd100ee04d4c7feb44745b789c9e4f Mon Sep 17 00:00:00 2001 +From: Aleksi Sapon +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 " ++ # 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 " 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 $) + 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: ++ # $ -> 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 ++ + + 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 ++#include ++#include + + 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 ++#include + + #include + +@@ -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 +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 +- +-#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 +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 +- +-#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 + +-#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 + + // Use the default allocator (nullptr) + inline VkAllocationCallbacks* + +From b8db3a3ed8dea771fdfa3103562f4f33976efd16 Mon Sep 17 00:00:00 2001 +From: Aleksi Sapon +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 " + # 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 " 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 $) ++ list(APPEND VULKAN_LIBS $) + 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 $) + + 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 $) + 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 $) +- else() +- list(APPEND VULKAN_LIBS spirv-reflect) +- endif() ++ list(APPEND VULKAN_LIBS $) + + # 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 $) + 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") diff --git a/build_files/build_environment/patches/usd_storm_vulkan.diff b/build_files/build_environment/patches/usd_storm_vulkan.diff new file mode 100644 index 00000000000..37dd548a66d --- /dev/null +++ b/build_files/build_environment/patches/usd_storm_vulkan.diff @@ -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