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:
-rw-r--r--intern/cycles/device/device_cpu.cpp50
1 files changed, 28 insertions, 22 deletions
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index c8e001ec2fd..5cf71d1cbd4 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -221,7 +221,6 @@ public:
}
KernelGlobals kg = thread_kernel_globals_init();
- RenderTile tile;
void(*path_trace_kernel)(KernelGlobals*, float*, unsigned int*, int, int, int, int, int);
@@ -258,37 +257,44 @@ public:
{
path_trace_kernel = kernel_cpu_path_trace;
}
-
- while(task.acquire_tile(this, tile)) {
- float *render_buffer = (float*)tile.buffer;
- uint *rng_state = (uint*)tile.rng_state;
- int start_sample = tile.start_sample;
- int end_sample = tile.start_sample + tile.num_samples;
-
- for(int sample = start_sample; sample < end_sample; sample++) {
- if(task.get_cancel() || task_pool.canceled()) {
- if(task.need_finish_queue == false)
- break;
- }
- for(int y = tile.y; y < tile.y + tile.h; y++) {
- for(int x = tile.x; x < tile.x + tile.w; x++) {
- path_trace_kernel(&kg, render_buffer, rng_state,
- sample, x, y, tile.offset, tile.stride);
+ RenderWorkRequest work_request = {16*16, 64*64};
+ vector<RenderTile> tiles;
+
+ while(task.acquire_tiles(this, tiles, work_request)) {
+ foreach(RenderTile& tile, tiles) {
+ float *render_buffer = (float*)tile.buffer;
+ uint *rng_state = (uint*)tile.rng_state;
+ int start_sample = tile.start_sample;
+ int end_sample = tile.start_sample + tile.num_samples;
+
+ for(int sample = start_sample; sample < end_sample; sample++) {
+ if(task.get_cancel() || task_pool.canceled()) {
+ if(task.need_finish_queue == false)
+ break;
+ }
+
+ for(int y = tile.y; y < tile.y + tile.h; y++) {
+ for(int x = tile.x; x < tile.x + tile.w; x++) {
+ path_trace_kernel(&kg, render_buffer, rng_state,
+ sample, x, y, tile.offset, tile.stride);
+ }
}
- }
- tile.sample = sample + 1;
+ tile.sample = sample + 1;
- task.update_progress(&tile, tile.w*tile.h);
- }
+ task.update_progress(&tile, tile.w*tile.h);
+ }
- task.release_tile(tile);
+ task.release_tile(tile);
+ }
if(task_pool.canceled()) {
if(task.need_finish_queue == false)
break;
}
+
+ tiles.clear();
}
thread_kernel_globals_free(&kg);