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:
authorPatrick Mours <pmours@nvidia.com>2021-01-20 16:12:43 +0300
committerPatrick Mours <pmours@nvidia.com>2021-01-20 16:40:27 +0300
commit4a09907eab2a3b6da53b1942aebefdcf58bbd604 (patch)
treea0228e3d1130b01046bb4d04976203a4c2ba0d45
parent87db3423c98ea5d11a6bdbef6658b67970023a4e (diff)
Fix T84049: Crash when using Cycles Progressive Refine with OptiX+CPU
Tile stealing may steal a CPU tile buffer and move it to the GPU, but next time around that tile may be re-used on the CPU again (in progressive refinement mode). The buffer would still be on the GPU then though, so is inaccessible to the CPU. As a result Blender crashed when the CPU tried to write results to that tile buffer. This fixes that by ensuring a stolen tile buffer is moved back to the device it is used on before rendering.
-rw-r--r--intern/cycles/render/session.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 0debc08d911..f3cdae77d47 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -540,6 +540,10 @@ bool Session::acquire_tile(RenderTile &rtile, Device *tile_device, uint tile_typ
tile->buffers = new RenderBuffers(tile_device);
tile->buffers->reset(buffer_params);
}
+ else if (tile->buffers->buffer.device != tile_device) {
+ /* Move buffer to current tile device again in case it was stolen before. */
+ tile->buffers->buffer.move_device(tile_device);
+ }
tile->buffers->map_neighbor_copied = false;