Commit: 7524525d993fbaea23b9daa4b34b75f75256d430
Author: Sergey Sharybin
Date:   Tue Jun 29 17:54:28 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB7524525d993fbaea23b9daa4b34b75f75256d430

Fix CPU rendering and OptiX denoiser in Cycles X

Make sure copying of temporary render buffers to the device
happens as part of the denoiser queue.

Initially thought this will be fixed by some more global changes
related to multi-GPU support, but:

- It is a simple and clear change.
- It brings multi-device support to a working state, which makes
  it easier to verify changes.
- Multi-device is supported at a higher level, and it could still
  be useful to support current usecases of DeviceDenoiser (where
  input render buffers are allocated on a different device).

Differential Revision: https://developer.blender.org/D11742

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

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

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

diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index a39f5b328c2..de3920f1cf3 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -381,6 +381,12 @@ class Device {
     LOG(ERROR) << "Request buffer denoising from a device which does not 
support it.";
   }
 
+  virtual DeviceQueue *get_denoise_queue()
+  {
+    LOG(ERROR) << "Request denoising queue from a device which does not 
support it.";
+    return nullptr;
+  }
+
   /* Sub-devices */
 
   /* Run given callback for every individual device which will be handling 
rendering.
diff --git a/intern/cycles/device/optix/device_impl.cpp 
b/intern/cycles/device/optix/device_impl.cpp
index e4b78ece648..85b1934399c 100644
--- a/intern/cycles/device/optix/device_impl.cpp
+++ b/intern/cycles/device/optix/device_impl.cpp
@@ -590,6 +590,11 @@ void OptiXDevice::denoise_buffer(const DeviceDenoiseTask 
&task)
   denoise_pass(context, PASS_SHADOW_CATCHER_MATTE);
 }
 
+DeviceQueue *OptiXDevice::get_denoise_queue()
+{
+  return &denoiser_.queue;
+}
+
 void OptiXDevice::denoise_pass(DenoiseContext &context, PassType pass_type)
 {
   const BufferParams &buffer_params = context.buffer_params;
diff --git a/intern/cycles/device/optix/device_impl.h 
b/intern/cycles/device/optix/device_impl.h
index caab62c4f05..78a7d382440 100644
--- a/intern/cycles/device/optix/device_impl.h
+++ b/intern/cycles/device/optix/device_impl.h
@@ -145,6 +145,7 @@ class OptiXDevice : public CUDADevice {
   class DenoisePass;
 
   virtual void denoise_buffer(const DeviceDenoiseTask &task) override;
+  virtual DeviceQueue *get_denoise_queue();
 
   void denoise_pass(DenoiseContext &context, PassType pass_type);
 
diff --git a/intern/cycles/integrator/denoiser_device.cpp 
b/intern/cycles/integrator/denoiser_device.cpp
index 8a0bff8dc21..8b11947a028 100644
--- a/intern/cycles/integrator/denoiser_device.cpp
+++ b/intern/cycles/integrator/denoiser_device.cpp
@@ -19,6 +19,7 @@
 #include "device/device.h"
 #include "device/device_denoise.h"
 #include "device/device_memory.h"
+#include "device/device_queue.h"
 #include "render/buffers.h"
 #include "util/util_logging.h"
 #include "util/util_progress.h"
@@ -186,6 +187,8 @@ void DeviceDenoiser::denoise_buffer_on_device(Device 
*device,
     task.render_buffers = render_buffers;
   }
   else {
+    DeviceQueue *queue = device->get_denoise_queue();
+
     /* Create buffer which is available by the device used by denoiser. */
 
     /* TODO(sergey): Optimize data transfers. For example, only copy denoising 
related passes,
@@ -203,7 +206,8 @@ void DeviceDenoiser::denoise_buffer_on_device(Device 
*device,
     memcpy(local_render_buffers.buffer.data(),
            render_buffers->buffer.data(),
            sizeof(float) * local_render_buffers.buffer.size());
-    local_render_buffers.copy_to_device();
+
+    queue->copy_to_device(local_render_buffers.buffer);
 
     task.render_buffers = &local_render_buffers;
   }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to