Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/device/device_task.cpp
| Show All 29 Lines | |||||
| : type(type_), x(0), y(0), w(0), h(0), rgba_byte(0), rgba_half(0), buffer(0), | : type(type_), x(0), y(0), w(0), h(0), rgba_byte(0), rgba_half(0), buffer(0), | ||||
| sample(0), num_samples(1), | sample(0), num_samples(1), | ||||
| shader_input(0), shader_output(0), | shader_input(0), shader_output(0), | ||||
| shader_eval_type(0), shader_x(0), shader_w(0) | shader_eval_type(0), shader_x(0), shader_w(0) | ||||
| { | { | ||||
| last_update_time = time_dt(); | last_update_time = time_dt(); | ||||
| } | } | ||||
| void DeviceTask::split(list<DeviceTask>& tasks, int num, int max_size) | int DeviceTask::get_number_tasks(int num, int max_size) | ||||
| { | { | ||||
| if(max_size != 0) { | if(max_size != 0) { | ||||
| int max_size_num; | int max_size_num; | ||||
| if(type == SHADER) { | if(type == SHADER) { | ||||
| max_size_num = (shader_w + max_size - 1)/max_size; | max_size_num = (shader_w + max_size - 1)/max_size; | ||||
| } | } | ||||
| else { | else { | ||||
| max_size = max(1, max_size/w); | max_size = max(1, max_size/w); | ||||
| max_size_num = (h + max_size - 1)/max_size; | max_size_num = (h + max_size - 1)/max_size; | ||||
| } | } | ||||
| num = max(max_size_num, num); | num = max(max_size_num, num); | ||||
| } | } | ||||
| if(type == SHADER) { | if(type == SHADER) { | ||||
| num = min(shader_w, num); | num = min(shader_w, num); | ||||
| } | |||||
| else if(type == PATH_TRACE) { | |||||
| } | |||||
| else { | |||||
| num = min(h, num); | |||||
| } | |||||
| return num; | |||||
| } | |||||
| void DeviceTask::split(list<DeviceTask>& tasks, int num, int max_size) | |||||
| { | |||||
| num = get_number_tasks(num, max_size); | |||||
| if(type == SHADER) { | |||||
| for(int i = 0; i < num; i++) { | for(int i = 0; i < num; i++) { | ||||
| int tx = shader_x + (shader_w/num)*i; | int tx = shader_x + (shader_w/num)*i; | ||||
| int tw = (i == num-1)? shader_w - i*(shader_w/num): shader_w/num; | int tw = (i == num-1)? shader_w - i*(shader_w/num): shader_w/num; | ||||
| DeviceTask task = *this; | DeviceTask task = *this; | ||||
| task.shader_x = tx; | task.shader_x = tx; | ||||
| task.shader_w = tw; | task.shader_w = tw; | ||||
| tasks.push_back(task); | tasks.push_back(task); | ||||
| } | } | ||||
| } | } | ||||
| else if(type == PATH_TRACE) { | else if(type == PATH_TRACE) { | ||||
| for(int i = 0; i < num; i++) | for(int i = 0; i < num; i++) | ||||
| tasks.push_back(*this); | tasks.push_back(*this); | ||||
| } | } | ||||
| else { | else { | ||||
| num = min(h, num); | |||||
| for(int i = 0; i < num; i++) { | for(int i = 0; i < num; i++) { | ||||
| int ty = y + (h/num)*i; | int ty = y + (h/num)*i; | ||||
| int th = (i == num-1)? h - i*(h/num): h/num; | int th = (i == num-1)? h - i*(h/num): h/num; | ||||
| DeviceTask task = *this; | DeviceTask task = *this; | ||||
| task.y = ty; | task.y = ty; | ||||
| task.h = th; | task.h = th; | ||||
| Show All 27 Lines | |||||