[Bf-blender-cvs] [a051c5f202] cycles-tiles-rework: Cycles: Have CPU devices use new the acquire_tiles function
Mai Lavelle
noreply at git.blender.org
Fri Jan 13 02:52:33 CET 2017
Commit: a051c5f2025a4314d4ee660f75572e7966b04bae
Author: Mai Lavelle
Date: Fri Jan 6 20:37:55 2017 -0500
Branches: cycles-tiles-rework
https://developer.blender.org/rBa051c5f2025a4314d4ee660f75572e7966b04bae
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.
===================================================================
M intern/cycles/device/device_cpu.cpp
===================================================================
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index c8e001ec2f..5cf71d1cbd 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);
More information about the Bf-blender-cvs
mailing list