diff --git a/build_files/build_environment/cmake/usd.cmake b/build_files/build_environment/cmake/usd.cmake index df471c9444a..b8448ec1174 100644 --- a/build_files/build_environment/cmake/usd.cmake +++ b/build_files/build_environment/cmake/usd.cmake @@ -151,7 +151,10 @@ ExternalProject_Add(external_usd ${CMAKE_COMMAND} -E remove ${BUILD_DIR}/usd/src/external_usd/pxr/imaging/hgiVulkan/vk_mem_alloc.h && ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/usd/src/external_usd < - ${PATCH_DIR}/usd_storm_vulkan.diff + ${PATCH_DIR}/usd_storm_vulkan.diff && + ${PATCH_CMD} -p 1 -d + ${BUILD_DIR}/usd/src/external_usd < + ${PATCH_DIR}/usd_vulkan_headless_3931.diff CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/usd -Wno-dev diff --git a/build_files/build_environment/patches/usd_vulkan_headless_3931.diff b/build_files/build_environment/patches/usd_vulkan_headless_3931.diff new file mode 100644 index 00000000000..a6e359179f9 --- /dev/null +++ b/build_files/build_environment/patches/usd_vulkan_headless_3931.diff @@ -0,0 +1,32 @@ +commit aedfa981065793673eaade6645490aedb043df59 +Author: Jeroen Bakker +Date: Mon Dec 22 13:39:27 2025 +0100 + + HgiVulkan: Incorrect Surface Check + + The current code only checks if the base surface extension is available, + but doesn't check if the platform specific surface extension is + available. Resulting in the `_hasPresentation` to be set in cases where it + shouldn't. + + Detected when trying to render via SSH using Vulkan. + See https://projects.blender.org/blender/blender/issues/149631 for + information. + + Revert instance changes + +diff --git a/pxr/imaging/hgiVulkan/device.cpp b/pxr/imaging/hgiVulkan/device.cpp +index 4d6c3ec05..6900849a7 100644 +--- a/pxr/imaging/hgiVulkan/device.cpp ++++ b/pxr/imaging/hgiVulkan/device.cpp +@@ -62,6 +62,10 @@ _SupportsPresentation( + physicalDevice, familyIndex); + #elif defined(VK_USE_PLATFORM_XLIB_KHR) + Display* dsp = XOpenDisplay(nullptr); ++ // Allow headless rendering ++ if (dsp == nullptr) { ++ return true; ++ } + VisualID visualID = XVisualIDFromVisual( + DefaultVisual(dsp, DefaultScreen(dsp))); + return vkGetPhysicalDeviceXlibPresentationSupportKHR(