Commit: 7d850d790e71f0c16c0b03c8822755791e2e2fcd
Author: Lukas Stockner
Date:   Mon Jun 20 22:49:37 2016 +0200
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB7d850d790e71f0c16c0b03c8822755791e2e2fcd

Cycles: Add CPU overhead dneoising as a debug option

In order to allow easier debugging of memory-related bugs in the GPU code,
this commit adds the option to also use overscan denoising on CPUs.

===================================================================

M       intern/cycles/device/device_cpu.cpp

===================================================================

diff --git a/intern/cycles/device/device_cpu.cpp 
b/intern/cycles/device/device_cpu.cpp
index 0ea6973..980291f 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -296,6 +296,28 @@ public:
 
                                        task.update_progress(&tile);
                                }
+
+                               if(tile.buffers->params.overscan) {
+                                       int tile_x[4] = {tile.x, tile.x, 
tile.x+tile.w, tile.x+tile.w};
+                                       int tile_y[4] = {tile.y, tile.y, 
tile.y+tile.h, tile.y+tile.h};
+                                       int offsets[9] = {0, 0, 0, 0, 
tile.offset, 0, 0, 0, 0};
+                                       int strides[9] = {0, 0, 0, 0, 
tile.stride, 0, 0, 0, 0};
+                                       float *buffers[9] = {NULL, NULL, NULL, 
NULL, (float*) tile.buffer, NULL, NULL, NULL, NULL};
+                                       FilterStorage *storages = new 
FilterStorage[tile.buffers->params.final_width*tile.buffers->params.final_height];
+
+                                       int overscan = 
tile.buffers->params.overscan;
+                                       int4 filter_rect = make_int4(tile.x + 
overscan, tile.y + overscan, tile.x + tile.w - overscan, tile.y + tile.h - 
overscan);
+                                       for(int y = filter_rect.y; y < 
filter_rect.w; y++) {
+                                               for(int x = filter_rect.x; x < 
filter_rect.z; x++) {
+                                                       
filter_estimate_params_kernel(&kg, end_sample, buffers, x, y, tile_x, tile_y, 
offsets, strides, storages, filter_rect);
+                                               }
+                                       }
+                                       for(int y = filter_rect.y; y < 
filter_rect.w; y++) {
+                                               for(int x = filter_rect.x; x < 
filter_rect.z; x++) {
+                                                       
filter_final_pass_kernel(&kg, end_sample, buffers, x, y, tile_x, tile_y, 
offsets, strides, storages, filter_rect);
+                                               }
+                                       }
+                               }
                        }
                        else if(tile.task == RenderTile::DENOISE) {
                                int sample = tile.start_sample + 
tile.num_samples;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to