[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