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.
This commit is contained in:
Patrick Mours
2021-01-20 14:12:43 +01:00
parent 87db3423c9
commit 4a09907eab

View File

@@ -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;