From 38a200f1e327c516f785ba5db598a4638fd73cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Sat, 6 Jun 2020 20:44:16 +0200 Subject: oidn: Fix build for VS 2017 Backporting this upstream patch: https://github.com/OpenImageDenoise/mkl-dnn/commit/1e42e6db81e1a5270ecc0191c5385ce7e7d978e9 Fixes #39186. --- COPYRIGHT.txt | 2 +- thirdparty/README.md | 6 +- thirdparty/oidn/godot-changes-c58c5216.patch | 307 --------------------- .../oidn/mkl-dnn/src/cpu/rnn/rnn_reorders.hpp | 2 +- thirdparty/oidn/mkl-dnn/src/cpu/simple_concat.hpp | 6 +- .../oidn/patches/godot-changes-c58c5216.patch | 307 +++++++++++++++++++++ .../oidn/patches/mkl-dnn-fix-vs2017-build.patch | 45 +++ 7 files changed, 360 insertions(+), 315 deletions(-) delete mode 100644 thirdparty/oidn/godot-changes-c58c5216.patch create mode 100644 thirdparty/oidn/patches/godot-changes-c58c5216.patch create mode 100644 thirdparty/oidn/patches/mkl-dnn-fix-vs2017-build.patch diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index 2d32bf1fd9..fc3079c361 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -299,7 +299,7 @@ License: Zlib Files: ./thirdparty/oidn/ Comment: Intel Open Image Denoise -Copyright: 2009-2020, Intel Corporation +Copyright: 2009-2019, Intel Corporation License: Apache-2.0 Files: ./thirdparty/opus/ diff --git a/thirdparty/README.md b/thirdparty/README.md index 9dff2eb37c..c69ca17fd0 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -446,7 +446,7 @@ Files extracted from the upstream source: ## oidn - Upstream: https://github.com/OpenImageDenoise/oidn -- Version: 1.1.0 (c58c5216db05ceef4cde5a096862f2eeffd14c06) +- Version: 1.1.0 (c58c5216db05ceef4cde5a096862f2eeffd14c06, 2019) - License: Apache 2.0 Files extracted from upstream source: @@ -461,8 +461,8 @@ weights/rtlightmap_hdr.tza scripts/resource_to_cpp.py Modified files: -Modifications are marked with `// -- GODOT start --` and `// -- GODOT end --` -A patch file is provided in `oidn/godot-changes-c58c5216.patch` +Modifications are marked with `// -- GODOT start --` and `// -- GODOT end --`. +Patch files are provided in `oidn/patches/`. core/autoencoder.cpp core/autoencoder.h diff --git a/thirdparty/oidn/godot-changes-c58c5216.patch b/thirdparty/oidn/godot-changes-c58c5216.patch deleted file mode 100644 index 6a54703064..0000000000 --- a/thirdparty/oidn/godot-changes-c58c5216.patch +++ /dev/null @@ -1,307 +0,0 @@ -diff --git a/common/platform.h b/common/platform.h -index be14bc7..9373b61 100644 ---- a/common/platform.h -+++ b/common/platform.h -@@ -19,7 +19,7 @@ - #if defined(_WIN32) - #define WIN32_LEAN_AND_MEAN - #define NOMINMAX -- #include -+ #include - #elif defined(__APPLE__) - #include - #endif -@@ -129,4 +129,3 @@ namespace oidn { - std::string getBuildName(); - - } // namespace oidn -- -diff --git a/core/autoencoder.cpp b/core/autoencoder.cpp -index d6915e6..d8da684 100644 ---- a/core/autoencoder.cpp -+++ b/core/autoencoder.cpp -@@ -90,13 +90,19 @@ namespace oidn { - if (!dirty) - return; - -- device->executeTask([&]() -- { -+ // -- GODOT start -- -+ //device->executeTask([&]() -+ //{ -+ // GODOT end -- -+ - if (mayiuse(avx512_common)) - net = buildNet<16>(); - else - net = buildNet<8>(); -- }); -+ -+ // GODOT start -- -+ //}); -+ // GODOT end -- - - dirty = false; - } -@@ -108,9 +114,10 @@ namespace oidn { - - if (!net) - return; -- -- device->executeTask([&]() -- { -+ // -- GODOT start -- -+ //device->executeTask([&]() -+ //{ -+ // -- GODOT end -- - Progress progress; - progress.func = progressFunc; - progress.userPtr = progressUserPtr; -@@ -156,7 +163,9 @@ namespace oidn { - tileIndex++; - } - } -- }); -+ // -- GODOT start -- -+ //}); -+ // -- GODOT end -- - } - - void AutoencoderFilter::computeTileSize() -@@ -464,6 +473,11 @@ namespace oidn { - return std::make_shared(); - } - -+// -- GODOT start -- -+// Godot doesn't need Raytracing filters. Removing them saves space in the weights files. -+#if 0 -+// -- GODOT end -- -+ - // -------------------------------------------------------------------------- - // RTFilter - // -------------------------------------------------------------------------- -@@ -491,6 +505,9 @@ namespace oidn { - weightData.hdr_alb = weights::rt_hdr_alb; - weightData.hdr_alb_nrm = weights::rt_hdr_alb_nrm; - } -+// -- GODOT start -- -+#endif -+// -- GODOT end -- - - // -------------------------------------------------------------------------- - // RTLightmapFilter -diff --git a/core/autoencoder.h b/core/autoencoder.h -index c199052..98b6108 100644 ---- a/core/autoencoder.h -+++ b/core/autoencoder.h -@@ -93,11 +93,18 @@ namespace oidn { - // RTFilter - Generic ray tracing denoiser - // -------------------------------------------------------------------------- - -+// -- GODOT start -- -+// Godot doesn't need Raytracing filters. Removing them saves space in the weights files. -+#if 0 -+// -- GODOT end -- - class RTFilter : public AutoencoderFilter - { - public: - explicit RTFilter(const Ref& device); - }; -+// -- GODOT start -- -+#endif -+// -- GODOT end -- - - // -------------------------------------------------------------------------- - // RTLightmapFilter - Ray traced lightmap denoiser -diff --git a/core/common.h b/core/common.h -index a3a7e8a..a35dd90 100644 ---- a/core/common.h -+++ b/core/common.h -@@ -27,7 +27,9 @@ - #include "common/ref.h" - #include "common/exception.h" - #include "common/thread.h" --#include "common/tasking.h" -+// -- GODOT start -- -+//#include "common/tasking.h" -+// -- GODOT end -- - #include "math.h" - - namespace oidn { -diff --git a/core/device.cpp b/core/device.cpp -index c455695..3cd658b 100644 ---- a/core/device.cpp -+++ b/core/device.cpp -@@ -29,7 +29,9 @@ namespace oidn { - - Device::~Device() - { -- observer.reset(); -+ // -- GODOT start -- -+ //observer.reset(); -+ // -- GODOT end -- - } - - void Device::setError(Device* device, Error code, const std::string& message) -@@ -141,6 +143,9 @@ namespace oidn { - if (isCommitted()) - throw Exception(Error::InvalidOperation, "device can be committed only once"); - -+ // -- GODOT start -- -+ #if 0 -+ // -- GODOT end -- - // Get the optimal thread affinities - if (setAffinity) - { -@@ -157,7 +162,10 @@ namespace oidn { - // Automatically set the thread affinities - if (affinity) - observer = std::make_shared(affinity, *arena); -- -+ // -- GODOT start -- -+ #endif -+ numThreads = 1; -+ // -- GODOT end -- - dirty = false; - - if (isVerbose()) -@@ -191,9 +199,17 @@ namespace oidn { - - Ref filter; - -+// -- GODOT start -- -+// Godot doesn't need Raytracing filters. Removing them saves space in the weights files. -+#if 0 -+// -- GODOT end -- - if (type == "RT") - filter = makeRef(Ref(this)); -- else if (type == "RTLightmap") -+// -- GODOT start -- -+// Godot doesn't need Raytracing filters. Removing them saves space in the weights files. -+#endif -+ if (type == "RTLightmap") -+// -- GODOT end -- - filter = makeRef(Ref(this)); - else - throw Exception(Error::InvalidArgument, "unknown filter type"); -@@ -210,11 +226,12 @@ namespace oidn { - std::cout << " Build : " << getBuildName() << std::endl; - std::cout << " Platform: " << getPlatformName() << std::endl; - -- std::cout << " Tasking :"; -- std::cout << " TBB" << TBB_VERSION_MAJOR << "." << TBB_VERSION_MINOR; -- std::cout << " TBB_header_interface_" << TBB_INTERFACE_VERSION << " TBB_lib_interface_" << tbb::TBB_runtime_interface_version(); -- std::cout << std::endl; -- -+// -- GODOT start -- -+// std::cout << " Tasking :"; -+// std::cout << " TBB" << TBB_VERSION_MAJOR << "." << TBB_VERSION_MINOR; -+// std::cout << " TBB_header_interface_" << TBB_INTERFACE_VERSION << " TBB_lib_interface_" << tbb::TBB_runtime_interface_version(); -+// std::cout << std::endl; -+// -- GODOT end -- - std::cout << std::endl; - } - -diff --git a/core/device.h b/core/device.h -index c2df714..d9cfd85 100644 ---- a/core/device.h -+++ b/core/device.h -@@ -41,10 +41,12 @@ namespace oidn { - ErrorFunction errorFunc = nullptr; - void* errorUserPtr = nullptr; - -- // Tasking -- std::shared_ptr arena; -- std::shared_ptr observer; -- std::shared_ptr affinity; -+// -- GODOT start -- -+// // Tasking -+// std::shared_ptr arena; -+// std::shared_ptr observer; -+// std::shared_ptr affinity; -+// -- GODOT end -- - - // Parameters - int numThreads = 0; // autodetect by default -@@ -66,17 +68,19 @@ namespace oidn { - - void commit(); - -- template -- void executeTask(F& f) -- { -- arena->execute(f); -- } -+// -- GODOT start -- -+// template -+// void executeTask(F& f) -+// { -+// arena->execute(f); -+// } - -- template -- void executeTask(const F& f) -- { -- arena->execute(f); -- } -+// template -+// void executeTask(const F& f) -+// { -+// arena->execute(f); -+// } -+// -- GODOT end -- - - Ref newBuffer(size_t byteSize); - Ref newBuffer(void* ptr, size_t byteSize); -@@ -86,7 +90,10 @@ namespace oidn { - __forceinline std::mutex& getMutex() { return mutex; } - - private: -- bool isCommitted() const { return bool(arena); } -+// -- GODOT start -- -+ //bool isCommitted() const { return bool(arena); } -+ bool isCommitted() const { return false; } -+// -- GODOT end -- - void checkCommitted(); - - void print(); -diff --git a/core/network.cpp b/core/network.cpp -index 8c2de09..ed8328c 100644 ---- a/core/network.cpp -+++ b/core/network.cpp -@@ -17,6 +17,9 @@ - #include "upsample.h" - #include "weights_reorder.h" - #include "network.h" -+// -- GODOT start -- -+#include -+// -- GODOT end -- - - namespace oidn { - -diff --git a/core/transfer_function.cpp b/core/transfer_function.cpp -index 601f814..487f0a9 100644 ---- a/core/transfer_function.cpp -+++ b/core/transfer_function.cpp -@@ -24,6 +24,10 @@ namespace oidn { - float AutoexposureNode::autoexposure(const Image& color) - { - assert(color.format == Format::Float3); -+// -- GODOT start -- -+// We don't want to mess with TTB and we don't use autoexposure, so we disable this code -+#if 0 -+// -- GODOT end -- - - constexpr float key = 0.18f; - constexpr float eps = 1e-8f; -@@ -89,6 +93,10 @@ namespace oidn { - ); - - return (sum.second > 0) ? (key / exp2(sum.first / float(sum.second))) : 1.f; -+// -- GODOT start -- -+#endif -+ return 1.0; -+// -- GODOT end -- - } - - } // namespace oidn diff --git a/thirdparty/oidn/mkl-dnn/src/cpu/rnn/rnn_reorders.hpp b/thirdparty/oidn/mkl-dnn/src/cpu/rnn/rnn_reorders.hpp index 597c63e3f8..78cdedbae4 100644 --- a/thirdparty/oidn/mkl-dnn/src/cpu/rnn/rnn_reorders.hpp +++ b/thirdparty/oidn/mkl-dnn/src/cpu/rnn/rnn_reorders.hpp @@ -131,7 +131,7 @@ struct rnn_weights_reorder_t : public cpu_primitive_t { return status::success; } - format_tag_t itag_; + format_tag_t itag_ = mkldnn_format_tag_undef; private: void init_scratchpad() { diff --git a/thirdparty/oidn/mkl-dnn/src/cpu/simple_concat.hpp b/thirdparty/oidn/mkl-dnn/src/cpu/simple_concat.hpp index 5177275452..057cc3c4c7 100644 --- a/thirdparty/oidn/mkl-dnn/src/cpu/simple_concat.hpp +++ b/thirdparty/oidn/mkl-dnn/src/cpu/simple_concat.hpp @@ -96,9 +96,9 @@ struct simple_concat_t: public cpu_primitive_t { return status::success; } - int perm_[MKLDNN_MAX_NDIMS]; - int iperm_[MKLDNN_MAX_NDIMS]; - dims_t blocks_; + int perm_[MKLDNN_MAX_NDIMS] {}; + int iperm_[MKLDNN_MAX_NDIMS] {}; + dims_t blocks_ {}; dim_t nelems_to_concat(const memory_desc_wrapper &data_d) const { const int ndims = data_d.ndims(); diff --git a/thirdparty/oidn/patches/godot-changes-c58c5216.patch b/thirdparty/oidn/patches/godot-changes-c58c5216.patch new file mode 100644 index 0000000000..6a54703064 --- /dev/null +++ b/thirdparty/oidn/patches/godot-changes-c58c5216.patch @@ -0,0 +1,307 @@ +diff --git a/common/platform.h b/common/platform.h +index be14bc7..9373b61 100644 +--- a/common/platform.h ++++ b/common/platform.h +@@ -19,7 +19,7 @@ + #if defined(_WIN32) + #define WIN32_LEAN_AND_MEAN + #define NOMINMAX +- #include ++ #include + #elif defined(__APPLE__) + #include + #endif +@@ -129,4 +129,3 @@ namespace oidn { + std::string getBuildName(); + + } // namespace oidn +- +diff --git a/core/autoencoder.cpp b/core/autoencoder.cpp +index d6915e6..d8da684 100644 +--- a/core/autoencoder.cpp ++++ b/core/autoencoder.cpp +@@ -90,13 +90,19 @@ namespace oidn { + if (!dirty) + return; + +- device->executeTask([&]() +- { ++ // -- GODOT start -- ++ //device->executeTask([&]() ++ //{ ++ // GODOT end -- ++ + if (mayiuse(avx512_common)) + net = buildNet<16>(); + else + net = buildNet<8>(); +- }); ++ ++ // GODOT start -- ++ //}); ++ // GODOT end -- + + dirty = false; + } +@@ -108,9 +114,10 @@ namespace oidn { + + if (!net) + return; +- +- device->executeTask([&]() +- { ++ // -- GODOT start -- ++ //device->executeTask([&]() ++ //{ ++ // -- GODOT end -- + Progress progress; + progress.func = progressFunc; + progress.userPtr = progressUserPtr; +@@ -156,7 +163,9 @@ namespace oidn { + tileIndex++; + } + } +- }); ++ // -- GODOT start -- ++ //}); ++ // -- GODOT end -- + } + + void AutoencoderFilter::computeTileSize() +@@ -464,6 +473,11 @@ namespace oidn { + return std::make_shared(); + } + ++// -- GODOT start -- ++// Godot doesn't need Raytracing filters. Removing them saves space in the weights files. ++#if 0 ++// -- GODOT end -- ++ + // -------------------------------------------------------------------------- + // RTFilter + // -------------------------------------------------------------------------- +@@ -491,6 +505,9 @@ namespace oidn { + weightData.hdr_alb = weights::rt_hdr_alb; + weightData.hdr_alb_nrm = weights::rt_hdr_alb_nrm; + } ++// -- GODOT start -- ++#endif ++// -- GODOT end -- + + // -------------------------------------------------------------------------- + // RTLightmapFilter +diff --git a/core/autoencoder.h b/core/autoencoder.h +index c199052..98b6108 100644 +--- a/core/autoencoder.h ++++ b/core/autoencoder.h +@@ -93,11 +93,18 @@ namespace oidn { + // RTFilter - Generic ray tracing denoiser + // -------------------------------------------------------------------------- + ++// -- GODOT start -- ++// Godot doesn't need Raytracing filters. Removing them saves space in the weights files. ++#if 0 ++// -- GODOT end -- + class RTFilter : public AutoencoderFilter + { + public: + explicit RTFilter(const Ref& device); + }; ++// -- GODOT start -- ++#endif ++// -- GODOT end -- + + // -------------------------------------------------------------------------- + // RTLightmapFilter - Ray traced lightmap denoiser +diff --git a/core/common.h b/core/common.h +index a3a7e8a..a35dd90 100644 +--- a/core/common.h ++++ b/core/common.h +@@ -27,7 +27,9 @@ + #include "common/ref.h" + #include "common/exception.h" + #include "common/thread.h" +-#include "common/tasking.h" ++// -- GODOT start -- ++//#include "common/tasking.h" ++// -- GODOT end -- + #include "math.h" + + namespace oidn { +diff --git a/core/device.cpp b/core/device.cpp +index c455695..3cd658b 100644 +--- a/core/device.cpp ++++ b/core/device.cpp +@@ -29,7 +29,9 @@ namespace oidn { + + Device::~Device() + { +- observer.reset(); ++ // -- GODOT start -- ++ //observer.reset(); ++ // -- GODOT end -- + } + + void Device::setError(Device* device, Error code, const std::string& message) +@@ -141,6 +143,9 @@ namespace oidn { + if (isCommitted()) + throw Exception(Error::InvalidOperation, "device can be committed only once"); + ++ // -- GODOT start -- ++ #if 0 ++ // -- GODOT end -- + // Get the optimal thread affinities + if (setAffinity) + { +@@ -157,7 +162,10 @@ namespace oidn { + // Automatically set the thread affinities + if (affinity) + observer = std::make_shared(affinity, *arena); +- ++ // -- GODOT start -- ++ #endif ++ numThreads = 1; ++ // -- GODOT end -- + dirty = false; + + if (isVerbose()) +@@ -191,9 +199,17 @@ namespace oidn { + + Ref filter; + ++// -- GODOT start -- ++// Godot doesn't need Raytracing filters. Removing them saves space in the weights files. ++#if 0 ++// -- GODOT end -- + if (type == "RT") + filter = makeRef(Ref(this)); +- else if (type == "RTLightmap") ++// -- GODOT start -- ++// Godot doesn't need Raytracing filters. Removing them saves space in the weights files. ++#endif ++ if (type == "RTLightmap") ++// -- GODOT end -- + filter = makeRef(Ref(this)); + else + throw Exception(Error::InvalidArgument, "unknown filter type"); +@@ -210,11 +226,12 @@ namespace oidn { + std::cout << " Build : " << getBuildName() << std::endl; + std::cout << " Platform: " << getPlatformName() << std::endl; + +- std::cout << " Tasking :"; +- std::cout << " TBB" << TBB_VERSION_MAJOR << "." << TBB_VERSION_MINOR; +- std::cout << " TBB_header_interface_" << TBB_INTERFACE_VERSION << " TBB_lib_interface_" << tbb::TBB_runtime_interface_version(); +- std::cout << std::endl; +- ++// -- GODOT start -- ++// std::cout << " Tasking :"; ++// std::cout << " TBB" << TBB_VERSION_MAJOR << "." << TBB_VERSION_MINOR; ++// std::cout << " TBB_header_interface_" << TBB_INTERFACE_VERSION << " TBB_lib_interface_" << tbb::TBB_runtime_interface_version(); ++// std::cout << std::endl; ++// -- GODOT end -- + std::cout << std::endl; + } + +diff --git a/core/device.h b/core/device.h +index c2df714..d9cfd85 100644 +--- a/core/device.h ++++ b/core/device.h +@@ -41,10 +41,12 @@ namespace oidn { + ErrorFunction errorFunc = nullptr; + void* errorUserPtr = nullptr; + +- // Tasking +- std::shared_ptr arena; +- std::shared_ptr observer; +- std::shared_ptr affinity; ++// -- GODOT start -- ++// // Tasking ++// std::shared_ptr arena; ++// std::shared_ptr observer; ++// std::shared_ptr affinity; ++// -- GODOT end -- + + // Parameters + int numThreads = 0; // autodetect by default +@@ -66,17 +68,19 @@ namespace oidn { + + void commit(); + +- template +- void executeTask(F& f) +- { +- arena->execute(f); +- } ++// -- GODOT start -- ++// template ++// void executeTask(F& f) ++// { ++// arena->execute(f); ++// } + +- template +- void executeTask(const F& f) +- { +- arena->execute(f); +- } ++// template ++// void executeTask(const F& f) ++// { ++// arena->execute(f); ++// } ++// -- GODOT end -- + + Ref newBuffer(size_t byteSize); + Ref newBuffer(void* ptr, size_t byteSize); +@@ -86,7 +90,10 @@ namespace oidn { + __forceinline std::mutex& getMutex() { return mutex; } + + private: +- bool isCommitted() const { return bool(arena); } ++// -- GODOT start -- ++ //bool isCommitted() const { return bool(arena); } ++ bool isCommitted() const { return false; } ++// -- GODOT end -- + void checkCommitted(); + + void print(); +diff --git a/core/network.cpp b/core/network.cpp +index 8c2de09..ed8328c 100644 +--- a/core/network.cpp ++++ b/core/network.cpp +@@ -17,6 +17,9 @@ + #include "upsample.h" + #include "weights_reorder.h" + #include "network.h" ++// -- GODOT start -- ++#include ++// -- GODOT end -- + + namespace oidn { + +diff --git a/core/transfer_function.cpp b/core/transfer_function.cpp +index 601f814..487f0a9 100644 +--- a/core/transfer_function.cpp ++++ b/core/transfer_function.cpp +@@ -24,6 +24,10 @@ namespace oidn { + float AutoexposureNode::autoexposure(const Image& color) + { + assert(color.format == Format::Float3); ++// -- GODOT start -- ++// We don't want to mess with TTB and we don't use autoexposure, so we disable this code ++#if 0 ++// -- GODOT end -- + + constexpr float key = 0.18f; + constexpr float eps = 1e-8f; +@@ -89,6 +93,10 @@ namespace oidn { + ); + + return (sum.second > 0) ? (key / exp2(sum.first / float(sum.second))) : 1.f; ++// -- GODOT start -- ++#endif ++ return 1.0; ++// -- GODOT end -- + } + + } // namespace oidn diff --git a/thirdparty/oidn/patches/mkl-dnn-fix-vs2017-build.patch b/thirdparty/oidn/patches/mkl-dnn-fix-vs2017-build.patch new file mode 100644 index 0000000000..50d94ebffa --- /dev/null +++ b/thirdparty/oidn/patches/mkl-dnn-fix-vs2017-build.patch @@ -0,0 +1,45 @@ +Rediffed by @akien-mga to match oidn 1.1.0 source. + +From 1e42e6db81e1a5270ecc0191c5385ce7e7d978e9 Mon Sep 17 00:00:00 2001 +From: Jeremy Wong +Date: Wed, 11 Sep 2019 04:46:53 +0800 +Subject: [PATCH] src: initialize members in some structures to prevent compile + errors with VS2017 + +addresses "error C3615: constexpr function '...' cannot result in a constant expression" with VS2017 +--- + src/cpu/rnn/rnn_reorders.hpp | 2 +- + src/cpu/simple_concat.hpp | 6 +++--- + src/cpu/simple_sum.hpp | 2 +- + 3 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/thirdparty/oidn/mkl-dnn/src/cpu/rnn/rnn_reorders.hpp b/thirdparty/oidn/mkl-dnn/src/cpu/rnn/rnn_reorders.hpp +index 597c63e3f8..ae1551390a 100644 +--- a/thirdparty/oidn/mkl-dnn/src/cpu/rnn/rnn_reorders.hpp ++++ b/thirdparty/oidn/mkl-dnn/src/cpu/rnn/rnn_reorders.hpp +@@ -131,7 +131,7 @@ struct rnn_weights_reorder_t : public cpu_primitive_t { + return status::success; + } + +- format_tag_t itag_; ++ format_tag_t itag_ = mkldnn_format_tag_undef; + + private: + void init_scratchpad() { +diff --git a/thirdparty/oidn/mkl-dnn/src/cpu/simple_concat.hpp b/thirdparty/oidn/mkl-dnn/src/cpu/simple_concat.hpp +index 5177275452..057cc3c4c7 100644 +--- a/thirdparty/oidn/mkl-dnn/src/cpu/simple_concat.hpp ++++ b/thirdparty/oidn/mkl-dnn/src/cpu/simple_concat.hpp +@@ -96,9 +96,9 @@ struct simple_concat_t: public cpu_primitive_t { + return status::success; + } + +- int perm_[MKLDNN_MAX_NDIMS]; +- int iperm_[MKLDNN_MAX_NDIMS]; +- dims_t blocks_; ++ int perm_[MKLDNN_MAX_NDIMS] {}; ++ int iperm_[MKLDNN_MAX_NDIMS] {}; ++ dims_t blocks_ {}; + + dim_t nelems_to_concat(const memory_desc_wrapper &data_d) const { + const int ndims = data_d.ndims(); -- cgit v1.2.3