[Bf-blender-cvs] [4fde594fda1] blender-v2.92-release master: Fix T84650: CPU render + OptiX denoiser leaves empty tiles unprocessed

Patrick Mours noreply at git.blender.org
Mon Jan 18 15:31:38 CET 2021


Commit: 4fde594fda13abf98437bc5d0012decc2bd3d5f6
Author: Patrick Mours
Date:   Mon Jan 18 15:30:25 2021 +0100
Branches: blender-v2.92-release master
https://developer.blender.org/rB4fde594fda13abf98437bc5d0012decc2bd3d5f6

Fix T84650: CPU render + OptiX denoiser leaves empty tiles unprocessed

The OptiX denoiser is part of the OptiX device, so to the tile manager looks like a GPU device. As a
result the tile stealing implementation erroneously stole CPU tiles and moved them to that OptiX
device, even though in this configuration the OptiX device was only set up for denoising and not
rendering. Launching the render kernel therefore caused a crash because of a missing AS etc.
This fixes that by ensuring tiles can only be stolen by devices that support render tiles.

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

M	intern/cycles/render/session.cpp

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

diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index a00f8154148..0debc08d911 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -459,7 +459,11 @@ bool Session::acquire_tile(RenderTile &rtile, Device *tile_device, uint tile_typ
   int device_num = device->device_number(tile_device);
 
   while (!tile_manager.next_tile(tile, device_num, tile_types)) {
-    if (steal_tile(rtile, tile_device, tile_lock)) {
+    /* Can only steal tiles on devices that support rendering
+     * This is because denoising tiles cannot be stolen (see below)
+     */
+    if ((tile_types & (RenderTile::PATH_TRACE | RenderTile::BAKE)) &&
+        steal_tile(rtile, tile_device, tile_lock)) {
       return true;
     }



More information about the Bf-blender-cvs mailing list