mirror of
https://github.com/blender/blender
synced 2026-10-25 03:07:01 +03:00
New libraries: * KTX * OpenTimelineIO * Jolt * hwloc * RapidJSON Updated libraries: * LLVM * OSL * OpenImageIO * OpenUSD * DPC++ * minizip-ng * flac Build changes for existing libraries: * OpenEXR (build Python bindings) * FFmpeg (add additional hardware acceleration backends) * Enable CUDA/OptiX support for Windows ARM64 (LLVM, OSL, OIDN) Removed libraries: * fastjsonschema For a full list of upgraded dependencies, specific versions and additional notes, see the main library change tracking issue below. Pull Request: https://projects.blender.org/blender/blender/pulls/162972 Ref: #158444 Co-authored-by: Thomas Dinges <thomas@blender.org> Co-authored-by: Anthony Roberts <anthony.roberts@linaro.org> Co-authored-by: Ray Molenkamp <github@lazydodo.com> Co-authored-by: Brecht Van Lommel <brecht@blender.org> Co-authored-by: Campbell Barton <campbell@blender.org> Co-authored-by: Sebastian Parborg <sebastian@blender.org> Co-authored-by: Patrick Mours <pmours@nvidia.com> Co-authored-by: Nikita Sirgienko <nikita.sirgienko@intel.com> Co-authored-by: John Kiril Swenson <john@blender.org>
544 lines
23 KiB
Diff
544 lines
23 KiB
Diff
From e4d9aec762ae16eef82ff65fbb7b128cf901d85a 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] build_usd.py now installs Vulkan dependencies
|
|
|
|
---
|
|
build_scripts/build_usd.py | 122 ++++++++++++++++++++-
|
|
cmake/defaults/Packages.cmake | 60 +++++++---
|
|
cmake/modules/FindShaderC.cmake | 41 +++++++
|
|
pxr/imaging/hdSt/codeGen.cpp | 5 +-
|
|
pxr/imaging/hgiVulkan/CMakeLists.txt | 1 -
|
|
pxr/imaging/hgiVulkan/device.cpp | 19 +++-
|
|
pxr/imaging/hgiVulkan/diagnostic.cpp | 2 +-
|
|
pxr/imaging/hgiVulkan/resourceBindings.cpp | 6 +-
|
|
pxr/imaging/hgiVulkan/sampler.cpp | 5 +-
|
|
pxr/imaging/hgiVulkan/vk_mem_alloc.cpp | 10 --
|
|
pxr/imaging/hgiVulkan/vk_mem_alloc.h | 15 ---
|
|
pxr/imaging/hgiVulkan/vulkan.h | 6 +-
|
|
pxr/pxrConfig.cmake.in | 26 +++++
|
|
13 files changed, 257 insertions(+), 61 deletions(-)
|
|
create mode 100644 cmake/modules/FindShaderC.cmake
|
|
delete mode 100644 pxr/imaging/hgiVulkan/vk_mem_alloc.cpp
|
|
delete mode 100644 pxr/imaging/hgiVulkan/vk_mem_alloc.h
|
|
|
|
diff --git a/build_scripts/build_usd.py b/build_scripts/build_usd.py
|
|
index 01f796295..04780fda2 100644
|
|
--- a/build_scripts/build_usd.py
|
|
+++ b/build_scripts/build_usd.py
|
|
@@ -1771,6 +1771,87 @@ def InstallEmbree(context, force, buildArgs):
|
|
EMBREE = Dependency("Embree", InstallEmbree,
|
|
"include/embree4/rtcore.h")
|
|
|
|
+############################################################
|
|
+# Vulkan SDK components
|
|
+VULKAN_SDK_VERSION = "1.3.296.0"
|
|
+
|
|
+VULKAN_HEADERS_URL = f"https://github.com/KhronosGroup/Vulkan-Headers/archive/refs/tags/vulkan-sdk-{VULKAN_SDK_VERSION}.zip"
|
|
+def InstallVulkanHeaders(context, force, buildArgs):
|
|
+ with CurrentWorkingDirectory(DownloadURL(VULKAN_HEADERS_URL, context, force, destFileName=f'Vulkan-Headers-{VULKAN_SDK_VERSION}.zip')):
|
|
+ extraArgs = buildArgs + [
|
|
+ '-DVULKAN_HEADERS_ENABLE_INSTALL=ON',
|
|
+ '-DVULKAN_HEADERS_ENABLE_MODULE=OFF',
|
|
+ '-DVULKAN_HEADERS_ENABLE_TESTS=OFF',
|
|
+ ]
|
|
+ RunCMake(context, force, extraArgs)
|
|
+
|
|
+VULKAN_HEADERS = Dependency("Vulkan-Headers", InstallVulkanHeaders, "include/vulkan/vulkan.h")
|
|
+
|
|
+VULKAN_UTILITY_LIBRARIES_URL = f"https://github.com/KhronosGroup/Vulkan-Utility-Libraries/archive/refs/tags/vulkan-sdk-{VULKAN_SDK_VERSION}.zip"
|
|
+def InstallVulkanUtilityLibraries(context, force, buildArgs):
|
|
+ with CurrentWorkingDirectory(DownloadURL(VULKAN_UTILITY_LIBRARIES_URL, context, force, destFileName=f'Vulkan-Utility-Libraries-{VULKAN_SDK_VERSION}.zip')):
|
|
+ extraArgs = buildArgs + [
|
|
+ '-DBUILD_TESTS=OFF',
|
|
+ ]
|
|
+ RunCMake(context, force, extraArgs)
|
|
+
|
|
+VULKAN_UTILITY_LIBRARIES = Dependency("Vulkan-Utility-Libraries", InstallVulkanUtilityLibraries, "include/vulkan/vk_enum_string_helper.h")
|
|
+
|
|
+VULKAN_LOADER_URL = f"https://github.com/KhronosGroup/Vulkan-Loader/archive/refs/tags/vulkan-sdk-{VULKAN_SDK_VERSION}.zip"
|
|
+def InstallLoaderVulkan(context, force, buildArgs):
|
|
+ with CurrentWorkingDirectory(DownloadURL(VULKAN_LOADER_URL, context, force, destFileName=f'Vulkan-Loader-{VULKAN_SDK_VERSION}.zip')):
|
|
+ extraArgs = buildArgs + [
|
|
+ f'-DVULKAN_HEADERS_INSTALL_DIR={context.instDir}',
|
|
+ '-DBUILD_TESTS=OFF',
|
|
+ '-UPDATE_DEPS=ON',
|
|
+ ]
|
|
+ RunCMake(context, force, extraArgs)
|
|
+
|
|
+VULKAN_LOADER = Dependency("Vulkan-Loader", InstallLoaderVulkan, "lib/cmake/VulkanLoader/VulkanLoaderConfig.cmake")
|
|
+
|
|
+# The VulkanMemoryAllocator version should match the one used by VULKAN_SDK_VERSION
|
|
+VULKAN_MEMORY_ALLOCATOR_VERSION = "3.2.1"
|
|
+VULKAN_MEMORY_ALLOCATOR_URL = f"https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/archive/refs/tags/v{VULKAN_MEMORY_ALLOCATOR_VERSION}.zip"
|
|
+def InstallVulkanMemoryAllocator(context, force, buildArgs):
|
|
+ with CurrentWorkingDirectory(DownloadURL(VULKAN_MEMORY_ALLOCATOR_URL, context, force, destFileName=f'VulkanMemoryAllocator-{VULKAN_MEMORY_ALLOCATOR_VERSION}.zip')):
|
|
+ extraArgs = buildArgs + [
|
|
+ '-DVMA_ENABLE_INSTALL=ON',
|
|
+ '-DVMA_BUILD_SAMPLES=OFF',
|
|
+ '-DVMA_BUILD_DOCUMENTATION=OFF',
|
|
+ ]
|
|
+ RunCMake(context, force, extraArgs)
|
|
+
|
|
+VULKAN_MEMORY_ALLOCATOR = Dependency("VulkanMemoryAllocator", InstallVulkanMemoryAllocator, "include/vk_mem_alloc.h")
|
|
+
|
|
+# The shaderc version should match the one used by VULKAN_SDK_VERSION
|
|
+SHADERC_VERSION = "2024.3"
|
|
+SHADERC_URL = f"https://github.com/google/shaderc/archive/refs/tags/v{SHADERC_VERSION}.zip"
|
|
+def InstallShaderC(context, force, buildArgs):
|
|
+ with CurrentWorkingDirectory(DownloadURL(SHADERC_URL, context, force, destFileName=f'shaderc-{SHADERC_VERSION}.zip')):
|
|
+ Run(f'"{sys.executable}" utils/git-sync-deps')
|
|
+ PatchFile("third_party/CMakeLists.txt", [
|
|
+ ('set( SKIP_GLSLANG_INSTALL ${SHADERC_SKIP_INSTALL} )\n',
|
|
+ 'set( SKIP_GLSLANG_INSTALL ON )\n'),
|
|
+ ('set( SKIP_SPIRV_TOOLS_INSTALL ${SHADERC_SKIP_INSTALL} )\n',
|
|
+ 'set( SKIP_SPIRV_TOOLS_INSTALL ON )\n'),
|
|
+ ('set( SKIP_GOOGLETEST_INSTALL ${SHADERC_SKIP_INSTALL} )\n',
|
|
+ 'set( SKIP_GOOGLETEST_INSTALL ON} )\n'),
|
|
+ (' set(GLSLANG_ENABLE_INSTALL $<NOT:${SKIP_GLSLANG_INSTALL}>)\n',
|
|
+ ' set(GLSLANG_ENABLE_INSTALL OFF)\n'),
|
|
+ ])
|
|
+ extraArgs = buildArgs + [
|
|
+ '-DSHADERC_SKIP_INSTALL=OFF',
|
|
+ '-DSHADERC_SKIP_TESTS=ON',
|
|
+ '-DSHADERC_SKIP_EXAMPLES=ON',
|
|
+ '-DSHADERC_SKIP_COPYRIGHT_CHECK=ON',
|
|
+ '-DSHADERC_ENABLE_SHARED_CRT=ON',
|
|
+ '-DSHADERC_ENABLE_WGSL_OUTPUT=OFF',
|
|
+ ]
|
|
+ RunCMake(context, force, extraArgs)
|
|
+
|
|
+SHADERC = Dependency("shaderc", InstallShaderC, "include/shaderc/shaderc.h")
|
|
+
|
|
+
|
|
############################################################
|
|
# USD
|
|
|
|
@@ -2325,6 +2406,14 @@ subgroup.add_argument("--vulkan", dest="enable_vulkan", action="store_true",
|
|
default=False, help="Enable Vulkan support")
|
|
subgroup.add_argument("--no-vulkan", dest="enable_vulkan", action="store_false",
|
|
help="Disable Vulkan support (default)")
|
|
+group.add_argument("--use-vulkan-sdk", dest="use_vulkan_sdk", type=str,
|
|
+ nargs='?', default=None, const='',
|
|
+ help="Use the Vulkan SDK to build HgiVulkan, "
|
|
+ "otherwise the necessary components will be "
|
|
+ "installed automactically be the script. "
|
|
+ "The argument optionally takes a path to the "
|
|
+ "SDK root, otherwise the VULKAN_SDK environment "
|
|
+ "variable is required to be set.")
|
|
|
|
group = parser.add_argument_group(title="Imaging Plugin Options")
|
|
subgroup = group.add_mutually_exclusive_group()
|
|
@@ -2546,6 +2635,7 @@ class InstallContext:
|
|
self.enableVulkan = (self.buildImaging
|
|
and args.enable_vulkan
|
|
and not embedded)
|
|
+ self.useVuklanSDK = args.use_vulkan_sdk
|
|
|
|
# - USD Imaging
|
|
self.buildUsdImaging = (args.build_imaging == USD_IMAGING and
|
|
@@ -2659,6 +2749,24 @@ if context.buildImaging:
|
|
if context.buildUsdview:
|
|
requiredDependencies += [PYOPENGL, PYSIDE]
|
|
|
|
+if context.enableVulkan:
|
|
+ if context.useVuklanSDK is None:
|
|
+ # We don't want to use the Vulkan SDK, we build our own components.
|
|
+ os.environ.pop('VULKAN_SDK', None)
|
|
+ requiredDependencies += [VULKAN_HEADERS, VULKAN_UTILITY_LIBRARIES,
|
|
+ VULKAN_LOADER, VULKAN_MEMORY_ALLOCATOR,
|
|
+ SHADERC]
|
|
+ elif context.useVuklanSDK == '':
|
|
+ # We use the Vulkan SDK from the environment
|
|
+ if not 'VULKAN_SDK' in os.environ:
|
|
+ PrintError("Vulkan support cannot be enabled when VULKAN_SDK "
|
|
+ "environment variable is not set")
|
|
+ sys.exit(1)
|
|
+ context.useVuklanSDK = os.environ['VULKAN_SDK']
|
|
+ else:
|
|
+ # We use the Vulkan SDK from the command line
|
|
+ os.environ['VULKAN_SDK'] = context.useVuklanSDK
|
|
+
|
|
# Wasm, Linux and MacOS provide zlib. Skipping it here avoids issues where a host
|
|
# application loads a different version of zlib than the one we build against.
|
|
# Building zlib is the default when a dependency requires it, although OpenUSD
|
|
@@ -2682,12 +2790,6 @@ if Windows() and GetWindowsHostArch() == "ARM64" and not context.buildOneTBB:
|
|
PrintError("Windows ARM64 builds require oneTBB. Enable via the --onetbb argument")
|
|
sys.exit(1)
|
|
|
|
-# Error out if user enables Vulkan support but env var VULKAN_SDK is not set.
|
|
-if context.enableVulkan and not 'VULKAN_SDK' in os.environ:
|
|
- PrintError("Vulkan support cannot be enabled when VULKAN_SDK environment "
|
|
- "variable is not set")
|
|
- sys.exit(1)
|
|
-
|
|
if context.targetWasm:
|
|
if "--no-onetbb" in sys.argv:
|
|
PrintError("Wasm target requires oneTBB")
|
|
@@ -2898,6 +3000,14 @@ summaryMsg += """\
|
|
Embree support: {buildEmbree}
|
|
PRMan support: {buildPrman}
|
|
Vulkan support: {enableVulkan}
|
|
+"""
|
|
+
|
|
+if context.enableVulkan and context.useVuklanSDK:
|
|
+ summaryMsg += """\
|
|
+ Vulkan SDK: {useVuklanSDK}
|
|
+"""
|
|
+
|
|
+summaryMsg += """\
|
|
UsdImaging {buildUsdImaging}
|
|
usdview: {buildUsdview}
|
|
MaterialX support {buildMaterialX}
|
|
@@ -2987,6 +3097,7 @@ summaryMsg = summaryMsg.format(
|
|
buildExamples=("On" if context.buildExamples else "Off"),
|
|
buildTutorials=("On" if context.buildTutorials else "Off"),
|
|
enableVulkan=("On" if context.enableVulkan else "Off"),
|
|
+ useVuklanSDK = context.useVuklanSDK,
|
|
buildTools=("On" if context.buildTools else "Off"),
|
|
buildUsdValidation=("On" if context.buildUsdValidation else "Off"),
|
|
buildAlembic=("On" if context.buildAlembic else "Off"),
|
|
diff --git a/cmake/defaults/Packages.cmake b/cmake/defaults/Packages.cmake
|
|
index 7860569c5..feb026881 100644
|
|
--- a/cmake/defaults/Packages.cmake
|
|
+++ b/cmake/defaults/Packages.cmake
|
|
@@ -221,22 +221,56 @@ if (PXR_BUILD_IMAGING)
|
|
endif()
|
|
if (PXR_ENABLE_VULKAN_SUPPORT)
|
|
message(STATUS "Enabling experimental feature Vulkan support")
|
|
- if (EXISTS $ENV{VULKAN_SDK})
|
|
- find_package(Vulkan REQUIRED COMPONENTS shaderc_combined)
|
|
- list(APPEND VULKAN_LIBS Vulkan::Vulkan Vulkan::shaderc_combined)
|
|
-
|
|
- # 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)
|
|
+ # 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::Headers INTERFACE
|
|
+ "${Vulkan_INCLUDE_DIR}/vma")
|
|
+
|
|
+ list(APPEND VULKAN_LIBS $<BUILD_LOCAL_INTERFACE:Vulkan::Vulkan>)
|
|
+ list(APPEND VULKAN_LIBS $<BUILD_LOCAL_INTERFACE:Vulkan::shaderc_combined>)
|
|
else()
|
|
- message(FATAL_ERROR "VULKAN_SDK not valid")
|
|
+ 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)
|
|
+
|
|
+ find_package(VulkanUtilityLibraries CONFIG REQUIRED)
|
|
+ list(APPEND VULKAN_LIBS Vulkan::UtilityHeaders)
|
|
+
|
|
+ find_package(VulkanLoader CONFIG REQUIRED)
|
|
+ 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 $<BUILD_LOCAL_INTERFACE:shaderc_combined>)
|
|
+ endif()
|
|
+
|
|
+ # Find the OS specific libs we need
|
|
+ if (UNIX AND NOT APPLE)
|
|
+ find_package(X11 REQUIRED)
|
|
+ list(APPEND VULKAN_LIBS $<BUILD_LOCAL_INTERFACE:X11::X11>)
|
|
endif()
|
|
+
|
|
+ add_definitions(-DPXR_VULKAN_SUPPORT_ENABLED)
|
|
endif()
|
|
# --Opensubdiv
|
|
find_package(OpenSubdiv 3.6...<4 REQUIRED CONFIG)
|
|
diff --git a/cmake/modules/FindShaderC.cmake b/cmake/modules/FindShaderC.cmake
|
|
new file mode 100644
|
|
index 000000000..4dffb19bc
|
|
--- /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/pxr/imaging/hdSt/codeGen.cpp b/pxr/imaging/hdSt/codeGen.cpp
|
|
index 4e8d79090..53c61cbcc 100644
|
|
--- a/pxr/imaging/hdSt/codeGen.cpp
|
|
+++ b/pxr/imaging/hdSt/codeGen.cpp
|
|
@@ -5539,8 +5539,8 @@ HdSt_CodeGen::_GenerateElementPrimvar()
|
|
// Don't need to codegen element primvars for frustum culling as they're
|
|
// unneeded. Including them can cause errors in Hgi backends like Vulkan,
|
|
// which needs the resource layout made in HgiVulkanResourceBindings to
|
|
- // match the one generated by SPIRV-Reflect in HgiVulkanGraphicsPipeline
|
|
- // when creating the VkPipelineLayout.
|
|
+ // match the one generated in HgiVulkanGraphicsPipeline when creating the
|
|
+ // VkPipelineLayout.
|
|
if (_geometricShader->IsFrustumCullingPass()) {
|
|
return;
|
|
}
|
|
@@ -7196,4 +7196,3 @@ HdSt_CodeGen::_GetFallbackScalarSwizzleString(TfToken const &returnType,
|
|
}
|
|
|
|
PXR_NAMESPACE_CLOSE_SCOPE
|
|
-
|
|
diff --git a/pxr/imaging/hgiVulkan/CMakeLists.txt b/pxr/imaging/hgiVulkan/CMakeLists.txt
|
|
index fc4353683..0524c5904 100644
|
|
--- a/pxr/imaging/hgiVulkan/CMakeLists.txt
|
|
+++ b/pxr/imaging/hgiVulkan/CMakeLists.txt
|
|
@@ -41,7 +41,6 @@ pxr_library(hgiVulkan
|
|
shaderProgram
|
|
shaderSection
|
|
texture
|
|
- vk_mem_alloc
|
|
|
|
PUBLIC_HEADERS
|
|
api.h
|
|
diff --git a/pxr/imaging/hgiVulkan/device.cpp b/pxr/imaging/hgiVulkan/device.cpp
|
|
index 4ca4e6a99..fd4220493 100644
|
|
--- a/pxr/imaging/hgiVulkan/device.cpp
|
|
+++ b/pxr/imaging/hgiVulkan/device.cpp
|
|
@@ -11,12 +11,15 @@
|
|
#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"
|
|
|
|
#include <fstream>
|
|
|
|
+#define VMA_IMPLEMENTATION
|
|
+#include <vk_mem_alloc.h>
|
|
+
|
|
+
|
|
PXR_NAMESPACE_OPEN_SCOPE
|
|
|
|
TF_DEFINE_ENV_SETTING(HGIVULKAN_PREFERRED_DEVICE_TYPE,
|
|
@@ -180,11 +183,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);
|
|
}
|
|
@@ -437,9 +438,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 d4dd36753..8b5e555fc 100644
|
|
--- a/pxr/imaging/hgiVulkan/diagnostic.cpp
|
|
+++ b/pxr/imaging/hgiVulkan/diagnostic.cpp
|
|
@@ -334,4 +334,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/resourceBindings.cpp b/pxr/imaging/hgiVulkan/resourceBindings.cpp
|
|
index 3ecbc1a40..eba36c8e0 100644
|
|
--- a/pxr/imaging/hgiVulkan/resourceBindings.cpp
|
|
+++ b/pxr/imaging/hgiVulkan/resourceBindings.cpp
|
|
@@ -97,8 +97,8 @@ HgiVulkanResourceBindings::HgiVulkanResourceBindings(
|
|
uint32_t textureBindIndexStart = 0;
|
|
|
|
// XXX We need to overspecify the stage usage here so we can match the
|
|
- // VkDescriptorSetLayout that is created with spirv-reflect for the
|
|
- // graphics and compute pipelines.
|
|
+ // VkDescriptorSetLayout that is created for the graphics and compute
|
|
+ // pipelines.
|
|
VkShaderStageFlags const bufferShaderStageFlags =
|
|
HgiVulkanConversions::GetShaderStages(
|
|
HgiShaderStageVertex | HgiShaderStageTessellationControl |
|
|
@@ -400,4 +400,4 @@ HgiVulkanResourceBindings::GetInflightBits()
|
|
return _inflightBits;
|
|
}
|
|
|
|
-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 707cb98e6..947a7e9b4 100644
|
|
--- a/pxr/imaging/hgiVulkan/sampler.cpp
|
|
+++ b/pxr/imaging/hgiVulkan/sampler.cpp
|
|
@@ -13,7 +13,7 @@
|
|
#include "pxr/imaging/hgiVulkan/diagnostic.h"
|
|
|
|
#include <algorithm>
|
|
-#include <float.h>
|
|
+#include <cfloat>
|
|
|
|
PXR_NAMESPACE_OPEN_SCOPE
|
|
|
|
diff --git a/pxr/imaging/hgiVulkan/vk_mem_alloc.cpp b/pxr/imaging/hgiVulkan/vk_mem_alloc.cpp
|
|
deleted file mode 100644
|
|
index 8f47ddc85..000000000
|
|
--- 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 48f5fceff..000000000
|
|
--- 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 2e8f59064..70b539211 100644
|
|
--- a/pxr/imaging/hgiVulkan/vulkan.h
|
|
+++ b/pxr/imaging/hgiVulkan/vulkan.h
|
|
@@ -35,7 +35,11 @@
|
|
#define VK_EXTERNAL_MEMORY_HANDLE_AUTO 0
|
|
#endif
|
|
|
|
-#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*
|
|
diff --git a/pxr/pxrConfig.cmake.in b/pxr/pxrConfig.cmake.in
|
|
index bc94973b9..5374b5447 100644
|
|
--- a/pxr/pxrConfig.cmake.in
|
|
+++ b/pxr/pxrConfig.cmake.in
|
|
@@ -112,6 +112,32 @@ if(NOT "@PXR_WORK_IMPL_PACKAGE@" STREQUAL "")
|
|
find_dependency(@PXR_WORK_IMPL_PACKAGE@)
|
|
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 MODULE)
|
|
+ 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 CONFIG)
|
|
+ find_dependency(VulkanUtilityLibraries CONFIG)
|
|
+ find_dependency(VulkanMemoryAllocator CONFIG)
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
include("${PXR_CMAKE_DIR}/cmake/pxrTargets.cmake")
|
|
if (TARGET usd_m)
|
|
set(libs "usd_m")
|
|
|