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:
Diffstat (limited to 'intern/cycles/device/device_cpu.cpp')
-rw-r--r--intern/cycles/device/device_cpu.cpp46
1 files changed, 12 insertions, 34 deletions
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index 6be60f8bbb6..be0dcc20755 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -179,8 +179,8 @@ public:
KernelFunctions<void(*)(KernelGlobals *, uchar4 *, float *, float, int, int, int, int)> convert_to_byte_kernel;
KernelFunctions<void(*)(KernelGlobals *, uint4 *, float4 *, int, int, int, int, int)> shader_kernel;
- KernelFunctions<void(*)(int, TilesInfo*, int, int, float*, float*, float*, float*, float*, int*, int, int)> filter_divide_shadow_kernel;
- KernelFunctions<void(*)(int, TilesInfo*, int, int, int, int, float*, float*, int*, int, int)> filter_get_feature_kernel;
+ KernelFunctions<void(*)(int, TileInfo*, int, int, float*, float*, float*, float*, float*, int*, int, int)> filter_divide_shadow_kernel;
+ KernelFunctions<void(*)(int, TileInfo*, int, int, int, int, float*, float*, int*, int, int)> filter_get_feature_kernel;
KernelFunctions<void(*)(int, int, float*, float*, float*, float*, int*, int)> filter_detect_outliers_kernel;
KernelFunctions<void(*)(int, int, float*, float*, float*, float*, int*, int)> filter_combine_halves_kernel;
@@ -459,18 +459,6 @@ public:
}
};
- bool denoising_set_tiles(device_ptr *buffers, DenoisingTask *task)
- {
- TilesInfo *tiles = (TilesInfo*) task->tiles_mem.host_pointer;
- for(int i = 0; i < 9; i++) {
- tiles->buffers[i] = buffers[i];
- }
-
- task->tiles_mem.copy_to_device();
-
- return true;
- }
-
bool denoising_non_local_means(device_ptr image_ptr, device_ptr guide_ptr, device_ptr variance_ptr, device_ptr out_ptr,
DenoisingTask *task)
{
@@ -626,7 +614,7 @@ public:
for(int y = task->rect.y; y < task->rect.w; y++) {
for(int x = task->rect.x; x < task->rect.z; x++) {
filter_divide_shadow_kernel()(task->render_buffer.samples,
- task->tiles,
+ task->tile_info,
x, y,
(float*) a_ptr,
(float*) b_ptr,
@@ -635,7 +623,7 @@ public:
(float*) buffer_variance_ptr,
&task->rect.x,
task->render_buffer.pass_stride,
- task->render_buffer.denoising_data_offset);
+ task->render_buffer.offset);
}
}
return true;
@@ -650,7 +638,7 @@ public:
for(int y = task->rect.y; y < task->rect.w; y++) {
for(int x = task->rect.x; x < task->rect.z; x++) {
filter_get_feature_kernel()(task->render_buffer.samples,
- task->tiles,
+ task->tile_info,
mean_offset,
variance_offset,
x, y,
@@ -658,7 +646,7 @@ public:
(float*) variance_ptr,
&task->rect.x,
task->render_buffer.pass_stride,
- task->render_buffer.denoising_data_offset);
+ task->render_buffer.offset);
}
}
return true;
@@ -711,7 +699,7 @@ public:
}
}
- void denoise(DeviceTask &task, DenoisingTask& denoising, RenderTile &tile)
+ void denoise(DenoisingTask& denoising, RenderTile &tile)
{
tile.sample = tile.start_sample + tile.num_samples;
@@ -722,23 +710,11 @@ public:
denoising.functions.combine_halves = function_bind(&CPUDevice::denoising_combine_halves, this, _1, _2, _3, _4, _5, _6, &denoising);
denoising.functions.get_feature = function_bind(&CPUDevice::denoising_get_feature, this, _1, _2, _3, _4, &denoising);
denoising.functions.detect_outliers = function_bind(&CPUDevice::denoising_detect_outliers, this, _1, _2, _3, _4, &denoising);
- denoising.functions.set_tiles = function_bind(&CPUDevice::denoising_set_tiles, this, _1, &denoising);
denoising.filter_area = make_int4(tile.x, tile.y, tile.w, tile.h);
denoising.render_buffer.samples = tile.sample;
- RenderTile rtiles[9];
- rtiles[4] = tile;
- task.map_neighbor_tiles(rtiles, this);
- denoising.tiles_from_rendertiles(rtiles);
-
- denoising.init_from_devicetask(task);
-
- denoising.run_denoising();
-
- task.unmap_neighbor_tiles(rtiles, this);
-
- task.update_progress(&tile, tile.w*tile.h);
+ denoising.run_denoising(&tile);
}
void thread_render(DeviceTask& task)
@@ -766,7 +742,7 @@ public:
}
RenderTile tile;
- DenoisingTask denoising(this);
+ DenoisingTask denoising(this, task);
while(task.acquire_tile(this, tile)) {
if(tile.task == RenderTile::PATH_TRACE) {
@@ -779,7 +755,9 @@ public:
}
}
else if(tile.task == RenderTile::DENOISE) {
- denoise(task, denoising, tile);
+ denoise(denoising, tile);
+
+ task.update_progress(&tile, tile.w*tile.h);
}
task.release_tile(tile);