diff options
author | Patrick Mours <pmours@nvidia.com> | 2021-01-20 16:12:43 +0300 |
---|---|---|
committer | Patrick Mours <pmours@nvidia.com> | 2021-01-20 16:40:27 +0300 |
commit | 4a09907eab2a3b6da53b1942aebefdcf58bbd604 (patch) | |
tree | a0228e3d1130b01046bb4d04976203a4c2ba0d45 /intern/cycles | |
parent | 87db3423c98ea5d11a6bdbef6658b67970023a4e (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.
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/render/session.cpp | 4 |
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; |