From 6e268a749fee16b442bcb3fba6cb6e08850d8389 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 21 Sep 2021 17:03:22 +0200 Subject: Fix adaptive sampling artifacts on tile boundaries Implement an overscan support for tiles, so that adaptive sampling can rely on the pixels neighbourhood. Differential Revision: https://developer.blender.org/D12599 --- intern/cycles/integrator/pass_accessor_gpu.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'intern/cycles/integrator/pass_accessor_gpu.cpp') diff --git a/intern/cycles/integrator/pass_accessor_gpu.cpp b/intern/cycles/integrator/pass_accessor_gpu.cpp index eb80ba99655..7b01d061708 100644 --- a/intern/cycles/integrator/pass_accessor_gpu.cpp +++ b/intern/cycles/integrator/pass_accessor_gpu.cpp @@ -43,10 +43,13 @@ void PassAccessorGPU::run_film_convert_kernels(DeviceKernel kernel, KernelFilmConvert kfilm_convert; init_kernel_film_convert(&kfilm_convert, buffer_params, destination); - const int work_size = buffer_params.width * buffer_params.height; + const int work_size = buffer_params.window_width * buffer_params.window_height; const int destination_stride = destination.stride != 0 ? destination.stride : - buffer_params.width; + buffer_params.window_width; + + const int offset = buffer_params.window_x * buffer_params.pass_stride + + buffer_params.window_y * buffer_params.stride * buffer_params.pass_stride; if (destination.d_pixels) { DCHECK_EQ(destination.stride, 0) << "Custom stride for float destination is not implemented."; @@ -55,8 +58,8 @@ void PassAccessorGPU::run_film_convert_kernels(DeviceKernel kernel, const_cast(&destination.d_pixels), const_cast(&render_buffers->buffer.device_pointer), const_cast(&work_size), - const_cast(&buffer_params.width), - const_cast(&buffer_params.offset), + const_cast(&buffer_params.window_width), + const_cast(&offset), const_cast(&buffer_params.stride), const_cast(&destination.offset), const_cast(&destination_stride)}; @@ -70,8 +73,8 @@ void PassAccessorGPU::run_film_convert_kernels(DeviceKernel kernel, const_cast(&destination.d_pixels_half_rgba), const_cast(&render_buffers->buffer.device_pointer), const_cast(&work_size), - const_cast(&buffer_params.width), - const_cast(&buffer_params.offset), + const_cast(&buffer_params.window_width), + const_cast(&offset), const_cast(&buffer_params.stride), const_cast(&destination.offset), const_cast(&destination_stride)}; -- cgit v1.2.3