From cfb8aa24b296f5dbb0a7e17c9491d84cb2824eae Mon Sep 17 00:00:00 2001 From: Nikita Sirgienko Date: Mon, 19 May 2025 17:39:41 +0200 Subject: [PATCH] Build: Upgrade OIDN to the release v2.3.3 This release brings several fixes that Blender no longer needs to patch manually, as well as support for various new and upcoming hardware. Pull Request: https://projects.blender.org/blender/blender/pulls/138171 --- .../cmake/openimagedenoise.cmake | 13 +----- .../build_environment/cmake/versions.cmake | 6 +-- .../build_environment/patches/oidn.diff | 31 +++++++------- .../patches/oidn_blackwell.diff | 41 ------------------- .../patches/oidn_disable_dependentload.diff | 29 ------------- 5 files changed, 20 insertions(+), 100 deletions(-) delete mode 100644 build_files/build_environment/patches/oidn_blackwell.diff delete mode 100644 build_files/build_environment/patches/oidn_disable_dependentload.diff diff --git a/build_files/build_environment/cmake/openimagedenoise.cmake b/build_files/build_environment/cmake/openimagedenoise.cmake index e3fdd557db6..6888111b53c 100644 --- a/build_files/build_environment/cmake/openimagedenoise.cmake +++ b/build_files/build_environment/cmake/openimagedenoise.cmake @@ -67,10 +67,7 @@ endif() set(ODIN_PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d ${BUILD_DIR}/openimagedenoise/src/external_openimagedenoise < - ${PATCH_DIR}/oidn.diff && - ${PATCH_CMD} --verbose -p 1 -N -d - ${BUILD_DIR}/openimagedenoise/src/external_openimagedenoise < - ${PATCH_DIR}/oidn_blackwell.diff + ${PATCH_DIR}/oidn.diff ) if(CMAKE_SYSTEM_NAME STREQUAL "Linux") @@ -82,14 +79,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux") ) endif() -if(WIN32 AND BLENDER_PLATFORM_ARM) - set(ODIN_PATCH_COMMAND ${ODIN_PATCH_COMMAND} && - ${PATCH_CMD} --verbose -p 1 -N -d - ${BUILD_DIR}/openimagedenoise/src/external_openimagedenoise < - ${PATCH_DIR}/oidn_disable_dependentload.diff - ) -endif() - ExternalProject_Add(external_openimagedenoise URL file://${PACKAGE_DIR}/${OIDN_FILE} DOWNLOAD_DIR ${DOWNLOAD_DIR} diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index c3099c5411a..06c530895d7 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -834,10 +834,10 @@ set(MATERIALX_HOMEPAGE https://github.com/AcademySoftwareFoundation/MaterialX) set(MATERIALX_LICENSE SPDX:Apache-2.0) set(MATERIALX_COPYRIGHT "Copyright Contributors to the MaterialX Project") -set(OIDN_VERSION 2.3.2) +set(OIDN_VERSION 2.3.3) set(OIDN_NAME OpenImageDenoise) -set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz) -set(OIDN_HASH ce4fa15ca6bfc4d4000653ef11049c11) +set(OIDN_URI https://github.com/RenderKit/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz) +set(OIDN_HASH f7756731235b51dfb788787e2f7c9ee0) set(OIDN_HASH_TYPE MD5) set(OIDN_FILE oidn-${OIDN_VERSION}.src.tar.gz) set(OIDN_HOMEPAGE https://www.openimagedenoise.org/) diff --git a/build_files/build_environment/patches/oidn.diff b/build_files/build_environment/patches/oidn.diff index c84fc663de1..e38cf99477e 100644 --- a/build_files/build_environment/patches/oidn.diff +++ b/build_files/build_environment/patches/oidn.diff @@ -1,17 +1,17 @@ diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt -index 38f04e2..2b58ad6 100644 +index 057526d..059cdbd 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt -@@ -95,6 +95,7 @@ set_target_properties(OpenImageDenoise_core PROPERTIES +@@ -94,6 +94,7 @@ set_target_properties(OpenImageDenoise_core PROPERTIES + OUTPUT_NAME ${OIDN_LIBRARY_NAME}_core ) - target_compile_definitions(OpenImageDenoise_core PRIVATE OIDN_LIBRARY_NAME="${OIDN_LIBRARY_NAME}") +target_compile_definitions(OpenImageDenoise_core PRIVATE SHARED_POSTFIX=\"$<$:$>\") - target_link_libraries(OpenImageDenoise_core - PUBLIC + if(OIDN_LIBRARY_VERSIONED) + set_target_properties(OpenImageDenoise_core PROPERTIES VERSION ${PROJECT_VERSION}) diff --git a/core/module.cpp b/core/module.cpp -index ba765be..19d67f8 100644 +index cafedbc..b7d7ff6 100644 --- a/core/module.cpp +++ b/core/module.cpp @@ -29,7 +29,7 @@ OIDN_NAMESPACE_BEGIN @@ -23,9 +23,9 @@ index ba765be..19d67f8 100644 #if defined(_WIN32) filename += ".dll"; #else -@@ -37,7 +37,8 @@ OIDN_NAMESPACE_BEGIN - "." + toString(OIDN_VERSION_MINOR) + - "." + toString(OIDN_VERSION_PATCH); +@@ -39,7 +39,8 @@ OIDN_NAMESPACE_BEGIN + const std::string versionStr = ""; + #endif #if defined(__APPLE__) - filename = "lib" + filename + versionStr + ".dylib"; + // BLENDER: version string is stripped on macOS. @@ -34,10 +34,10 @@ index ba765be..19d67f8 100644 filename = "lib" + filename + ".so" + versionStr; #endif diff --git a/devices/CMakeLists.txt b/devices/CMakeLists.txt -index 03937dc..8dcc236 100644 +index d43a68e..c878613 100644 --- a/devices/CMakeLists.txt +++ b/devices/CMakeLists.txt -@@ -66,6 +66,7 @@ if(OIDN_DEVICE_CUDA) +@@ -67,6 +67,7 @@ if(OIDN_DEVICE_CUDA) -DOIDN_WARN_AS_ERRORS:BOOL=${OIDN_WARN_AS_ERRORS} -DOIDN_SANITIZER:STRING=${OIDN_SANITIZER} -DOIDN_DEVICE_CUDA_API:STRING=${OIDN_DEVICE_CUDA_API} @@ -45,7 +45,7 @@ index 03937dc..8dcc236 100644 BUILD_ALWAYS TRUE DEPENDS OpenImageDenoise_core -@@ -157,6 +158,8 @@ if(OIDN_DEVICE_HIP) +@@ -158,6 +159,8 @@ if(OIDN_DEVICE_HIP) -DOIDN_API_NAMESPACE:STRING=${OIDN_API_NAMESPACE} -DOIDN_WARN_AS_ERRORS:BOOL=${OIDN_WARN_AS_ERRORS} -DOIDN_SANITIZER:STRING=${OIDN_SANITIZER} @@ -55,10 +55,10 @@ index 03937dc..8dcc236 100644 DEPENDS OpenImageDenoise_core diff --git a/devices/hip/hip_device.cpp b/devices/hip/hip_device.cpp -index 5842895..8272124 100644 +index 35c6291..5cc2d84 100644 --- a/devices/hip/hip_device.cpp +++ b/devices/hip/hip_device.cpp -@@ -93,10 +93,16 @@ OIDN_NAMESPACE_BEGIN +@@ -97,11 +97,17 @@ OIDN_NAMESPACE_BEGIN { const std::string name = getArchName(prop); @@ -68,7 +68,8 @@ index 5842895..8272124 100644 return HIPArch::DL; + // BLENDER: this comment is meant to generate a merge conflict if the code + // here changes, so we know that hipSupportsDeviceOIDN should be updated. - if (name == "gfx1100" || name == "gfx1101" || name == "gfx1102") + if (name == "gfx1100" || name == "gfx1101" || name == "gfx1102" || + name == "gfx1200" || name == "gfx1201") return HIPArch::WMMA; + // BLENDER: this comment is meant to generate a merge conflict if the code + // here changes, so we know that hipSupportsDeviceOIDN should be updated. diff --git a/build_files/build_environment/patches/oidn_blackwell.diff b/build_files/build_environment/patches/oidn_blackwell.diff deleted file mode 100644 index dd7ac71dc60..00000000000 --- a/build_files/build_environment/patches/oidn_blackwell.diff +++ /dev/null @@ -1,41 +0,0 @@ -diff -Naur orig/devices/cuda/CMakeLists.txt external_openimagedenoise/devices/cuda/CMakeLists.txt ---- orig/devices/cuda/CMakeLists.txt -+++ external_openimagedenoise/devices/cuda/CMakeLists.txt -@@ -51,13 +52,15 @@ - set(OIDN_NVCC_SM75_FLAGS "-gencode arch=compute_75,code=sm_75") - set(OIDN_NVCC_SM80_FLAGS "-gencode arch=compute_80,code=sm_80") - set(OIDN_NVCC_SM90_FLAGS "-gencode arch=compute_90,code=sm_90") -+set(OIDN_NVCC_SM100_FLAGS "-gencode arch=compute_100,code=sm_100") -+set(OIDN_NVCC_SM120_FLAGS "-gencode arch=compute_120,code=sm_120") - - set_source_files_properties( - cuda_conv.cu - cuda_device.cu - cuda_engine.cu - PROPERTIES COMPILE_FLAGS -- "${OIDN_NVCC_SM70_FLAGS} ${OIDN_NVCC_SM75_FLAGS} ${OIDN_NVCC_SM80_FLAGS} ${OIDN_NVCC_SM90_FLAGS}" -+ "${OIDN_NVCC_SM70_FLAGS} ${OIDN_NVCC_SM75_FLAGS} ${OIDN_NVCC_SM80_FLAGS} ${OIDN_NVCC_SM90_FLAGS} ${OIDN_NVCC_SM100_FLAGS} ${OIDN_NVCC_SM120_FLAGS}" - ) - - set_source_files_properties( -@@ -72,7 +75,7 @@ - - set_source_files_properties( - cutlass_conv_sm80.cu -- PROPERTIES COMPILE_FLAGS "${OIDN_NVCC_SM80_FLAGS} ${OIDN_NVCC_SM90_FLAGS}" -+ PROPERTIES COMPILE_FLAGS "${OIDN_NVCC_SM80_FLAGS} ${OIDN_NVCC_SM90_FLAGS} ${OIDN_NVCC_SM100_FLAGS} ${OIDN_NVCC_SM120_FLAGS}" - ) - - add_library(OpenImageDenoise_device_cuda SHARED ${OIDN_CUDA_SOURCES} ${OIDN_GPU_SOURCES} ${OIDN_RESOURCE_FILE}) -diff -Naur orig/devices/cuda/cuda_device.h external_openimagedenoise/devices/cuda/cuda_device.h ---- orig/devices/cuda/cuda_device.h -+++ external_openimagedenoise/devices/cuda/cuda_device.h -@@ -50,7 +50,7 @@ - - // Supported compute capabilities - static constexpr int minSMArch = 70; -- static constexpr int maxSMArch = 99; -+ static constexpr int maxSMArch = 120; - - int deviceID = 0; - #if defined(OIDN_DEVICE_CUDA_API_DRIVER) diff --git a/build_files/build_environment/patches/oidn_disable_dependentload.diff b/build_files/build_environment/patches/oidn_disable_dependentload.diff deleted file mode 100644 index 94df47856fa..00000000000 --- a/build_files/build_environment/patches/oidn_disable_dependentload.diff +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/cmake/oidn_platform.cmake b/cmake/oidn_platform.cmake -index d5cc45e..24fcd5b 100644 ---- a/cmake/oidn_platform.cmake -+++ b/cmake/oidn_platform.cmake -@@ -232,15 +232,15 @@ if(MSVC) - # Enable control flow guard - append(OIDN_C_CXX_FLAGS "/guard:cf") - -- if(WIN32) -- if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") -- append(CMAKE_EXE_LINKER_FLAGS "/DEPENDENTLOADFLAG:0x2000") -- append(CMAKE_SHARED_LINKER_FLAGS "/DEPENDENTLOADFLAG:0x2000") -- elseif(CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") -- append(CMAKE_EXE_LINKER_FLAGS "/Qoption,link,/DEPENDENTLOADFLAG:0x2000") -- append(CMAKE_SHARED_LINKER_FLAGS "/Qoption,link,/DEPENDENTLOADFLAG:0x2000") -- endif() -- endif() -+ #if(WIN32) -+ # if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") -+ # append(CMAKE_EXE_LINKER_FLAGS "/DEPENDENTLOADFLAG:0x2000") -+ # append(CMAKE_SHARED_LINKER_FLAGS "/DEPENDENTLOADFLAG:0x2000") -+ # elseif(CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") -+ # append(CMAKE_EXE_LINKER_FLAGS "/Qoption,link,/DEPENDENTLOADFLAG:0x2000") -+ # append(CMAKE_SHARED_LINKER_FLAGS "/Qoption,link,/DEPENDENTLOADFLAG:0x2000") -+ # endif() -+ #endif() - else() - append(OIDN_C_CXX_FLAGS_RELEASE "-fstack-protector") -