Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade OpenImageDenoise to v1.1.0 #39340

Merged
merged 1 commit into from
Jun 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 22 additions & 2 deletions thirdparty/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 0 additions & 13 deletions thirdparty/oidn/0001-window.h-case-sensitive.patch

This file was deleted.

26 changes: 21 additions & 5 deletions thirdparty/oidn/core/autoencoder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -107,8 +114,10 @@ namespace oidn {

if (!net)
return;

{
// -- GODOT start --
//device->executeTask([&]()
//{
// -- GODOT end --
Progress progress;
progress.func = progressFunc;
progress.userPtr = progressUserPtr;
Expand Down Expand Up @@ -154,7 +163,9 @@ namespace oidn {
tileIndex++;
}
}
}
// -- GODOT start --
//});
// -- GODOT end --
}

void AutoencoderFilter::computeTileSize()
Expand Down Expand Up @@ -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
// --------------------------------------------------------------------------
Expand Down Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions thirdparty/oidn/core/autoencoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions thirdparty/oidn/core/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
39 changes: 36 additions & 3 deletions thirdparty/oidn/core/device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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())
Expand Down Expand Up @@ -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");
Expand All @@ -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;
}

Expand Down
26 changes: 25 additions & 1 deletion thirdparty/oidn/core/device.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand All @@ -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();
Expand Down
4 changes: 3 additions & 1 deletion thirdparty/oidn/core/network.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down
13 changes: 10 additions & 3 deletions thirdparty/oidn/core/transfer_function.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Loading