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:
authorMai Lavelle <mai.lavelle@gmail.com>2017-01-07 04:37:55 +0300
committerMai Lavelle <mai.lavelle@gmail.com>2017-01-13 04:40:58 +0300
commita051c5f2025a4314d4ee660f75572e7966b04bae (patch)
tree4ff43cd5de16595ec34e6466ea632dcae33195a9
parentc189403126d0811210ead30c4c4043cab679ff5c (diff)
Cycles: Have CPU devices use new the acquire_tiles function
This is mostly for testing at the moment, as the default work request sizes should result in only one tile being acquired at once. May need to tweak the request sizes later, but for now this should do.
-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);