Unverified Commit d838a447 by Rémi Verschelde Committed by GitHub

Merge pull request #39340 from JFonS/upgrade_oidn

Upgrade OpenImageDenoise to v1.1.0
parents ce1811f9 dd79d1ce
......@@ -446,12 +446,32 @@ Files extracted from the upstream source:
## oidn
- Upstream: https://github.com/OpenImageDenoise/oidn
- Version: TBD
- Version: 1.1.0 (c58c5216db05ceef4cde5a096862f2eeffd14c06)
- License: Apache 2.0
Files extracted from upstream source:
- TBD
common/* (except tasking.* and CMakeLists.txt)
core/*
include/OpenImageDenoise/* (except version.h.in)
LICENSE.txt
mkl-dnn/include/*
mkl-dnn/src/* (except CMakeLists.txt)
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`
core/autoencoder.cpp
core/autoencoder.h
core/common.h
core/device.cpp
core/device.h
core/transfer_function.cpp
scripts/resource_to_cpp.py (used in modules/denoise/resource_to_cpp.py)
## opus
......
diff --git a/thirdparty/oidn/common/platform.h b/thirdparty/oidn/common/platform.h
index 205ac8981d..9373b617b5 100644
--- a/thirdparty/oidn/common/platform.h
+++ b/thirdparty/oidn/common/platform.h
@@ -19,7 +19,7 @@
#if defined(_WIN32)
#define WIN32_LEAN_AND_MEAN
#define NOMINMAX
- #include <Windows.h>
+ #include <windows.h>
#elif defined(__APPLE__)
#include <sys/sysctl.h>
#endif
......@@ -90,12 +90,19 @@ namespace oidn {
if (!dirty)
return;
{
// -- GODOT start --
//device->executeTask([&]()
//{
// GODOT end --
if (mayiuse(avx512_common))
net = buildNet<16>();
else
net = buildNet<8>();
}
// GODOT start --
//});
// GODOT end --
dirty = false;
}
......@@ -107,8 +114,10 @@ namespace oidn {
if (!net)
return;
{
// -- GODOT start --
//device->executeTask([&]()
//{
// -- GODOT end --
Progress progress;
progress.func = progressFunc;
progress.userPtr = progressUserPtr;
......@@ -154,7 +163,9 @@ namespace oidn {
tileIndex++;
}
}
}
// -- GODOT start --
//});
// -- GODOT end --
}
void AutoencoderFilter::computeTileSize()
......@@ -462,8 +473,11 @@ namespace oidn {
return std::make_shared<GammaTransferFunction>();
}
// -- GODOT start --
// Godot doesn't need Raytracing filters. Removing them saves space in the weights files.
#if 0
// -- GODOT end --
// --------------------------------------------------------------------------
// RTFilter
// --------------------------------------------------------------------------
......@@ -491,7 +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
......
......@@ -93,14 +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>& device);
};
// -- GODOT start --
#endif
// -- GODOT end --
// --------------------------------------------------------------------------
// RTLightmapFilter - Ray traced lightmap denoiser
......
......@@ -27,6 +27,9 @@
#include "common/ref.h"
#include "common/exception.h"
#include "common/thread.h"
// -- GODOT start --
//#include "common/tasking.h"
// -- GODOT end --
#include "math.h"
namespace oidn {
......
......@@ -29,6 +29,9 @@ namespace oidn {
Device::~Device()
{
// -- GODOT start --
//observer.reset();
// -- GODOT end --
}
void Device::setError(Device* device, Error code, const std::string& message)
......@@ -140,10 +143,29 @@ 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)
{
affinity = std::make_shared<ThreadAffinity>(1, verbose); // one thread per core
if (affinity->getNumThreads() == 0)
affinity.reset();
}
// Create the task arena
const int maxNumThreads = 1; //affinity ? affinity->getNumThreads() : tbb::this_task_arena::max_concurrency();
const int maxNumThreads = affinity ? affinity->getNumThreads() : tbb::this_task_arena::max_concurrency();
numThreads = (numThreads > 0) ? min(numThreads, maxNumThreads) : maxNumThreads;
arena = std::make_shared<tbb::task_arena>(numThreads);
// Automatically set the thread affinities
if (affinity)
observer = std::make_shared<PinningObserver>(affinity, *arena);
// -- GODOT start --
#endif
numThreads = 1;
// -- GODOT end --
dirty = false;
if (isVerbose())
......@@ -177,12 +199,17 @@ namespace oidn {
Ref<Filter> 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<RTFilter>(Ref<Device>(this));
// -- GODOT start --
// Godot doesn't need Raytracing filters. Removing them saves space in the weights files.
#endif
if (type == "RTLightmap")
if (type == "RTLightmap")
// -- GODOT end --
filter = makeRef<RTLightmapFilter>(Ref<Device>(this));
else
throw Exception(Error::InvalidArgument, "unknown filter type");
......@@ -199,6 +226,12 @@ namespace oidn {
std::cout << " Build : " << getBuildName() << std::endl;
std::cout << " Platform: " << getPlatformName() << 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;
}
......
......@@ -41,6 +41,13 @@ namespace oidn {
ErrorFunction errorFunc = nullptr;
void* errorUserPtr = nullptr;
// -- GODOT start --
// // Tasking
// std::shared_ptr<tbb::task_arena> arena;
// std::shared_ptr<PinningObserver> observer;
// std::shared_ptr<ThreadAffinity> affinity;
// -- GODOT end --
// Parameters
int numThreads = 0; // autodetect by default
bool setAffinity = true;
......@@ -61,6 +68,20 @@ namespace oidn {
void commit();
// -- GODOT start --
// template<typename F>
// void executeTask(F& f)
// {
// arena->execute(f);
// }
// template<typename F>
// void executeTask(const F& f)
// {
// arena->execute(f);
// }
// -- GODOT end --
Ref<Buffer> newBuffer(size_t byteSize);
Ref<Buffer> newBuffer(void* ptr, size_t byteSize);
Ref<Filter> newFilter(const std::string& type);
......@@ -69,7 +90,10 @@ namespace oidn {
__forceinline std::mutex& getMutex() { return mutex; }
private:
bool isCommitted() const { return false; }
// -- GODOT start --
//bool isCommitted() const { return bool(arena); }
bool isCommitted() const { return false; }
// -- GODOT end --
void checkCommitted();
void print();
......
......@@ -14,10 +14,12 @@
// limitations under the License. //
// ======================================================================== //
#include "network.h"
#include "upsample.h"
#include "weights_reorder.h"
#include "network.h"
// -- GODOT start --
#include <cstring>
// -- GODOT end --
namespace oidn {
......
......@@ -24,9 +24,12 @@ namespace oidn {
float AutoexposureNode::autoexposure(const Image& color)
{
assert(color.format == Format::Float3);
return 1.0f;
// -- 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 key = 0.18f;
constexpr float eps = 1e-8f;
constexpr int K = 16; // downsampling amount
......@@ -89,7 +92,11 @@ namespace oidn {
tbb::static_partitioner()
);
return (sum.second > 0) ? (key / exp2(sum.first / float(sum.second))) : 1.f;*/
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/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 <Windows.h>
+ #include <windows.h>
#elif defined(__APPLE__)
#include <sys/sysctl.h>
#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<GammaTransferFunction>();
}
+// -- 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>& 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<PinningObserver>(affinity, *arena);
-
+ // -- GODOT start --
+ #endif
+ numThreads = 1;
+ // -- GODOT end --
dirty = false;
if (isVerbose())
@@ -191,9 +199,17 @@ namespace oidn {
Ref<Filter> 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<RTFilter>(Ref<Device>(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<RTLightmapFilter>(Ref<Device>(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<tbb::task_arena> arena;
- std::shared_ptr<PinningObserver> observer;
- std::shared_ptr<ThreadAffinity> affinity;
+// -- GODOT start --
+// // Tasking
+// std::shared_ptr<tbb::task_arena> arena;
+// std::shared_ptr<PinningObserver> observer;
+// std::shared_ptr<ThreadAffinity> affinity;
+// -- GODOT end --
// Parameters
int numThreads = 0; // autodetect by default
@@ -66,17 +68,19 @@ namespace oidn {
void commit();
- template<typename F>
- void executeTask(F& f)
- {
- arena->execute(f);
- }
+// -- GODOT start --
+// template<typename F>
+// void executeTask(F& f)
+// {
+// arena->execute(f);
+// }
- template<typename F>
- void executeTask(const F& f)
- {
- arena->execute(f);
- }
+// template<typename F>
+// void executeTask(const F& f)
+// {
+// arena->execute(f);
+// }
+// -- GODOT end --
Ref<Buffer> newBuffer(size_t byteSize);
Ref<Buffer> 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 <cstring>
+// -- 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment