[Bf-blender-cvs] [5b92af33b03] cycles-x: Fix invalid address error in Cycles X GPUDisplay update

Sergey Sharybin noreply at git.blender.org
Thu Sep 16 13:04:01 CEST 2021


Commit: 5b92af33b03085efc21e1ae774d1c295d8ae4934
Author: Sergey Sharybin
Date:   Thu Sep 16 13:00:07 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB5b92af33b03085efc21e1ae774d1c295d8ae4934

Fix invalid address error in Cycles X GPUDisplay update

Make sure no display update happens after full buffer was written.
Makes it possible to free memory used by path trace works without
causing issues.

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

M	intern/cycles/integrator/path_trace_work_gpu.cpp
M	intern/cycles/integrator/render_scheduler.cpp

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

diff --git a/intern/cycles/integrator/path_trace_work_gpu.cpp b/intern/cycles/integrator/path_trace_work_gpu.cpp
index af4d416117a..7f15237ddbf 100644
--- a/intern/cycles/integrator/path_trace_work_gpu.cpp
+++ b/intern/cycles/integrator/path_trace_work_gpu.cpp
@@ -678,6 +678,11 @@ void PathTraceWorkGPU::copy_to_gpu_display(GPUDisplay *gpu_display,
     return;
   }
 
+  if (!buffers_->buffer.device_pointer) {
+    LOG(WARNING) << "Request for GPU display update without allocated render buffers.";
+    return;
+  }
+
   if (should_use_graphics_interop()) {
     if (copy_to_gpu_display_interop(gpu_display, pass_mode, num_samples)) {
       return;
diff --git a/intern/cycles/integrator/render_scheduler.cpp b/intern/cycles/integrator/render_scheduler.cpp
index d996aefa766..5ab671933b2 100644
--- a/intern/cycles/integrator/render_scheduler.cpp
+++ b/intern/cycles/integrator/render_scheduler.cpp
@@ -255,8 +255,12 @@ void RenderScheduler::render_work_reschedule_on_cancel(RenderWork &render_work)
    * Allows to have latest state of tile visible while full buffer is being processed.
    *
    * Note that if there are no samples in the current tile its render buffer might have pixels
-   * remained from previous state. */
-  if (has_rendered_samples) {
+   * remained from previous state.
+   *
+   * If the full result was written, then there is no way any updates were made to the render
+   * buffers. And the buffers might have been freed from the device, so display update is not
+   * possible. */
+  if (has_rendered_samples && !state_.full_frame_was_written) {
     render_work.update_display = true;
   }
 }



More information about the Bf-blender-cvs mailing list