[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