diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-06-06 16:40:09 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-06-06 17:39:04 +0400 |
commit | e4e58d46128dc7fe4fb9b881d73b38173f00f5c3 (patch) | |
tree | cc38ac39838bec84d28de396374ba022139a8aa2 /intern/cycles/render | |
parent | 553264ff8e20484d0b91bb468f56aa1b7144f7aa (diff) |
Fix T40370: cycles CUDA baking timeout with high number of AA samples.
Now baking does one AA sample at a time, just like final render. There is
also some code for shader antialiasing that solves T40369 but it is disabled
for now because there may be unpredictable side effects.
Diffstat (limited to 'intern/cycles/render')
-rw-r--r-- | intern/cycles/render/bake.cpp | 33 | ||||
-rw-r--r-- | intern/cycles/render/bake.h | 8 | ||||
-rw-r--r-- | intern/cycles/render/light.cpp | 1 | ||||
-rw-r--r-- | intern/cycles/render/mesh_displace.cpp | 1 |
4 files changed, 41 insertions, 2 deletions
diff --git a/intern/cycles/render/bake.cpp b/intern/cycles/render/bake.cpp index aa317ab672f..c68f6e1f08e 100644 --- a/intern/cycles/render/bake.cpp +++ b/intern/cycles/render/bake.cpp @@ -15,6 +15,7 @@ */ #include "bake.h" +#include "integrator.h" CCL_NAMESPACE_BEGIN @@ -152,6 +153,7 @@ bool BakeManager::bake(Device *device, DeviceScene *dscene, Scene *scene, Progre task.shader_eval_type = shader_type; task.shader_x = 0; task.shader_w = d_output.size(); + task.num_samples = is_aa_pass(shader_type)? scene->integrator->aa_samples: 1; task.get_cancel = function_bind(&Progress::get_cancel, &progress); device->task_add(task); @@ -203,4 +205,35 @@ void BakeManager::device_free(Device *device, DeviceScene *dscene) { } +bool BakeManager::is_aa_pass(ShaderEvalType type) +{ + switch(type) { + case SHADER_EVAL_UV: + case SHADER_EVAL_NORMAL: + return false; + default: + return true; + } +} + +bool BakeManager::is_light_pass(ShaderEvalType type) +{ + switch(type) { + case SHADER_EVAL_AO: + case SHADER_EVAL_COMBINED: + case SHADER_EVAL_SHADOW: + case SHADER_EVAL_DIFFUSE_DIRECT: + case SHADER_EVAL_GLOSSY_DIRECT: + case SHADER_EVAL_TRANSMISSION_DIRECT: + case SHADER_EVAL_SUBSURFACE_DIRECT: + case SHADER_EVAL_DIFFUSE_INDIRECT: + case SHADER_EVAL_GLOSSY_INDIRECT: + case SHADER_EVAL_TRANSMISSION_INDIRECT: + case SHADER_EVAL_SUBSURFACE_INDIRECT: + return true; + default: + return false; + } +} + CCL_NAMESPACE_END diff --git a/intern/cycles/render/bake.h b/intern/cycles/render/bake.h index ea403f7d39a..f91ba589b8b 100644 --- a/intern/cycles/render/bake.h +++ b/intern/cycles/render/bake.h @@ -17,10 +17,11 @@ #ifndef __BAKE_H__ #define __BAKE_H__ -#include "util_vector.h" #include "device.h" #include "scene.h" -#include "session.h" + +#include "util_progress.h" +#include "util_vector.h" CCL_NAMESPACE_BEGIN @@ -64,6 +65,9 @@ public: void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress); void device_free(Device *device, DeviceScene *dscene); + static bool is_light_pass(ShaderEvalType type); + static bool is_aa_pass(ShaderEvalType type); + bool need_update; private: diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp index 1325627ef05..9a0a7ead696 100644 --- a/intern/cycles/render/light.cpp +++ b/intern/cycles/render/light.cpp @@ -66,6 +66,7 @@ static void shade_background_pixels(Device *device, DeviceScene *dscene, int res main_task.shader_eval_type = SHADER_EVAL_BACKGROUND; main_task.shader_x = 0; main_task.shader_w = width*height; + main_task.num_samples = 1; main_task.get_cancel = function_bind(&Progress::get_cancel, &progress); /* disabled splitting for now, there's an issue with multi-GPU mem_copy_from */ diff --git a/intern/cycles/render/mesh_displace.cpp b/intern/cycles/render/mesh_displace.cpp index 661fd9c66c1..4c0ee76299c 100644 --- a/intern/cycles/render/mesh_displace.cpp +++ b/intern/cycles/render/mesh_displace.cpp @@ -119,6 +119,7 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me task.shader_eval_type = SHADER_EVAL_DISPLACE; task.shader_x = 0; task.shader_w = d_output.size(); + task.num_samples = 1; task.get_cancel = function_bind(&Progress::get_cancel, &progress); device->task_add(task); |