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:
Diffstat (limited to 'intern/cycles/device/device_task.cpp')
-rw-r--r--intern/cycles/device/device_task.cpp175
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