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.vfx@gmail.com>2012-10-24 18:43:29 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-10-24 18:43:29 +0400
commitd4ee07537e19902c18f6ae8cd5f8335e40a8b3dc (patch)
treeb0b337dd8fe112851b09fd940dd4d101aad103b5 /intern/cycles/render/tile.h
parente2874259aeab785d6f26a86a2674dcc77156a25b (diff)
Fix #32951: Progressive refine crashing Blender when used with multiple cuda devices
This time issue was caused by Save Buffers enabled and the reason blender crashed was tiles generated by cycles didn't match tiles generated by openexr. Currently solved it in a way that background rendering will allocate tiles in the same way render parts are generated in blender. Viewport rendering will still be using sliced image, but it's more tricky to change and it's no so big deal for now.
Diffstat (limited to 'intern/cycles/render/tile.h')
-rw-r--r--intern/cycles/render/tile.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/intern/cycles/render/tile.h b/intern/cycles/render/tile.h
index 3ccc73deed1..ad1e84cfb7b 100644
--- a/intern/cycles/render/tile.h
+++ b/intern/cycles/render/tile.h
@@ -59,7 +59,7 @@ public:
} state;
TileManager(bool progressive, int num_samples, int2 tile_size, int start_resolution,
- int preserve_tile_device, int num_devices = 1);
+ bool preserve_tile_device, bool background, int num_devices = 1);
~TileManager();
void reset(BufferParams& params, int num_samples);
@@ -86,6 +86,22 @@ protected:
*/
bool preserve_tile_device;
+ /* for background render tiles should exactly match render parts generated from
+ * blender side, which means image first gets split into tiles and then tiles are
+ * assigning to render devices
+ *
+ * however viewport rendering expects tiles to be allocated in a special way,
+ * meaning image is being sliced horizontally first and every device handles
+ * it's own slice
+ */
+ bool background;
+
+ /* splits image into tiles and assigns equal amount of tiles to every render device */
+ void gen_tiles_global();
+
+ /* slices image into as much pieces as how many devices are rendering this image */
+ void gen_tiles_sliced();
+
list<Tile>::iterator next_center_tile(int device = 0);
};