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
path: root/intern
diff options
context:
space:
mode:
authorSergey Sharybin <sergey@blender.org>2021-10-07 17:19:50 +0300
committerSergey Sharybin <sergey@blender.org>2021-10-07 17:21:28 +0300
commit0d4c53ecfebb49a8c4e00f984756e0d243968abe (patch)
treee7401754836249a39568ca27e12fae2bfa185865 /intern
parent0f58cc15943e0cd852628e3cac915fda930510bc (diff)
Fix wrong tile size calculated in Cycles
Was causing extra overscan pixels, and was confusing multiple workers check after fix T91994.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/render/tile.cpp25
1 files changed, 11 insertions, 14 deletions
diff --git a/intern/cycles/render/tile.cpp b/intern/cycles/render/tile.cpp
index 75c1f78982d..3070e93eff3 100644
--- a/intern/cycles/render/tile.cpp
+++ b/intern/cycles/render/tile.cpp
@@ -411,25 +411,22 @@ Tile TileManager::get_tile_for_index(int index) const
const int tile_index_y = index / tile_state_.num_tiles_x;
const int tile_index_x = index - tile_index_y * tile_state_.num_tiles_x;
- const int tile_x = tile_index_x * tile_size_.x;
- const int tile_y = tile_index_y * tile_size_.y;
+ const int tile_window_x = tile_index_x * tile_size_.x;
+ const int tile_window_y = tile_index_y * tile_size_.y;
Tile tile;
- tile.x = tile_x - overscan_;
- tile.y = tile_y - overscan_;
- tile.width = tile_size_.x + 2 * overscan_;
- tile.height = tile_size_.y + 2 * overscan_;
+ tile.x = max(0, tile_window_x - overscan_);
+ tile.y = max(0, tile_window_y - overscan_);
- tile.x = max(tile.x, 0);
- tile.y = max(tile.y, 0);
- tile.width = min(tile.width, buffer_params_.width - tile.x);
- tile.height = min(tile.height, buffer_params_.height - tile.y);
+ tile.window_x = tile_window_x - tile.x;
+ tile.window_y = tile_window_y - tile.y;
+ tile.window_width = min(tile_size_.x, buffer_params_.width - tile_window_x);
+ tile.window_height = min(tile_size_.y, buffer_params_.height - tile_window_y);
- tile.window_x = tile_x - tile.x;
- tile.window_y = tile_y - tile.y;
- tile.window_width = min(tile_size_.x, buffer_params_.width - (tile.x + tile.window_x));
- tile.window_height = min(tile_size_.y, buffer_params_.height - (tile.y + tile.window_y));
+ tile.width = min(buffer_params_.width - tile.x, tile.window_x + tile.window_width + overscan_);
+ tile.height = min(buffer_params_.height - tile.y,
+ tile.window_y + tile.window_height + overscan_);
return tile;
}