Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey@blender.org>2021-09-01 18:43:20 +0300
committerSergey Sharybin <sergey@blender.org>2021-09-02 10:28:42 +0300
commit799a2b07ad13b879d1148b8ffe8ccd8e7e421212 (patch)
tree031d8c4d6b2ecc9267d524c477a7de6f590d489c
parenta8739ae6c2acbf0737113fbebf7e5ac0a942aaee (diff)
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
-rw-r--r--source/blender/render/intern/engine.c20
1 files changed, 13 insertions, 7 deletions
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) {