[Bf-blender-cvs] [799a2b07ad1] master: Fix possible missing render result with `update_result`

Sergey Sharybin noreply at git.blender.org
Thu Sep 2 10:23:43 CEST 2021


Commit: 799a2b07ad13b879d1148b8ffe8ccd8e7e421212
Author: Sergey Sharybin
Date:   Wed Sep 1 17:43:20 2021 +0200
Branches: master
https://developer.blender.org/rB799a2b07ad13b879d1148b8ffe8ccd8e7e421212

Fix possible missing render result with `update_result`

Need to ensure render result's pixels are allocated prior to merge.

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

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

M	source/blender/render/intern/engine.c

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

diff --git a/source/blender/render/intern/engine.c b/source/blender/render/intern/engine.c
index 481a6662cc0..5728b784714 100644
--- a/source/blender/render/intern/engine.c
+++ b/source/blender/render/intern/engine.c
@@ -365,6 +365,17 @@ RenderResult *RE_engine_begin_result(
   return result;
 }
 
+static void re_ensure_passes_allocated_thread_safe(Render *re)
+{
+  if (!re->result->passes_allocated) {
+    BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
+    if (!re->result->passes_allocated) {
+      render_result_passes_allocated_ensure(re->result);
+    }
+    BLI_rw_mutex_unlock(&re->resultmutex);
+  }
+}
+
 void RE_engine_update_result(RenderEngine *engine, RenderResult *result)
 {
   if (engine->bake.pixels) {
@@ -375,6 +386,7 @@ void RE_engine_update_result(RenderEngine *engine, RenderResult *result)
   Render *re = engine->re;
 
   if (result) {
+    re_ensure_passes_allocated_thread_safe(re);
     render_result_merge(re->result, result);
     result->renlay = result->layers.first; /* weak, draws first layer always */
     re->display_update(re->duh, result, NULL);
@@ -412,13 +424,7 @@ void RE_engine_end_result(
     return;
   }
 
-  if (!re->result->passes_allocated) {
-    BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
-    if (!re->result->passes_allocated) {
-      render_result_passes_allocated_ensure(re->result);
-    }
-    BLI_rw_mutex_unlock(&re->resultmutex);
-  }
+  re_ensure_passes_allocated_thread_safe(re);
 
   /* merge. on break, don't merge in result for preview renders, looks nicer */
   if (!highlight) {



More information about the Bf-blender-cvs mailing list