diff options
Diffstat (limited to 'intern/cycles/device/device_cpu.cpp')
-rw-r--r-- | intern/cycles/device/device_cpu.cpp | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp index c2843a61e6d..42ebf3a8399 100644 --- a/intern/cycles/device/device_cpu.cpp +++ b/intern/cycles/device/device_cpu.cpp @@ -508,13 +508,14 @@ class CPUDevice : public Device { void thread_run(DeviceTask *task) { - if (task->type == DeviceTask::RENDER) { + if (task->type == DeviceTask::RENDER || task->type == DeviceTask::DENOISE) thread_render(*task); - } - else if (task->type == DeviceTask::FILM_CONVERT) - thread_film_convert(*task); else if (task->type == DeviceTask::SHADER) thread_shader(*task); + else if (task->type == DeviceTask::FILM_CONVERT) + thread_film_convert(*task); + else if (task->type == DeviceTask::DENOISE_BUFFER) + thread_denoise(*task); } class CPUDeviceTask : public DeviceTask { @@ -954,6 +955,33 @@ class CPUDevice : public Device { delete split_kernel; } + void thread_denoise(DeviceTask &task) + { + RenderTile tile; + tile.x = task.x; + tile.y = task.y; + tile.w = task.w; + tile.h = task.h; + tile.buffer = task.buffer; + tile.sample = task.sample + task.num_samples; + tile.num_samples = task.num_samples; + tile.start_sample = task.sample; + tile.offset = task.offset; + tile.stride = task.stride; + tile.buffers = task.buffers; + + DenoisingTask denoising(this, task); + + ProfilingState denoising_profiler_state; + profiler.add_state(&denoising_profiler_state); + denoising.profiler = &denoising_profiler_state; + + denoise(denoising, tile); + task.update_progress(&tile, tile.w * tile.h); + + profiler.remove_state(&denoising_profiler_state); + } + void thread_film_convert(DeviceTask &task) { float sample_scale = 1.0f / (task.sample + 1); |