[Bf-blender-cvs] [68b9aa87c91] cycles-x: Cycles X: Use RenderBuffer in the denoise task API

Sergey Sharybin noreply at git.blender.org
Wed Jun 16 11:00:38 CEST 2021


Commit: 68b9aa87c91d9eab37f9be82404aec485e7d76c9
Author: Sergey Sharybin
Date:   Tue Jun 15 12:43:19 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB68b9aa87c91d9eab37f9be82404aec485e7d76c9

Cycles X: Use RenderBuffer in the denoise task API

No functional changes, but gives possibility to use PassAccessor to get
pixels of the input noisy pass.

===================================================================

M	intern/cycles/device/device_denoise.h
M	intern/cycles/device/optix/device_impl.cpp
M	intern/cycles/integrator/denoiser_device.cpp

===================================================================

diff --git a/intern/cycles/device/device_denoise.h b/intern/cycles/device/device_denoise.h
index d8b8658204a..25263d14cac 100644
--- a/intern/cycles/device/device_denoise.h
+++ b/intern/cycles/device/device_denoise.h
@@ -86,9 +86,9 @@ class DeviceDenoiseTask {
   DenoiseParams params;
 
   int num_samples;
-  BufferParams buffer_params;
 
-  device_ptr buffer;
+  RenderBuffers *render_buffers;
+  BufferParams buffer_params;
 };
 
 CCL_NAMESPACE_END
diff --git a/intern/cycles/device/optix/device_impl.cpp b/intern/cycles/device/optix/device_impl.cpp
index 46369e18f49..a5fccb92c08 100644
--- a/intern/cycles/device/optix/device_impl.cpp
+++ b/intern/cycles/device/optix/device_impl.cpp
@@ -594,7 +594,7 @@ bool OptiXDevice::denoise_filter_convert_to_rgb(OptiXDeviceQueue *queue,
   const int pass_sample_count = task.buffer_params.get_pass_offset(PASS_SAMPLE_COUNT);
 
   void *args[] = {const_cast<device_ptr *>(&d_input_rgb),
-                  const_cast<device_ptr *>(&task.buffer),
+                  &task.render_buffers->buffer.device_pointer,
                   const_cast<int *>(&task.buffer_params.full_x),
                   const_cast<int *>(&task.buffer_params.full_y),
                   const_cast<int *>(&task.buffer_params.width),
@@ -621,7 +621,7 @@ bool OptiXDevice::denoise_filter_convert_from_rgb(OptiXDeviceQueue *queue,
   const int pass_sample_count = task.buffer_params.get_pass_offset(PASS_SAMPLE_COUNT);
 
   void *args[] = {const_cast<device_ptr *>(&d_input_rgb),
-                  const_cast<device_ptr *>(&task.buffer),
+                  &task.render_buffers->buffer.device_pointer,
                   const_cast<int *>(&task.buffer_params.full_x),
                   const_cast<int *>(&task.buffer_params.full_y),
                   const_cast<int *>(&task.buffer_params.width),
diff --git a/intern/cycles/integrator/denoiser_device.cpp b/intern/cycles/integrator/denoiser_device.cpp
index 99678bd6aee..30097baf130 100644
--- a/intern/cycles/integrator/denoiser_device.cpp
+++ b/intern/cycles/integrator/denoiser_device.cpp
@@ -164,13 +164,13 @@ void DeviceDenoiser::denoise_buffer_on_device(Device *device,
   task.num_samples = num_samples;
   task.buffer_params = buffer_params;
 
-  device_vector<float> local_buffer(device, "denoiser local buffer", MEM_READ_WRITE);
+  RenderBuffers local_render_buffers(device);
   bool local_buffer_used = false;
 
   if (device == device_) {
     /* The device can access an existing buffer pointer. */
     local_buffer_used = false;
-    task.buffer = render_buffers->buffer.device_pointer;
+    task.render_buffers = render_buffers;
   }
   else {
     /* Create buffer which is available by the device used by denoiser. */
@@ -182,24 +182,26 @@ void DeviceDenoiser::denoise_buffer_on_device(Device *device,
 
     render_buffers->copy_from_device();
 
-    local_buffer.alloc(render_buffers->buffer.size());
-    memcpy(local_buffer.data(),
+    /* TODO(sergey): Avoid `zero_to_device()`. */
+    local_render_buffers.reset(buffer_params);
+
+    memcpy(local_render_buffers.buffer.data(),
            render_buffers->buffer.data(),
            sizeof(float) * render_buffers->buffer.size());
-    local_buffer.copy_to_device();
+    local_render_buffers.copy_to_device();
 
-    task.buffer = local_buffer.device_pointer;
+    task.render_buffers = &local_render_buffers;
   }
 
   device->denoise_buffer(task);
 
   if (local_buffer_used) {
-    /* TODO(sergey): Only copy denoised pass. */
-    local_buffer.copy_from_device();
+    /* TODO(sergey): Only copy denoised passes. */
+    local_render_buffers.copy_from_device();
     memcpy(render_buffers->buffer.data(),
-           local_buffer.data(),
+           local_render_buffers.buffer.data(),
            sizeof(float) * render_buffers->buffer.size());
-    render_buffers->buffer.copy_to_device();
+    render_buffers->copy_to_device();
   }
 }



More information about the Bf-blender-cvs mailing list