diff options
Diffstat (limited to 'intern/cycles/kernel/kernel_emission.h')
-rw-r--r-- | intern/cycles/kernel/kernel_emission.h | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h index 54bc0717b60..4048bbd9dfc 100644 --- a/intern/cycles/kernel/kernel_emission.h +++ b/intern/cycles/kernel/kernel_emission.h @@ -76,7 +76,7 @@ __device float3 direct_emissive_eval(KernelGlobals *kg, float rando, __device bool direct_emission(KernelGlobals *kg, ShaderData *sd, int lindex, float randt, float rando, float randu, float randv, Ray *ray, BsdfEval *eval, - int *lamp) + bool *is_lamp) { LightSample ls; @@ -92,12 +92,6 @@ __device bool direct_emission(KernelGlobals *kg, ShaderData *sd, int lindex, light_sample(kg, randt, randu, randv, sd->time, sd->P, &ls); } - /* return lamp index for MIS */ - if(ls.use_mis) - *lamp = ls.lamp; - else - *lamp= ~0; - if(ls.pdf == 0.0f) return false; @@ -114,7 +108,7 @@ __device bool direct_emission(KernelGlobals *kg, ShaderData *sd, int lindex, shader_bsdf_eval(kg, sd, ls.D, eval, &bsdf_pdf); - if(ls.use_mis) { + if(ls.shader & SHADER_USE_MIS) { /* multiple importance sampling */ float mis_weight = power_heuristic(ls.pdf, bsdf_pdf); light_eval *= mis_weight; @@ -146,6 +140,9 @@ __device bool direct_emission(KernelGlobals *kg, ShaderData *sd, int lindex, ray->t = 0.0f; } + /* return if it's a lamp for shadow pass */ + *is_lamp = (ls.prim == ~0); + return true; } |