[Bf-blender-cvs] [a418d1bc9e5] cycles-x: Cycles X: Move need-to-zero-render-buffers check to render scheduler

Sergey Sharybin noreply at git.blender.org
Tue Jun 29 12:20:22 CEST 2021


Commit: a418d1bc9e5ca25e46d131d5fd608adc8f259f9e
Author: Sergey Sharybin
Date:   Mon Jun 21 17:10:52 2021 +0200
Branches: cycles-x
https://developer.blender.org/rBa418d1bc9e5ca25e46d131d5fd608adc8f259f9e

Cycles X: Move need-to-zero-render-buffers check to render scheduler

No functional changes, but localizes handling of the render buffers,
helping with the coming further development.

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

M	intern/cycles/integrator/path_trace.cpp
M	intern/cycles/integrator/path_trace.h
M	intern/cycles/integrator/render_scheduler.cpp
M	intern/cycles/integrator/render_scheduler.h

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

diff --git a/intern/cycles/integrator/path_trace.cpp b/intern/cycles/integrator/path_trace.cpp
index a3f34346764..42efb845c66 100644
--- a/intern/cycles/integrator/path_trace.cpp
+++ b/intern/cycles/integrator/path_trace.cpp
@@ -134,15 +134,11 @@ void PathTrace::render(const RenderWork &render_work)
 
 void PathTrace::render_pipeline(RenderWork render_work)
 {
-  /* TODO(sergey): For truly resumable render might need to avoid zero-ing. */
-  if (render_work.path_trace.start_sample == render_scheduler_.get_start_sample()) {
-    full_render_buffers_->zero();
-    buffer_read();
-  }
-
   render_init_kernel_execution();
   render_update_resolution_divider(render_work.resolution_divider);
 
+  init_render_buffers(render_work);
+
   path_trace(render_work);
   if (is_cancel_requested()) {
     return;
@@ -174,6 +170,16 @@ void PathTrace::render_init_kernel_execution()
   }
 }
 
+void PathTrace::init_render_buffers(const RenderWork &render_work)
+{
+  if (!render_work.init_render_buffers) {
+    return;
+  }
+
+  full_render_buffers_->zero();
+  buffer_read();
+}
+
 void PathTrace::path_trace(RenderWork &render_work)
 {
   if (!render_work.path_trace.num_samples) {
diff --git a/intern/cycles/integrator/path_trace.h b/intern/cycles/integrator/path_trace.h
index 6db8b286cbb..4018f582916 100644
--- a/intern/cycles/integrator/path_trace.h
+++ b/intern/cycles/integrator/path_trace.h
@@ -158,6 +158,7 @@ class PathTrace {
    *
    * Note that some steps might modify the work, forcing some steps to happen within this iteration
    * of rendering. */
+  void init_render_buffers(const RenderWork &render_work);
   void path_trace(RenderWork &render_work);
   void adaptive_sample(RenderWork &render_work);
   void denoise(const RenderWork &render_work);
diff --git a/intern/cycles/integrator/render_scheduler.cpp b/intern/cycles/integrator/render_scheduler.cpp
index 06fcc1d0b80..8e9d4019899 100644
--- a/intern/cycles/integrator/render_scheduler.cpp
+++ b/intern/cycles/integrator/render_scheduler.cpp
@@ -223,6 +223,8 @@ RenderWork RenderScheduler::get_render_work()
   render_work.path_trace.start_sample = get_start_sample_to_path_trace();
   render_work.path_trace.num_samples = get_num_samples_to_path_trace();
 
+  render_work.init_render_buffers = (render_work.path_trace.start_sample == get_start_sample());
+
   /* NOTE: Advance number of samples now, so that filter and denoising check can see that all the
    * samples are rendered. */
   state_.num_rendered_samples += render_work.path_trace.num_samples;
diff --git a/intern/cycles/integrator/render_scheduler.h b/intern/cycles/integrator/render_scheduler.h
index bdf4cde40b3..ffb5ee8c947 100644
--- a/intern/cycles/integrator/render_scheduler.h
+++ b/intern/cycles/integrator/render_scheduler.h
@@ -27,6 +27,11 @@ class RenderWork {
  public:
   int resolution_divider = 1;
 
+  /* Initialize render buffers.
+   * Includes steps like zero-ing the buffer on the device, and optional reading of pixels from the
+   * baking target. */
+  bool init_render_buffers = false;
+
   /* Path tracing samples information. */
   struct {
     int start_sample = 0;



More information about the Bf-blender-cvs mailing list