[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54212] trunk/blender/intern/cycles: Fix #33984: cycles shadow pass problem with CUDA.

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Jan 30 18:04:56 CET 2013


Revision: 54212
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54212
Author:   blendix
Date:     2013-01-30 17:04:51 +0000 (Wed, 30 Jan 2013)
Log Message:
-----------
Fix #33984: cycles shadow pass problem with CUDA.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_python.cpp
    trunk/blender/intern/cycles/kernel/kernel_emission.h
    trunk/blender/intern/cycles/kernel/kernel_path.h

Modified: trunk/blender/intern/cycles/blender/blender_python.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_python.cpp	2013-01-30 16:29:15 UTC (rev 54211)
+++ trunk/blender/intern/cycles/blender/blender_python.cpp	2013-01-30 17:04:51 UTC (rev 54212)
@@ -54,7 +54,7 @@
 	PyObject *pyengine, *pyuserpref, *pydata, *pyscene, *pyregion, *pyv3d, *pyrv3d;
 	int preview_osl;
 
-	if(!PyArg_ParseTuple(args, "OOOOOOOp", &pyengine, &pyuserpref, &pydata, &pyscene, &pyregion, &pyv3d, &pyrv3d, &preview_osl))
+	if(!PyArg_ParseTuple(args, "OOOOOOOi", &pyengine, &pyuserpref, &pydata, &pyscene, &pyregion, &pyv3d, &pyrv3d, &preview_osl))
 		return NULL;
 
 	/* RNA */

Modified: trunk/blender/intern/cycles/kernel/kernel_emission.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_emission.h	2013-01-30 16:29:15 UTC (rev 54211)
+++ trunk/blender/intern/cycles/kernel/kernel_emission.h	2013-01-30 17:04:51 UTC (rev 54212)
@@ -76,7 +76,7 @@
 
 __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 @@
 		light_sample(kg, randt, randu, randv, sd->time, sd->P, &ls);
 	}
 
-	/* return lamp index for MIS */
-	if(ls.shader & SHADER_USE_MIS)
-		*lamp = ls.lamp;
-	else
-		*lamp= ~0;
-
 	if(ls.pdf == 0.0f)
 		return false;
 
@@ -146,6 +140,9 @@
 		ray->t = 0.0f;
 	}
 
+	/* return if it's a lamp for shadow pass */
+	*is_lamp = (ls.prim == ~0);
+
 	return true;
 }
 

Modified: trunk/blender/intern/cycles/kernel/kernel_path.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_path.h	2013-01-30 16:29:15 UTC (rev 54211)
+++ trunk/blender/intern/cycles/kernel/kernel_path.h	2013-01-30 17:04:51 UTC (rev 54212)
@@ -399,19 +399,18 @@
 
 				Ray light_ray;
 				BsdfEval L_light;
-				int lamp;
+				bool is_lamp;
 
 #ifdef __OBJECT_MOTION__
 				light_ray.time = sd.time;
 #endif
 
-				if(direct_emission(kg, &sd, -1, light_t, light_o, light_u, light_v, &light_ray, &L_light, &lamp)) {
+				if(direct_emission(kg, &sd, -1, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp)) {
 					/* trace shadow ray */
 					float3 shadow;
 
 					if(!shadow_blocked(kg, &state, &light_ray, &shadow)) {
 						/* accumulate */
-						bool is_lamp = (lamp != ~0);
 						path_radiance_accum_light(&L, throughput, &L_light, shadow, state.bounce, is_lamp);
 					}
 				}
@@ -612,20 +611,19 @@
 
 				Ray light_ray;
 				BsdfEval L_light;
-				int lamp;
+				bool is_lamp;
 
 #ifdef __OBJECT_MOTION__
 				light_ray.time = sd.time;
 #endif
 
 				/* sample random light */
-				if(direct_emission(kg, &sd, -1, light_t, light_o, light_u, light_v, &light_ray, &L_light, &lamp)) {
+				if(direct_emission(kg, &sd, -1, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp)) {
 					/* trace shadow ray */
 					float3 shadow;
 
 					if(!shadow_blocked(kg, &state, &light_ray, &shadow)) {
 						/* accumulate */
-						bool is_lamp = (lamp != ~0);
 						path_radiance_accum_light(L, throughput, &L_light, shadow, state.bounce, is_lamp);
 					}
 				}
@@ -819,7 +817,7 @@
 		if(sd.flag & SD_BSDF_HAS_EVAL) {
 			Ray light_ray;
 			BsdfEval L_light;
-			int lamp;
+			bool is_lamp;
 
 #ifdef __OBJECT_MOTION__
 			light_ray.time = sd.time;
@@ -837,13 +835,12 @@
 					float light_u = path_rng(kg, rng, sample*num_samples + j, rng_offset + PRNG_LIGHT_U);
 					float light_v = path_rng(kg, rng, sample*num_samples + j, rng_offset + PRNG_LIGHT_V);
 
-					if(direct_emission(kg, &sd, i, 0.0f, 0.0f, light_u, light_v, &light_ray, &L_light, &lamp)) {
+					if(direct_emission(kg, &sd, i, 0.0f, 0.0f, light_u, light_v, &light_ray, &L_light, &is_lamp)) {
 						/* trace shadow ray */
 						float3 shadow;
 
 						if(!shadow_blocked(kg, &state, &light_ray, &shadow)) {
 							/* accumulate */
-							bool is_lamp = (lamp != ~0);
 							path_radiance_accum_light(&L, throughput*num_samples_inv, &L_light, shadow, state.bounce, is_lamp);
 						}
 					}
@@ -867,13 +864,12 @@
 					if(kernel_data.integrator.num_all_lights)
 						light_t = 0.5f*light_t;
 
-					if(direct_emission(kg, &sd, -1, light_t, 0.0f, light_u, light_v, &light_ray, &L_light, &lamp)) {
+					if(direct_emission(kg, &sd, -1, light_t, 0.0f, light_u, light_v, &light_ray, &L_light, &is_lamp)) {
 						/* trace shadow ray */
 						float3 shadow;
 
 						if(!shadow_blocked(kg, &state, &light_ray, &shadow)) {
 							/* accumulate */
-							bool is_lamp = (lamp != ~0);
 							path_radiance_accum_light(&L, throughput*num_samples_inv, &L_light, shadow, state.bounce, is_lamp);
 						}
 					}




More information about the Bf-blender-cvs mailing list