summaryrefslogtreecommitdiff
path: root/thirdparty/oidn/core
diff options
context:
space:
mode:
authorjfons <joan.fonssanchez@gmail.com>2020-06-06 19:03:16 +0200
committerjfons <joan.fonssanchez@gmail.com>2020-06-06 19:03:16 +0200
commitdd79d1ce7847e7631ac56d28ca018c48bfae5af3 (patch)
tree71ff39b3c4da1710d0eef35b84e00ce8050611a7 /thirdparty/oidn/core
parentdc67d0737b86c7a6cab66752b96631c59c703997 (diff)
Upgrade OpenImageDenoise to v1.1.0
Upgrade OIDN to 1.1.0, the latest stable version that doesn't need the ISPC compiler. Documented the changes made during the removal of TBB and added a patch file for them.
Diffstat (limited to 'thirdparty/oidn/core')
-rw-r--r--thirdparty/oidn/core/autoencoder.cpp26
-rw-r--r--thirdparty/oidn/core/autoencoder.h4
-rw-r--r--thirdparty/oidn/core/common.h3
-rw-r--r--thirdparty/oidn/core/device.cpp39
-rw-r--r--thirdparty/oidn/core/device.h26
-rw-r--r--thirdparty/oidn/core/network.cpp4
-rw-r--r--thirdparty/oidn/core/transfer_function.cpp13
7 files changed, 102 insertions, 13 deletions
diff --git a/thirdparty/oidn/core/autoencoder.cpp b/thirdparty/oidn/core/autoencoder.cpp
index 8ae2421fa6..d8da684cb8 100644
--- a/thirdparty/oidn/core/autoencoder.cpp
+++ b/thirdparty/oidn/core/autoencoder.cpp
@@ -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
diff --git a/thirdparty/oidn/core/autoencoder.h b/thirdparty/oidn/core/autoencoder.h
index 97432f2bbd..98b610844e 100644
--- a/thirdparty/oidn/core/autoencoder.h
+++ b/thirdparty/oidn/core/autoencoder.h
@@ -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
diff --git a/thirdparty/oidn/core/common.h b/thirdparty/oidn/core/common.h
index 6c87f377bc..a35dd908b4 100644
--- a/thirdparty/oidn/core/common.h
+++ b/thirdparty/oidn/core/common.h
@@ -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 {
diff --git a/thirdparty/oidn/core/device.cpp b/thirdparty/oidn/core/device.cpp
index 0812624bb5..3cd658b9c8 100644
--- a/thirdparty/oidn/core/device.cpp
+++ b/thirdparty/oidn/core/device.cpp
@@ -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;
}
diff --git a/thirdparty/oidn/core/device.h b/thirdparty/oidn/core/device.h
index 93a83eb731..d9cfd8541a 100644
--- a/thirdparty/oidn/core/device.h
+++ b/thirdparty/oidn/core/device.h
@@ -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();
diff --git a/thirdparty/oidn/core/network.cpp b/thirdparty/oidn/core/network.cpp
index 4da32073cd..ed8328c954 100644
--- a/thirdparty/oidn/core/network.cpp
+++ b/thirdparty/oidn/core/network.cpp
@@ -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 {
diff --git a/thirdparty/oidn/core/transfer_function.cpp b/thirdparty/oidn/core/transfer_function.cpp
index a33e3c84bc..487f0a9f75 100644
--- a/thirdparty/oidn/core/transfer_function.cpp
+++ b/thirdparty/oidn/core/transfer_function.cpp
@@ -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