blender/build_files/build_environment/patches/usd_no_vulkan_sdk.diff
Jonas Holzman cd754c5ccc Deps: Library changes for Blender 5.3
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>
2026-10-01 18:21:55 +02:00

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")