Commit: 58634a17abf7680bfb5c6e4b5d0298e900e47cc2
Author: varunsundar08
Date:   Tue May 5 00:41:23 2015 +0530
Branches: cycles_kernel_split
https://developer.blender.org/rB58634a17abf7680bfb5c6e4b5d0298e900e47cc2

Make use of isect in shadow_blocked_SPLIT_KERNEL similar to shadow_blocked

===================================================================

M       intern/cycles/kernel/kernel_shadow.h

===================================================================

diff --git a/intern/cycles/kernel/kernel_shadow.h 
b/intern/cycles/kernel/kernel_shadow.h
index 9ce13a9..26bafeb 100644
--- a/intern/cycles/kernel/kernel_shadow.h
+++ b/intern/cycles/kernel/kernel_shadow.h
@@ -181,7 +181,7 @@ ccl_device_inline bool shadow_blocked(ccl_addr_space 
KernelGlobals *kg, PathStat
  * one extra ray cast for the cases were we do want transparency. */
 
 #ifdef __SPLIT_KERNEL__
-ccl_device_inline bool shadow_blocked_SPLIT_KERNEL(ccl_addr_space 
KernelGlobals *kg, ccl_addr_space PathState *state, ccl_addr_space Ray 
*ray_input, float3 *shadow, ccl_addr_space ShaderData *sd_input, ccl_addr_space 
Intersection *isect_global)
+ccl_device_inline bool shadow_blocked_SPLIT_KERNEL(ccl_addr_space 
KernelGlobals *kg, ccl_addr_space PathState *state, ccl_addr_space Ray 
*ray_input, float3 *shadow, ccl_addr_space ShaderData *sd_input, ccl_addr_space 
Intersection *isect_input)
 {
        *shadow = make_float3(1.0f, 1.0f, 1.0f);
 
@@ -195,11 +195,18 @@ ccl_device_inline bool 
shadow_blocked_SPLIT_KERNEL(ccl_addr_space KernelGlobals
        Ray *ray = ray_input;
 #endif
 
-       bool blocked = scene_intersect(kg, ray, PATH_RAY_SHADOW_OPAQUE, 
isect_global, NULL, 0.0f, 0.0f);
+#ifdef __SPLIT_KERNEL__
+       ccl_addr_space Intersection *isect = isect_global;
+#else
+       Intersection isect_object;
+       Intersection *isect = &isect_object;
+#endif
+
+       bool blocked = scene_intersect(kg, ray, PATH_RAY_SHADOW_OPAQUE, isect, 
NULL, 0.0f, 0.0f);
 
 #ifdef __TRANSPARENT_SHADOWS__
        if(blocked && kernel_data.integrator.transparent_shadows) {
-               if(shader_transparent_shadow(kg, isect_global)) {
+               if(shader_transparent_shadow(kg, isect)) {
                        float3 throughput = make_float3(1.0f, 1.0f, 1.0f);
                        float3 Pend = ray->P + ray->D*ray->t;
                        int bounce = state->transparent_bounce;
@@ -211,7 +218,7 @@ ccl_device_inline bool 
shadow_blocked_SPLIT_KERNEL(ccl_addr_space KernelGlobals
                                if(bounce >= 
kernel_data.integrator.transparent_max_bounce)
                                        return true;
 
-                               if(!scene_intersect(kg, ray, 
PATH_RAY_SHADOW_TRANSPARENT, isect_global, NULL, 0.0f, 0.0f))
+                               if(!scene_intersect(kg, ray, 
PATH_RAY_SHADOW_TRANSPARENT, isect, NULL, 0.0f, 0.0f))
                                {
 #ifdef __VOLUME__
                                        /* attenuation for last line segment 
towards light */
@@ -224,14 +231,14 @@ ccl_device_inline bool 
shadow_blocked_SPLIT_KERNEL(ccl_addr_space KernelGlobals
                                        return false;
                                }
 
-                               if(!shader_transparent_shadow(kg, isect_global))
+                               if(!shader_transparent_shadow(kg, isect))
                                        return true;
 
 #ifdef __VOLUME__
                                /* attenuation between last surface and next 
surface */
                                if(ps.volume_stack[0].shader != SHADER_NONE) {
                                        Ray segment_ray = *ray;
-                                       segment_ray.t = isect_global->t;
+                                       segment_ray.t = isect->t;
                                        kernel_volume_shadow(kg, &ps, 
&segment_ray, &throughput);
                                }
 #endif
@@ -243,7 +250,7 @@ ccl_device_inline bool 
shadow_blocked_SPLIT_KERNEL(ccl_addr_space KernelGlobals
                                ShaderData sd_object;
                                ShaderData *sd = &sd_object;
 #endif
-                               shader_setup_from_ray(kg, sd, isect_global, 
ray, state->bounce+1, bounce);
+                               shader_setup_from_ray(kg, sd, isect, ray, 
state->bounce+1, bounce);
 
                                /* attenuation from transparent surface */
                                if(!(sd_fetch(flag) & SD_HAS_ONLY_VOLUME)) {

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to