[Bf-blender-cvs] [e597e6aab28] cycles-x: Fix persistent data not allowing to change sample count and time limit

Sergey Sharybin noreply at git.blender.org
Fri Sep 17 10:43:45 CEST 2021


Commit: e597e6aab28dd03f4a736ab9f324d6a7726842a0
Author: Sergey Sharybin
Date:   Thu Sep 16 15:37:51 2021 +0200
Branches: cycles-x
https://developer.blender.org/rBe597e6aab28dd03f4a736ab9f324d6a7726842a0

Fix persistent data not allowing to change sample count and time limit

The root cause was that `session->params` were never updated to the new
parameters.

Made it so `session->reset()` will make sure the session is fully up to
date with the desired parameters.

Investigation by @dingto, code by self.

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

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

M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/render/session.cpp
M	intern/cycles/render/session.h

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

diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 1cfb7d062eb..ea365617590 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -122,10 +122,10 @@ BlenderSession::~BlenderSession()
 
 void BlenderSession::create_session()
 {
-  SessionParams session_params = BlenderSync::get_session_params(
+  const SessionParams session_params = BlenderSync::get_session_params(
       b_engine, b_userpref, b_scene, background);
-  SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background);
-  bool session_pause = BlenderSync::get_session_pause(b_scene, background);
+  const SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background);
+  const bool session_pause = BlenderSync::get_session_pause(b_scene, background);
 
   /* reset status/progress */
   last_status = "";
@@ -155,9 +155,9 @@ void BlenderSession::create_session()
   }
 
   /* set buffer parameters */
