[Bf-blender-cvs] [23069480ed8] cycles-x: Cycles X: Make temp CPU-side render buffers creation reusable

Sergey Sharybin noreply at git.blender.org
Fri Jul 2 18:01:22 CEST 2021


Commit: 23069480ed89e3ddf2b02e9e04b4af1065d6018b
Author: Sergey Sharybin
Date:   Wed Jun 30 17:31:02 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB23069480ed89e3ddf2b02e9e04b4af1065d6018b

Cycles X: Make temp CPU-side render buffers creation reusable

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

M	intern/cycles/integrator/path_trace.cpp

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

diff --git a/intern/cycles/integrator/path_trace.cpp b/intern/cycles/integrator/path_trace.cpp
index b2baf60d9d8..366030df6aa 100644
--- a/intern/cycles/integrator/path_trace.cpp
+++ b/intern/cycles/integrator/path_trace.cpp
@@ -30,6 +30,28 @@
 
 CCL_NAMESPACE_BEGIN
 
+namespace {
+
+class TempCPURenderBuffers {
+ public:
+  /* `device_template` is used to access stats and profiler. */
+  explicit TempCPURenderBuffers(Device *device_template)
+  {
+    vector<DeviceInfo> cpu_devices;
+    device_cpu_info(cpu_devices);
+
+    device.reset(
+        device_cpu_create(cpu_devices[0], device_template->stats, device_template->profiler));
+
+    buffers = make_unique<RenderBuffers>(device.get());
+  }
+
+  unique_ptr<Device> device;
+  unique_ptr<RenderBuffers> buffers;
+};
+
+}  // namespace
+
 PathTrace::PathTrace(Device *device, DeviceScene *device_scene, RenderScheduler &render_scheduler)
     : device_(device), render_scheduler_(render_scheduler)
 {
@@ -396,38 +418,28 @@ void PathTrace::denoise(const RenderWork &render_work)
 
   RenderBuffers *buffer_to_denoise = nullptr;
 
-  unique_ptr<Device> big_tile_device;
-  unique_ptr<RenderBuffers> big_tile_render_buffers;
+  unique_ptr<TempCPURenderBuffers> big_tile_cpu_buffers;
 
   if (path_trace_works_.size() == 1) {
     buffer_to_denoise = path_trace_works_.front()->get_render_buffers();
   }
   else {
     /* TODO(sergey): Try to reuse the buffer as much as possible. */
-    /* TODO(sergey): Split the functionality into a separate function. */
-
-    /* Used to access stats and profiler. */
-    Device *device_template = path_trace_works_.front()->get_device();
-
     /* TODO(sergey): Share same device as what will be used by the denoiser. */
-    vector<DeviceInfo> cpu_devices;
-    device_cpu_info(cpu_devices);
-    big_tile_device.reset(
-        device_cpu_create(cpu_devices[0], device_template->stats, device_template->profiler));
 
-    big_tile_render_buffers = make_unique<RenderBuffers>(big_tile_device.get());
-    big_tile_render_buffers->reset(render_state_.effective_big_tile_params);
+    big_tile_cpu_buffers = make_unique<TempCPURenderBuffers>(device_);
+    big_tile_cpu_buffers->buffers->reset(render_state_.effective_big_tile_params);
 
-    buffer_to_denoise = big_tile_render_buffers.get();
+    buffer_to_denoise = big_tile_cpu_buffers->buffers.get();
 
-    copy_to_render_buffers(big_tile_render_buffers.get());
+    copy_to_render_buffers(big_tile_cpu_buffers->buffers.get());
   }
 
   denoiser_->denoise_buffer(
       render_state_.effective_big_tile_params, buffer_to_denoise, get_num_samples_in_buffer());
 
-  if (big_tile_render_buffers) {
-    copy_from_render_buffers(big_tile_render_buffers.get());
+  if (big_tile_cpu_buffers) {
+    copy_from_render_buffers(big_tile_cpu_buffers->buffers.get());
   }
 
   render_scheduler_.report_denoise_time(render_work, time_dt() - start_time);



More information about the Bf-blender-cvs mailing list