[Bf-blender-cvs] [e127f5a] cycles_kernel_split: Add utility function to split big-tile into small-tiles
varunsundar08
noreply at git.blender.org
Wed Apr 15 17:36:53 CEST 2015
Commit: e127f5a4f2c23ff3d20ec096359f31559dd157e3
Author: varunsundar08
Date: Tue Apr 7 18:13:32 2015 +0530
Branches: cycles_kernel_split
https://developer.blender.org/rBe127f5a4f2c23ff3d20ec096359f31559dd157e3
Add utility function to split big-tile into small-tiles
===================================================================
M intern/cycles/device/device_opencl.cpp
===================================================================
diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp
index d7c0d17..6051782 100644
--- a/intern/cycles/device/device_opencl.cpp
+++ b/intern/cycles/device/device_opencl.cpp
@@ -3668,6 +3668,46 @@ One possible tile size is %zux%zu \n", tile_max_x - local_size[0] , tile_max_y -
return floor_render_feasible_tile_size;
}
+ /* Splits existing tile into multiple tiles of tile size render_feasible_tile_size */
+ vector<RenderTile> split_tiles(RenderTile rtile, int2 render_feasible_tile_size) {
+ vector<RenderTile> to_path_trace_rtile;
+
+ int d_w = rtile.w;
+ int d_h = rtile.h;
+ int num_tiles_x = (((d_w - 1) / render_feasible_tile_size.x) + 1);
+ int num_tiles_y = (((d_h - 1) / render_feasible_tile_size.y) + 1);
+
+ /* Resize to_path_trace_rtile */
+ to_path_trace_rtile.resize(num_tiles_x * num_tiles_y);
+
+ for (int tile_iter_y = 0; tile_iter_y < num_tiles_y; tile_iter_y++) {
+ for (int tile_iter_x = 0; tile_iter_x < num_tiles_x; tile_iter_x++) {
+ int rtile_index = tile_iter_y * num_tiles_x + tile_iter_x;
+
+ to_path_trace_rtile[rtile_index].start_sample = rtile.start_sample;
+ to_path_trace_rtile[rtile_index].num_samples = rtile.num_samples;
+ to_path_trace_rtile[rtile_index].sample = rtile.sample;
+ to_path_trace_rtile[rtile_index].resolution = rtile.resolution;
+ to_path_trace_rtile[rtile_index].offset = rtile.offset;
+ to_path_trace_rtile[rtile_index].stride = rtile.stride;
+ to_path_trace_rtile[rtile_index].tile_size = rtile.tile_size;
+ to_path_trace_rtile[rtile_index].buffers = rtile.buffers;
+ to_path_trace_rtile[rtile_index].buffer = rtile.buffer;
+ to_path_trace_rtile[rtile_index].rng_state = rtile.rng_state;
+ to_path_trace_rtile[rtile_index].x = rtile.x + (tile_iter_x * render_feasible_tile_size.x);
+ to_path_trace_rtile[rtile_index].y = rtile.y + (tile_iter_y * render_feasible_tile_size.y);
+
+ /* Fill width and height of the new render tile */
+ to_path_trace_rtile[rtile_index].w = (tile_iter_x == num_tiles_x - 1) ?
+ (d_w - (tile_iter_x * render_feasible_tile_size.x)) /* Border tile */
+ : render_feasible_tile_size.x;
+ to_path_trace_rtile[rtile_index].h = (tile_iter_y == num_tiles_y - 1) ?
+ (d_h - (tile_iter_y * render_feasible_tile_size.y)) /* Border tile */
+ : render_feasible_tile_size.y;
+ }
+ }
+ }
+
void thread_run(DeviceTask *task)
{
if(task->type == DeviceTask::FILM_CONVERT) {
More information about the Bf-blender-cvs
mailing list