forked from bartvdbraak/blender
Cycles: disable environment importance sampling code for CUDA cards with
compute model < 2.x, to avoid running out of memory in the compiler.
This commit is contained in:
parent
803286dde8
commit
4fe00cd4f9
@ -27,6 +27,7 @@ __device float3 direct_emissive_eval(KernelGlobals *kg, float rando,
|
||||
ShaderData sd;
|
||||
float3 eval;
|
||||
|
||||
#ifdef __BACKGROUND_MIS__
|
||||
if(ls->type == LIGHT_BACKGROUND) {
|
||||
Ray ray;
|
||||
ray.D = ls->D;
|
||||
@ -36,7 +37,9 @@ __device float3 direct_emissive_eval(KernelGlobals *kg, float rando,
|
||||
shader_setup_from_background(kg, &sd, &ray);
|
||||
eval = shader_eval_background(kg, &sd, 0);
|
||||
}
|
||||
else {
|
||||
else
|
||||
#endif
|
||||
{
|
||||
shader_setup_from_sample(kg, &sd, ls->P, ls->Ng, I, ls->shader, ls->object, ls->prim, u, v);
|
||||
ls->Ng = sd.Ng;
|
||||
|
||||
@ -164,6 +167,7 @@ __device float3 indirect_background(KernelGlobals *kg, Ray *ray, int path_flag,
|
||||
float3 L = shader_eval_background(kg, &sd, path_flag);
|
||||
shader_release(kg, &sd);
|
||||
|
||||
#ifdef __BACKGROUND_MIS__
|
||||
/* check if background light exists or if we should skip pdf */
|
||||
int res = kernel_data.integrator.pdf_background_res;
|
||||
|
||||
@ -175,6 +179,7 @@ __device float3 indirect_background(KernelGlobals *kg, Ray *ray, int path_flag,
|
||||
|
||||
return L*mis_weight;
|
||||
}
|
||||
#endif
|
||||
|
||||
return L;
|
||||
#else
|
||||
|
@ -192,6 +192,7 @@ __device void regular_light_sample(KernelGlobals *kg, int point,
|
||||
ls->D = -D;
|
||||
ls->t = FLT_MAX;
|
||||
}
|
||||
#ifdef __BACKGROUND_MIS__
|
||||
else if(type == LIGHT_BACKGROUND) {
|
||||
/* infinite area light (e.g. light dome or env light) */
|
||||
float3 D = background_light_sample(kg, randu, randv, pdf);
|
||||
@ -201,6 +202,7 @@ __device void regular_light_sample(KernelGlobals *kg, int point,
|
||||
ls->D = -D;
|
||||
ls->t = FLT_MAX;
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
ls->P = make_float3(data0.y, data0.z, data0.w);
|
||||
|
||||
|
@ -26,7 +26,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __OSL__
|
||||
|
||||
#include "osl_shader.h"
|
||||
|
@ -70,9 +70,8 @@ CCL_NAMESPACE_BEGIN
|
||||
#ifdef __KERNEL_ADV_SHADING__
|
||||
#define __MULTI_CLOSURE__
|
||||
#define __TRANSPARENT_SHADOWS__
|
||||
#ifdef __KERNEL_CPU__
|
||||
#define __PASSES__
|
||||
#endif
|
||||
#define __BACKGROUND_MIS__
|
||||
#endif
|
||||
|
||||
//#define __MULTI_LIGHT__
|
||||
|
@ -402,6 +402,16 @@ void LightManager::device_update_points(Device *device, DeviceScene *dscene, Sce
|
||||
|
||||
float4 *light_data = dscene->light_data.resize(scene->lights.size()*LIGHT_SIZE);
|
||||
|
||||
if(!device->info.advanced_shading) {
|
||||
/* remove unsupported light */
|
||||
foreach(Light *light, scene->lights) {
|
||||
if(light->type == LIGHT_BACKGROUND) {
|
||||
scene->lights.erase(std::remove(scene->lights.begin(), scene->lights.end(), light), scene->lights.end());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(size_t i = 0; i < scene->lights.size(); i++) {
|
||||
Light *light = scene->lights[i];
|
||||
float3 co = light->co;
|
||||
|
Loading…
Reference in New Issue
Block a user