-  BufferParams buffer_params = BlenderSync::get_buffer_params(
+  const BufferParams buffer_params = BlenderSync::get_buffer_params(
       b_v3d, b_rv3d, scene->camera, width, height);
-  session->reset(buffer_params, session_params.samples);
+  session->reset(session_params, buffer_params);
 
   /* Create GPU display. */
   if (!b_engine.is_preview() && !headless) {
@@ -215,9 +215,9 @@ void BlenderSession::reset_session(BL::BlendData &b_data, BL::Depsgraph &b_depsg
     return;
   }
 
-  SessionParams session_params = BlenderSync::get_session_params(
+  const SessionParams session_params = BlenderSync::get_session_params(
       b_engine, b_userpref, b_scene, background);
-  SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background);
+  const SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background);
 
   if (scene->params.modified(scene_params) || session->params.modified(session_params) ||
       !this->b_render.use_persistent_data()) {
@@ -254,9 +254,9 @@ void BlenderSession::reset_session(BL::BlendData &b_data, BL::Depsgraph &b_depsg
 
   BL::SpaceView3D b_null_space_view3d(PointerRNA_NULL);
   BL::RegionView3D b_null_region_view3d(PointerRNA_NULL);
-  BufferParams buffer_params = BlenderSync::get_buffer_params(
+  const BufferParams buffer_params = BlenderSync::get_buffer_params(
       b_null_space_view3d, b_null_region_view3d, scene->camera, width, height);
-  session->reset(buffer_params, session_params.samples);
+  session->reset(session_params, buffer_params);
 
   /* reset time */
   start_resize_time = 0.0;
@@ -424,7 +424,7 @@ void BlenderSession::render(BL::Depsgraph &b_depsgraph_)
   BL::ViewLayer b_view_layer = b_depsgraph.view_layer_eval();
 
   /* get buffer parameters */
-  SessionParams session_params = BlenderSync::get_session_params(
+  const SessionParams session_params = BlenderSync::get_session_params(
       b_engine, b_userpref, b_scene, background);
   BufferParams buffer_params = BlenderSync::get_buffer_params(
       b_v3d, b_rv3d, scene->camera, width, height);
@@ -487,20 +487,19 @@ void BlenderSession::render(BL::Depsgraph &b_depsgraph_)
     }
 
     /* Update number of samples per layer. */
-    int samples = sync->get_layer_samples();
-    bool bound_samples = sync->get_layer_bound_samples();
-    int effective_layer_samples;
+    const int samples = sync->get_layer_samples();
+    const bool bound_samples = sync->get_layer_bound_samples();
 
-    if (samples != 0 && (!bound_samples || (samples < session_params.samples)))
-      effective_layer_samples = samples;
-    else
-      effective_layer_samples = session_params.samples;
+    SessionParams effective_session_params = session_params;
+    if (samples != 0 && (!bound_samples || (samples < session_params.samples))) {
+      effective_session_params.samples = samples;
+    }
 
     /* Update tile manager if we're doing resumable render. */
-    update_resumable_tile_manager(effective_layer_samples);
+    update_resumable_tile_manager(effective_session_params.samples);
 
     /* Update session itself. */
-    session->reset(buffer_params, effective_layer_samples);
+    session->reset(effective_session_params, buffer_params);
 
     /* render */
     if (!b_engine.is_preview() && background && print_render_stats) {
@@ -662,7 +661,7 @@ void BlenderSession::bake(BL::Depsgraph &b_depsgraph_,
 
   if (object_found && !session->progress.get_cancel()) {
     /* Get session and buffer parameters. */
-    SessionParams session_params = BlenderSync::get_session_params(
+    const SessionParams session_params = BlenderSync::get_session_params(
         b_engine, b_userpref, b_scene, background);
 
     BufferParams buffer_params;
@@ -670,7 +669,7 @@ void BlenderSession::bake(BL::Depsgraph &b_depsgraph_,
     buffer_params.height = bake_height;
 
     /* Update session. */
-    session->reset(buffer_params, session_params.samples);
+    session->reset(session_params, buffer_params);
 
     session->progress.set_update_callback(
         function_bind(&BlenderSession::update_bake_progress, this));
@@ -728,10 +727,10 @@ void BlenderSession::synchronize(BL::Depsgraph &b_depsgraph_)
     return;
 
   /* on session/scene parameter changes, we recreate session entirely */
-  SessionParams session_params = BlenderSync::get_session_params(
+  const SessionParams session_params = BlenderSync::get_session_params(
       b_engine, b_userpref, b_scene, background);
-  SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background);
-  bool session_pause = BlenderSync::get_session_pause(b_scene, background);
+  const SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background);
+  const bool session_pause = BlenderSync::get_session_pause(b_scene, background);
 
   if (session->params.modified(session_params) || scene->params.modified(scene_params)) {
     free_session();
@@ -772,12 +771,12 @@ void BlenderSession::synchronize(BL::Depsgraph &b_depsgraph_)
     sync->sync_camera(b_render, b_camera_override, width, height, "");
 
   /* get buffer parameters */
-  BufferParams buffer_params = BlenderSync::get_buffer_params(
+  const BufferParams buffer_params = BlenderSync::get_buffer_params(
       b_v3d, b_rv3d, scene->camera, width, height);
 
   /* reset if needed */
   if (scene->need_reset()) {
-    session->reset(buffer_params, session_params.samples);
+    session->reset(session_params, buffer_params);
 
     /* After session reset, so device is not accessing image data anymore. */
     builtin_images_load();
@@ -874,14 +873,14 @@ void BlenderSession::view_draw(int w, int h)
 
     /* reset if requested */
     if (reset) {
-      SessionParams session_params = BlenderSync::get_session_params(
+      const SessionParams session_params = BlenderSync::get_session_params(
           b_engine, b_userpref, b_scene, background);
-      BufferParams buffer_params = BlenderSync::get_buffer_params(
+      const BufferParams buffer_params = BlenderSync::get_buffer_params(
           b_v3d, b_rv3d, scene->camera, width, height);
-      bool session_pause = BlenderSync::get_session_pause(b_scene, background);
+      const bool session_pause = BlenderSync::get_session_pause(b_scene, background);
 
       if (session_pause == false) {
-        session->reset(buffer_params, session_params.samples);
+        session->reset(session_params, buffer_params);
         start_resize_time = 0.0;
       }
     }
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 53a4cd633be..41a6893b713 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -50,7 +50,6 @@ Session::Session(const SessionParams &params_, const SceneParams &scene_params)
   session_thread_ = nullptr;
 
   delayed_reset_.do_reset = false;
-  delayed_reset_.samples = 0;
 
   pause_ = false;
   cancel_ = false;
@@ -392,11 +391,12 @@ void Session::do_delayed_reset()
   }
   delayed_reset_.do_reset = false;
 
-  buffer_params_ = delayed_reset_.params;
+  params = delayed_reset_.session_params;
+  buffer_params_ = delayed_reset_.buffer_params;
 
   /* Tile and work scheduling. */
   tile_manager_.reset(buffer_params_, get_effective_tile_size());
-  render_scheduler_.reset(buffer_params_, delayed_reset_.samples);
+  render_scheduler_.reset(buffer_params_, params.samples);
 
   /* Passes. */
   /* When multiple tiles are used SAMPLE_COUNT pass is used to keep track of possible partial
@@ -411,8 +411,7 @@ void Session::do_delayed_reset()
 
   /* Progress. */
   progress.reset_sample();
-  progress.set_total_pixel_samples(delayed_reset_.params.width * delayed_reset_.params.height *
-                                   delayed_reset_.samples);
+  progress.set_total_pixel_samples(buffer_params_.width * buffer_params_.height * params.samples);
 
   if (!params.background) {
     progress.set_start_time();
@@ -420,15 +419,15 @@ void Session::do_delayed_reset()
   progress.set_render_start_time();
 }
 
-void Session::reset(BufferParams &buffer_params, int samples)
+void Session::reset(const SessionParams &session_params, const BufferParams &buffer_params)
 {
   {
     thread_scoped_lock reset_lock(delayed_reset_.mutex);
     thread_scoped_lock pause_lock(pause_mutex_);
 
-    delayed_reset_.params = buffer_params;
-    delayed_reset_.samples = samples;
     delayed_reset_.do_reset = true;
+    delayed_reset_.session_params = session_params;
+    delayed_reset_.buffer_params = buffer_params;
 
     path_trace_->cancel();
   }
diff --git a/intern/cycles/render/session.h b/intern/cycles/render/session.h
index 01f6aa4ed84..fe3303fb8a3 100644
--- a/intern/cycles/render/session.h
+++ b/intern/cycles/render/session.h
@@ -131,7 +131,7 @@ class Session {
   void wait();
 
   bool ready_to_reset();
-  void reset(BufferParams &params, int samples);
+  void reset(const SessionParams &session_params, const BufferParams &buffer_params);
 
   void set_pause(bool pause);
 
@@ -168,8 +168,8 @@ class Session {
   struct DelayedReset {
     thread_mutex mutex;
     bool do_reset;
-    BufferParams params;
-    int samples;
+    SessionParams session_params;
+    BufferParams buffer_params;
   } delayed_reset_;
 
   void run();



More information about the Bf-blender-cvs mailing list