From 688e5c6d3895a8f6b5aec06977c9dcb4b00e0a76 Mon Sep 17 00:00:00 2001 From: Lukas Stockner Date: Mon, 11 Jan 2021 20:42:47 +0100 Subject: Fix T82351: Cycles: Tile stealing glitches with adaptive sampling In my testing this works, but it requires me to remove the min(start_sample...) part in the adaptive sampling kernel, and I assume there's a reason why it was there? Reviewed By: brecht Maniphest Tasks: T82351 Differential Revision: https://developer.blender.org/D9445 --- intern/cycles/device/cuda/device_cuda_impl.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'intern/cycles/device/cuda/device_cuda_impl.cpp') diff --git a/intern/cycles/device/cuda/device_cuda_impl.cpp b/intern/cycles/device/cuda/device_cuda_impl.cpp index 48151365e5d..307d1469ba5 100644 --- a/intern/cycles/device/cuda/device_cuda_impl.cpp +++ b/intern/cycles/device/cuda/device_cuda_impl.cpp @@ -1929,18 +1929,19 @@ void CUDADevice::render(DeviceTask &task, RenderTile &rtile, device_vectorw * wtile->h); - if (task.adaptive_sampling.use) { - step_samples = task.adaptive_sampling.align_static_samples(step_samples); - } /* Render all samples. */ int start_sample = rtile.start_sample; int end_sample = rtile.start_sample + rtile.num_samples; - for (int sample = start_sample; sample < end_sample; sample += step_samples) { + for (int sample = start_sample; sample < end_sample;) { /* Setup and copy work tile to device. */ wtile->start_sample = sample; - wtile->num_samples = min(step_samples, end_sample - sample); + wtile->num_samples = step_samples; + if (task.adaptive_sampling.use) { + wtile->num_samples = task.adaptive_sampling.align_samples(sample, step_samples); + } + wtile->num_samples = min(wtile->num_samples, end_sample - sample); work_tiles.copy_to_device(); CUdeviceptr d_work_tiles = (CUdeviceptr)work_tiles.device_pointer; @@ -1962,7 +1963,8 @@ void CUDADevice::render(DeviceTask &task, RenderTile &rtile, device_vectornum_samples; + sample += wtile->num_samples; + rtile.sample = sample; task.update_progress(&rtile, rtile.w * rtile.h * wtile->num_samples); if (task.get_cancel()) { -- cgit v1.2.3