diff options
Diffstat (limited to 'intern/cycles/device/device_task.cpp')
-rw-r--r-- | intern/cycles/device/device_task.cpp | 175 |
1 files changed, 93 insertions, 82 deletions
diff --git a/intern/cycles/device/device_task.cpp b/intern/cycles/device/device_task.cpp index 8310863886c..376ad06a734 100644 --- a/intern/cycles/device/device_task.cpp +++ b/intern/cycles/device/device_task.cpp @@ -29,100 +29,111 @@ CCL_NAMESPACE_BEGIN /* Device Task */ DeviceTask::DeviceTask(Type type_) -: type(type_), x(0), y(0), w(0), h(0), rgba_byte(0), rgba_half(0), buffer(0), - sample(0), num_samples(1), - shader_input(0), shader_output(0), - shader_eval_type(0), shader_filter(0), shader_x(0), shader_w(0) + : type(type_), + x(0), + y(0), + w(0), + h(0), + rgba_byte(0), + rgba_half(0), + buffer(0), + sample(0), + num_samples(1), + shader_input(0), + shader_output(0), + shader_eval_type(0), + shader_filter(0), + shader_x(0), + shader_w(0) { - last_update_time = time_dt(); + last_update_time = time_dt(); } int DeviceTask::get_subtask_count(int num, int max_size) { - if(max_size != 0) { - int max_size_num; - - if(type == SHADER) { - max_size_num = (shader_w + max_size - 1)/max_size; - } - else { - max_size = max(1, max_size/w); - max_size_num = (h + max_size - 1)/max_size; - } - - num = max(max_size_num, num); - } - - if(type == SHADER) { - num = min(shader_w, num); - } - else if(type == RENDER) { - } - else { - num = min(h, num); - } - - return num; + if (max_size != 0) { + int max_size_num; + + if (type == SHADER) { + max_size_num = (shader_w + max_size - 1) / max_size; + } + else { + max_size = max(1, max_size / w); + max_size_num = (h + max_size - 1) / max_size; + } + + num = max(max_size_num, num); + } + + if (type == SHADER) { + num = min(shader_w, num); + } + else if (type == RENDER) { + } + else { + num = min(h, num); + } + + return num; } -void DeviceTask::split(list<DeviceTask>& tasks, int num, int max_size) +void DeviceTask::split(list<DeviceTask> &tasks, int num, int max_size) { - num = get_subtask_count(num, max_size); - - if(type == SHADER) { - for(int i = 0; i < num; i++) { - int tx = shader_x + (shader_w/num)*i; - int tw = (i == num-1)? shader_w - i*(shader_w/num): shader_w/num; - - DeviceTask task = *this; - - task.shader_x = tx; - task.shader_w = tw; - - tasks.push_back(task); - } - } - else if(type == RENDER) { - for(int i = 0; i < num; i++) - tasks.push_back(*this); - } - else { - for(int i = 0; i < num; i++) { - int ty = y + (h/num)*i; - int th = (i == num-1)? h - i*(h/num): h/num; - - DeviceTask task = *this; - - task.y = ty; - task.h = th; - - tasks.push_back(task); - } - } + num = get_subtask_count(num, max_size); + + if (type == SHADER) { + for (int i = 0; i < num; i++) { + int tx = shader_x + (shader_w / num) * i; + int tw = (i == num - 1) ? shader_w - i * (shader_w / num) : shader_w / num; + + DeviceTask task = *this; + + task.shader_x = tx; + task.shader_w = tw; + + tasks.push_back(task); + } + } + else if (type == RENDER) { + for (int i = 0; i < num; i++) + tasks.push_back(*this); + } + else { + for (int i = 0; i < num; i++) { + int ty = y + (h / num) * i; + int th = (i == num - 1) ? h - i * (h / num) : h / num; + + DeviceTask task = *this; + + task.y = ty; + task.h = th; + + tasks.push_back(task); + } + } } void DeviceTask::update_progress(RenderTile *rtile, int pixel_samples) { - if((type != RENDER) && - (type != SHADER)) - return; - - if(update_progress_sample) { - if(pixel_samples == -1) { - pixel_samples = shader_w; - } - update_progress_sample(pixel_samples, rtile? rtile->sample : 0); - } - - if(update_tile_sample) { - double current_time = time_dt(); - - if(current_time - last_update_time >= 1.0) { - update_tile_sample(*rtile); - - last_update_time = current_time; - } - } + if ((type != RENDER) && (type != SHADER)) + return; + + if (update_progress_sample) { + if (pixel_samples == -1) { + pixel_samples = shader_w; + } + update_progress_sample(pixel_samples, rtile ? rtile->sample : 0); + } + + if (update_tile_sample) { + double current_time = time_dt(); + + if (current_time - last_update_time >= 1.0) { + update_tile_sample(*rtile); + + last_update_time = current_time; + } + } } CCL_NAMESPACE_END |