Fix T41222 Blender gives weird output when baking (4096*4096) resolution on GPU
In collaboration with Sergey Sharybin. Also thanks to Wolfgang Faehnle (mib2berlin) for help testing the solutions. Reviewers: sergey Differential Revision: https://developer.blender.org/D690
This commit is contained in:
parent
9855edcacf
commit
a48b372b04
@ -25,6 +25,7 @@
|
||||
|
||||
#include "cuew.h"
|
||||
#include "util_debug.h"
|
||||
#include "util_foreach.h"
|
||||
#include "util_map.h"
|
||||
#include "util_opengl.h"
|
||||
#include "util_path.h"
|
||||
@ -966,7 +967,10 @@ public:
|
||||
|
||||
int get_split_task_count(DeviceTask& task)
|
||||
{
|
||||
return 1;
|
||||
if (task.type == DeviceTask::SHADER)
|
||||
return task.get_subtask_count(TaskScheduler::num_threads(), 1024 * 1024);
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
void task_add(DeviceTask& task)
|
||||
@ -979,6 +983,15 @@ public:
|
||||
cuda_assert(cuCtxSynchronize());
|
||||
cuda_pop_context();
|
||||
}
|
||||
else if(task.type == DeviceTask::SHADER) {
|
||||
/* split task into smaller ones */
|
||||
list<DeviceTask> tasks;
|
||||
|
||||
task.split(tasks, TaskScheduler::num_threads(), 1024 * 1024);
|
||||
|
||||
foreach(DeviceTask& task, tasks)
|
||||
task_pool.push(new CUDADeviceTask(this, task));
|
||||
}
|
||||
else {
|
||||
task_pool.push(new CUDADeviceTask(this, task));
|
||||
}
|
||||
|
@ -280,7 +280,18 @@ public:
|
||||
|
||||
int get_split_task_count(DeviceTask& task)
|
||||
{
|
||||
return 1;
|
||||
int total_tasks = 0;
|
||||
list<DeviceTask> tasks;
|
||||
task.split(tasks, devices.size());
|
||||
foreach(SubDevice& sub, devices) {
|
||||
if(!tasks.empty()) {
|
||||
DeviceTask subtask = tasks.front();
|
||||
tasks.pop_front();
|
||||
|
||||
total_tasks += sub.device->get_split_task_count(subtask);
|
||||
}
|
||||
}
|
||||
return total_tasks;
|
||||
}
|
||||
|
||||
void task_add(DeviceTask& task)
|
||||
|
Loading…
Reference in New Issue
Block a user