[Bf-blender-cvs] [173aeaf] soc-2016-cycles_denoising: Cycles: Fix border rendering with denoising enabled

Lukas Stockner noreply at git.blender.org
Wed Jul 6 04:28:48 CEST 2016


Commit: 173aeafc2765c3d10be0c953ba4b678f520349d9
Author: Lukas Stockner
Date:   Mon Jul 4 15:52:10 2016 +0200
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB173aeafc2765c3d10be0c953ba4b678f520349d9

Cycles: Fix border rendering with denoising enabled

The code assumed that the rendered image starts at (0, 0), which is of course wrong for border rendering.

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

M	intern/cycles/render/session.cpp

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

diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index ce5c962..a6a99f7 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -506,12 +506,16 @@ void Session::get_neighbor_tiles(RenderTile *tiles)
 {
 	int center_idx = tiles[4].tile_index;
 	assert(tile_manager.state.tiles[center_idx].state == Tile::DENOISE);
-	int width = tile_manager.params.width, height = tile_manager.params.height;
+	BufferParams buffer_params = tile_manager.params;
+	int4 image_region = make_int4(buffer_params.full_x, buffer_params.full_y,
+	                              buffer_params.full_x + buffer_params.width, buffer_params.full_y + buffer_params.height);
+
 	for(int dy = -1, i = 0; dy <= 1; dy++) {
 		for(int dx = -1; dx <= 1; dx++, i++) {
 			int px = tiles[4].x + dx*params.tile_size.x;
 			int py = tiles[4].y + dy*params.tile_size.y;
-			if(px >= 0 && py >= 0 && px < width && py < height) {
+			if(px >= image_region.x && py >= image_region.y &&
+			   px <  image_region.z && py <  image_region.w) {
 				int tile_index = center_idx + dy*tile_manager.state.tile_stride + dx;
 				Tile *tile = &tile_manager.state.tiles[tile_index];
 				assert(tile->buffers);
@@ -522,7 +526,6 @@ void Session::get_neighbor_tiles(RenderTile *tiles)
 				tiles[i].w = tile->w;
 				tiles[i].h = tile->h;
 
-				BufferParams buffer_params = tile_manager.params;
 				buffer_params.full_x = tiles[i].x;
 				buffer_params.full_y = tiles[i].y;
 				buffer_params.width  = tiles[i].w;
@@ -532,8 +535,8 @@ void Session::get_neighbor_tiles(RenderTile *tiles)
 			}
 			else {
 				tiles[i].buffer = (device_ptr)NULL;
-				tiles[i].x = clamp(px, 0, width);
-				tiles[i].y = clamp(py, 0, height);
+				tiles[i].x = clamp(px, image_region.x, image_region.z);
+				tiles[i].y = clamp(py, image_region.y, image_region.w);
 				tiles[i].w = tiles[i].h = 0;
 			}
 		}




More information about the Bf-blender-cvs mailing list