[Bf-blender-cvs] [a401157cee] cycles_split_kernel: Cycles: Fix buffer offsets in split kernel

Mai Lavelle noreply at git.blender.org
Wed Feb 22 11:20:42 CET 2017


Commit: a401157cee63a9e17e28eb33871eaff5c540dd1b
Author: Mai Lavelle
Date:   Tue Feb 21 19:48:14 2017 -0500
Branches: cycles_split_kernel
https://developer.blender.org/rBa401157cee63a9e17e28eb33871eaff5c540dd1b

Cycles: Fix buffer offsets in split kernel

Was getting wrong renders with multiple devices.

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

M	intern/cycles/kernel/split/kernel_background_buffer_update.h
M	intern/cycles/kernel/split/kernel_data_init.h
M	intern/cycles/kernel/split/kernel_sum_all_radiance.h

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

diff --git a/intern/cycles/kernel/split/kernel_background_buffer_update.h b/intern/cycles/kernel/split/kernel_background_buffer_update.h
index d96e9752b6..07e5522c83 100644
--- a/intern/cycles/kernel/split/kernel_background_buffer_update.h
+++ b/intern/cycles/kernel/split/kernel_background_buffer_update.h
@@ -140,7 +140,7 @@ ccl_device void kernel_background_buffer_update(KernelGlobals *kg)
 	my_sample_tile = 0;
 	initial_rng = rng_state;
 
-	rng_state += tile_x + tile_y*kernel_split_params.stride;
+	rng_state += kernel_split_params.offset + pixel_x + pixel_y*kernel_split_params.stride;
 	per_sample_output_buffers += ((tile_x + (tile_y * stride)) + my_sample_tile) * kernel_data.film.pass_stride;
 
 	if(IS_STATE(ray_state, ray_index, RAY_HIT_BACKGROUND)) {
@@ -195,7 +195,7 @@ ccl_device void kernel_background_buffer_update(KernelGlobals *kg)
 			my_sample_tile = 0;
 
 			/* Remap rng_state according to the current work */
-			rng_state = initial_rng + tile_x + tile_y*kernel_split_params.stride;
+			rng_state = initial_rng + kernel_split_params.offset + pixel_x + pixel_y*kernel_split_params.stride;
 			/* Remap per_sample_output_buffers according to the current work */
 			per_sample_output_buffers = kernel_split_state.per_sample_output_buffers
 				+ ((tile_x + (tile_y * stride)) + my_sample_tile) * kernel_data.film.pass_stride;
diff --git a/intern/cycles/kernel/split/kernel_data_init.h b/intern/cycles/kernel/split/kernel_data_init.h
index a625ae2737..5604363dcd 100644
--- a/intern/cycles/kernel/split/kernel_data_init.h
+++ b/intern/cycles/kernel/split/kernel_data_init.h
@@ -173,7 +173,7 @@ void KERNEL_FUNCTION_FULL_NAME(data_init)(
 	                        ray_index);
 	kernel_split_state.work_array[ray_index] = work_index;
 
-	rng_state += tile_x + tile_y*stride;
+	rng_state += kernel_split_params.offset + pixel_x + pixel_y*stride;
 
 	ccl_global float *per_sample_output_buffers = kernel_split_state.per_sample_output_buffers;
 	per_sample_output_buffers += ((tile_x + (tile_y * stride)) + (my_sample_tile)) * kernel_data.film.pass_stride;
diff --git a/intern/cycles/kernel/split/kernel_sum_all_radiance.h b/intern/cycles/kernel/split/kernel_sum_all_radiance.h
index 485e144257..fdceae2daf 100644
--- a/intern/cycles/kernel/split/kernel_sum_all_radiance.h
+++ b/intern/cycles/kernel/split/kernel_sum_all_radiance.h
@@ -33,11 +33,14 @@ ccl_device void kernel_sum_all_radiance(KernelGlobals *kg)
 	int start_sample = kernel_split_params.start_sample;
 
 	if(x < sw && y < sh) {
-		buffer += (x + y*stride) * (kernel_data.film.pass_stride);
-
 		ccl_global float *per_sample_output_buffer = kernel_split_state.per_sample_output_buffers;
 		per_sample_output_buffer += (x + y * stride) * (kernel_data.film.pass_stride);
 
+		x += kernel_split_params.x;
+		y += kernel_split_params.y;
+
+		buffer += (kernel_split_params.offset + x + y*stride) * (kernel_data.film.pass_stride);
+
 		int pass_stride_iterator = 0;
 		int num_floats = kernel_data.film.pass_stride;




More information about the Bf-blender-cvs mailing list