Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Stockner <lukas.stockner@freenet.de>2018-07-04 15:26:15 +0300
committerLukas Stockner <lukas.stockner@freenet.de>2018-07-04 15:36:01 +0300
commit97a0d6fcc736e604113487196ff3c3578306fc6c (patch)
tree9701746bb422a1ea90a2f1cf8e0b57269021543b /intern/cycles/device/device_cuda.cpp
parentb10c64bd2f1dae93c38e2d1cc656ea08151ab704 (diff)
Cycles Denoising: Refactor denoiser tile handling
This deduplicates the calls for tile (un)mapping and allows to have a target buffer that is different from the source buffer (needed for baking and animation denoising).
Diffstat (limited to 'intern/cycles/device/device_cuda.cpp')
-rw-r--r--intern/cycles/device/device_cuda.cpp17
1 files changed, 5 insertions, 12 deletions
diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp
index 34c64feb80a..1e7883f612b 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -1542,7 +1542,7 @@ public:
&buffer_variance_ptr,
&task->rect,
&task->render_buffer.pass_stride,
- &task->render_buffer.denoising_data_offset};
+ &task->render_buffer.offset};
CUDA_LAUNCH_KERNEL(cuFilterDivideShadow, args);
cuda_assert(cuCtxSynchronize());
@@ -1575,7 +1575,7 @@ public:
&variance_ptr,
&task->rect,
&task->render_buffer.pass_stride,
- &task->render_buffer.denoising_data_offset};
+ &task->render_buffer.offset};
CUDA_LAUNCH_KERNEL(cuFilterGetFeature, args);
cuda_assert(cuCtxSynchronize());
@@ -1613,7 +1613,7 @@ public:
return !have_error();
}
- void denoise(RenderTile &rtile, DenoisingTask& denoising, const DeviceTask &task)
+ void denoise(RenderTile &rtile, DenoisingTask& denoising)
{
denoising.functions.construct_transform = function_bind(&CUDADevice::denoising_construct_transform, this, &denoising);
denoising.functions.reconstruct = function_bind(&CUDADevice::denoising_reconstruct, this, _1, _2, _3, &denoising);
@@ -1627,14 +1627,7 @@ public:
denoising.filter_area = make_int4(rtile.x, rtile.y, rtile.w, rtile.h);
denoising.render_buffer.samples = rtile.sample;
- RenderTile rtiles[9];
- rtiles[4] = rtile;
- task.map_neighbor_tiles(rtiles, this);
- denoising.tiles_from_rendertiles(rtiles);
-
- denoising.run_denoising();
-
- task.unmap_neighbor_tiles(rtiles, this);
+ denoising.run_denoising(&rtile);
}
void path_trace(DeviceTask& task, RenderTile& rtile, device_vector<WorkTile>& work_tiles)
@@ -2087,7 +2080,7 @@ public:
else if(tile.task == RenderTile::DENOISE) {
tile.sample = tile.start_sample + tile.num_samples;
- denoise(tile, denoising, *task);
+ denoise(tile, denoising);
task->update_progress(&tile, tile.w*tile.h);
}