Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-05-04 01:34:51 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-05-04 01:34:51 +0400
commit838949c3e76eb140bb0f776fbbd0fd61fac08f49 (patch)
tree5f59c6410a1ad65d9dee684368676f499907cf65 /intern/cycles/kernel/kernel_emission.h
parent879859e0cc4e0176e1a054fa63e94c3e506a0a7c (diff)
Fix #35207: addition to previous fix to avoid OSL getting uninitialized
ray differentials for lighting, which could cause bad texture filtering artifacts or performance.
Diffstat (limited to 'intern/cycles/kernel/kernel_emission.h')
-rw-r--r--intern/cycles/kernel/kernel_emission.h10
1 files changed, 5 insertions, 5 deletions
diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h
index 0553ac7a4ee..6f7a3e71d27 100644
--- a/intern/cycles/kernel/kernel_emission.h
+++ b/intern/cycles/kernel/kernel_emission.h
@@ -36,8 +36,7 @@ __device_noinline float3 direct_emissive_eval(KernelGlobals *kg, float rando,
#ifdef __OBJECT_MOTION__
ray.time = time;
#endif
- ray.dP.dx = make_float3(0.0f, 0.0f, 0.0f);
- ray.dP.dy = make_float3(0.0f, 0.0f, 0.0f);
+ ray.dP = differential3_zero();
ray.dD = dI;
#ifdef __CAMERA_MOTION__
ray.time = time;
@@ -95,9 +94,7 @@ __device_noinline bool direct_emission(KernelGlobals *kg, ShaderData *sd, int li
return false;
/* todo: implement */
- differential3 dD;
- dD.dx = make_float3(0.0f, 0.0f, 0.0f);
- dD.dy = make_float3(0.0f, 0.0f, 0.0f);
+ differential3 dD = differential3_zero();
/* evaluate closure */
float3 light_eval = direct_emissive_eval(kg, rando, &ls, randu, randv, -ls.D, dD, ls.t, sd->time);
@@ -138,6 +135,9 @@ __device_noinline bool direct_emission(KernelGlobals *kg, ShaderData *sd, int li
ray->D = ray_offset(ls.P, ls.Ng) - ray->P;
ray->D = normalize_len(ray->D, &ray->t);
}
+
+ ray->dP = sd->dP;
+ ray->dD = differential3_zero();
}
else {
/* signal to not cast shadow ray */