diff options
Diffstat (limited to 'intern/cycles/session')
-rw-r--r-- | intern/cycles/session/session.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/intern/cycles/session/session.cpp b/intern/cycles/session/session.cpp index 65c46d0dd3c..530baa8cafb 100644 --- a/intern/cycles/session/session.cpp +++ b/intern/cycles/session/session.cpp @@ -367,14 +367,26 @@ void Session::draw() int2 Session::get_effective_tile_size() const { + const int image_width = buffer_params_.width; + const int image_height = buffer_params_.height; + /* No support yet for baking with tiles. */ if (!params.use_auto_tile || scene->bake_manager->get_baking()) { - return make_int2(buffer_params_.width, buffer_params_.height); + return make_int2(image_width, image_height); } - /* TODO(sergey): Take available memory into account, and if there is enough memory do not tile - * and prefer optimal performance. */ + const int64_t image_area = static_cast<int64_t>(image_width) * image_height; + + /* TODO(sergey): Take available memory into account, and if there is enough memory do not + * tile and prefer optimal performance. */ + const int tile_size = tile_manager_.compute_render_tile_size(params.tile_size); + const int64_t actual_tile_area = static_cast<int64_t>(tile_size) * tile_size; + + if (actual_tile_area >= image_area) { + return make_int2(image_width, image_height); + } + return make_int2(tile_size, tile_size); } |