34 const int num_samples,
35 bool allow_inplace_modification)
38 if (!denoiser_device) {
49 bool local_buffer_used =
false;
53 local_buffer_used =
false;
57 VLOG_WORK <<
"Creating temporary buffer on denoiser device.";
64 local_buffer_used =
true;
68 local_render_buffers.
reset(buffer_params);
75 sizeof(
float) * local_render_buffers.
buffer.
size());
85 if (local_buffer_used) {
89 render_buffers, buffer_params, &local_render_buffers, local_render_buffers.
params);
94 return denoise_result;
106 LOG(ERROR) <<
"Error preprocessing guiding passes.";
123 LOG(ERROR) <<
"GPU denoiser creation has failed.";
128 LOG(ERROR) <<
"GPU denoiser configuration has failed.";
137 const BufferParams &buffer_params = context.buffer_params;
142 &context.guiding_params.pass_stride,
143 &context.guiding_params.pass_albedo,
144 &context.guiding_params.pass_normal,
145 &context.guiding_params.pass_flow,
146 &context.render_buffers->buffer.device_pointer,
150 &context.pass_sample_count,
151 &context.pass_denoising_albedo,
152 &context.pass_denoising_normal,
153 &context.pass_motion,
156 &buffer_params.
width,
158 &context.num_samples);
164 : denoise_params(task.
params),
165 render_buffers(task.render_buffers),
166 buffer_params(task.buffer_params),
167 guiding_buffer(device,
"denoiser guiding passes buffer",
true),
168 num_samples(task.num_samples)
237 const BufferParams &buffer_params = context.buffer_params;
244 &buffer_params.
width,
249 &context.num_samples,
252 &context.pass_sample_count,
268 const BufferParams &buffer_params = context.buffer_params;
275 &buffer_params.
width,
287 const BufferParams &buffer_params = context.buffer_params;
292 &context.guiding_params.pass_stride,
293 &context.guiding_params.pass_albedo,
294 &buffer_params.
width,
320 destination.
d_pixels = context.render_buffers->buffer.device_pointer;
323 destination.
pixel_stride = context.buffer_params.pass_stride;
336 const BufferParams &buffer_params = context.buffer_params;
349 if (context.albedo_replaced_with_fake) {
350 LOG(ERROR) <<
"Pass which requires albedo is denoised after fake albedo has been set.";
354 else if (context.use_guiding_passes && !context.albedo_replaced_with_fake) {
355 context.albedo_replaced_with_fake =
true;
357 LOG(ERROR) <<
"Error replacing real albedo with the fake one.";
365 LOG(ERROR) <<
"Error converting denoising passes to RGB buffer.";
370 LOG(ERROR) <<
"Error running denoiser.";
378 LOG(ERROR) <<
"Error copying denoiser result to the denoised pass.";
void render_buffers_host_copy_denoised(RenderBuffers *dst, const BufferParams &dst_params, const RenderBuffers *src, const BufferParams &src_params, const size_t src_offset)
int get_pass_offset(PassType type, PassMode mode=PassMode::NOISY) const
int pass_denoising_normal
struct DenoiserGPU::DenoiseContext::@1390 guiding_params
DenoiseContext(Device *device, const DenoiseTask &task)
struct DenoiserGPU::DenoiseContext::@1389 prev_output
const BufferParams & buffer_params
const DenoiseParams & denoise_params
device_only_memory< float > guiding_buffer
int pass_denoising_albedo
RenderBuffers * render_buffers
bool use_denoising_albedo
BufferParams buffer_params
RenderBuffers * render_buffers
bool allow_inplace_modification
bool denoise_filter_guiding_set_fake_albedo(const DenoiseContext &context)
virtual bool denoise_run(const DenoiseContext &context, const DenoisePass &pass)=0
DenoiserGPU(Device *denoiser_device, const DenoiseParams ¶ms)
virtual bool denoise_ensure(DenoiseContext &context)
bool denoise_filter_color_postprocess(const DenoiseContext &context, const DenoisePass &pass)
bool denoise_filter_color_preprocess(const DenoiseContext &context, const DenoisePass &pass)
bool denoise_filter_guiding_preprocess(const DenoiseContext &context)
virtual bool denoise_create_if_needed(DenoiseContext &context)=0
bool denoise_buffer(const BufferParams &buffer_params, RenderBuffers *render_buffers, const int num_samples, bool allow_inplace_modification) override
unique_ptr< DeviceQueue > denoiser_queue_
void denoise_pass(DenoiseContext &context, PassType pass_type)
void denoise_color_read(const DenoiseContext &context, const DenoisePass &pass)
virtual bool denoise_configure_if_needed(DenoiseContext &context)=0
Device * get_denoiser_device() const
Device * denoiser_device_
virtual unique_ptr< DeviceQueue > gpu_queue_create()
bool use_approximate_shadow_catcher
bool use_approximate_shadow_catcher_background
bool get_render_tile_pixels(const RenderBuffers *render_buffers, const Destination &destination) const
device_vector< float > buffer
void reset(const BufferParams ¶ms)
device_ptr device_pointer
void alloc_to_device(const size_t num, bool shrink_to_fit=true)
#define CCL_NAMESPACE_END
ccl_gpu_kernel_postfix const ccl_global int ccl_global float const int work_size
@ PASS_SHADOW_CATCHER_MATTE
@ PASS_DENOISING_PREVIOUS
@ DEVICE_KERNEL_FILTER_COLOR_PREPROCESS
@ DEVICE_KERNEL_FILTER_GUIDING_SET_FAKE_ALBEDO
@ DEVICE_KERNEL_FILTER_COLOR_POSTPROCESS
@ DEVICE_KERNEL_FILTER_GUIDING_PREPROCESS
#define DCHECK(expression)
CCL_NAMESPACE_BEGIN const char * pass_type_as_string(const PassType type)