6 #ifdef WITH_OPENIMAGEDENOISE
8 # include <OpenImageDenoise/oidn.hpp>
16 #ifdef WITH_OPENIMAGEDENOISE
31 #ifdef WITH_OPENIMAGEDENOISE
32 oidn::DeviceRef device_;
35 bool initialized_ =
false;
43 #ifdef WITH_OPENIMAGEDENOISE
51 device_ = oidn::newDevice();
52 device_.set(
"setAffinity",
false);
54 filter_ = device_.newFilter(
"RT");
75 buffer->get_elem_bytes_len());
78 template<
typename T>
void set(
const StringRef option_name,
T value)
81 filter_.set(option_name.data(), value);
160 input_program_color_ =
nullptr;
161 input_program_normal_ =
nullptr;
162 input_program_albedo_ =
nullptr;
196 this->
generate_denoise(result, tile_color, tile_normal, tile_albedo, settings_);
224 filter.set_image(
"color", buf_color);
225 filter.set_image(
"normal", buf_normal);
226 filter.set_image(
"albedo", buf_albedo);
231 filter.set(
"srgb",
false);
236 filter.deinit_and_unlock_denoiser();
296 filter.set_image(image_name_, input_buf);
298 filter.deinit_and_unlock_denoiser();
301 if (
input->is_a_single_elem()) {
void BLI_rcti_init(struct rcti *rect, int xmin, int xmax, int ymin, int ymax)
int BLI_cpu_support_sse41(void)
#define BLI_MUTEX_INITIALIZER
void BLI_mutex_lock(ThreadMutex *mutex)
void BLI_mutex_unlock(ThreadMutex *mutex)
@ CMP_NODE_DENOISE_PREFILTER_FAST
@ CMP_NODE_DENOISE_PREFILTER_NONE
@ CMP_NODE_DENOISE_PREFILTER_ACCURATE
bool determine_depending_area_of_interest(rcti *input, ReadBufferOperation *read_operation, rcti *output) override
void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override
Get input operation area being read by this operation on rendering given output area.
void set(const StringRef UNUSED(option_name), T UNUSED(value))
void deinit_and_unlock_denoiser()
void init_and_lock_denoiser(MemoryBuffer *UNUSED(output))
void set_image(const StringRef UNUSED(name), MemoryBuffer *UNUSED(buffer))
MemoryBuffer * create_memory_buffer(rcti *rect) override
void deinit_execution() override
void update_memory_buffer(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
void generate_denoise(MemoryBuffer *output, MemoryBuffer *input_color, MemoryBuffer *input_normal, MemoryBuffer *input_albedo, NodeDenoise *settings)
void init_execution() override
void hash_output_params() override
void hash_output_params() override
DenoisePrefilterOperation(DataType data_type)
MemoryBuffer * create_memory_buffer(rcti *rect) override
void update_memory_buffer(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
a MemoryBuffer contains access to the data of a chunk
const rcti & get_rect() const
get the rect of this MemoryBuffer
MemoryBuffer * inflate() const
bool is_a_single_elem() const
float * get_buffer()
get the data of this MemoryBuffer
unsigned int get_height() const
void add_output_socket(DataType datatype)
SocketReader * get_input_socket_reader(unsigned int index)
unsigned int get_width() const
NodeOperationFlags flags_
NodeOperationOutput * get_output_socket(unsigned int index=0)
const rcti & get_canvas() const
NodeOperation * get_input_operation(int index)
virtual bool determine_depending_area_of_interest(rcti *input, ReadBufferOperation *read_operation, rcti *output)
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
void hash_params(T1 param1, T2 param2)
virtual void * initialize_tile_data(rcti *)
void deinit_execution() override
void init_execution() override
DataType
possible data types for sockets
@ Vector
Vector data type.
DO_INLINE void filter(lfVector *V, fmatrix3x3 *S)
ccl_global float * buffer
ccl_global KernelShaderEvalInput ccl_global float * output
ccl_global KernelShaderEvalInput * input
bool COM_is_denoise_supported()
static void area(int d1, int d2, int e1, int e2, float weights[2])
static bool are_guiding_passes_noise_free(NodeDenoise *settings)
constexpr int COM_DATA_TYPE_VALUE_CHANNELS
static bNodeSocketTemplate inputs[]
DepsgraphFromIDsFilter filter_
bool is_fullframe_operation