[Bf-blender-cvs] [749185e] cycles_kernel_split: De-duplicate object_normal_transform function

varunsundar08 noreply at git.blender.org
Tue May 5 09:17:00 CEST 2015


Commit: 749185e354c5ce4409618b4cc706e3d719c27cf3
Author: varunsundar08
Date:   Mon May 4 21:19:46 2015 +0530
Branches: cycles_kernel_split
https://developer.blender.org/rB749185e354c5ce4409618b4cc706e3d719c27cf3

De-duplicate object_normal_transform function

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

M	intern/cycles/kernel/geom/geom_object.h
M	intern/cycles/kernel/geom/geom_primitive.h
M	intern/cycles/kernel/kernel_shader.h
M	intern/cycles/kernel/svm/svm_tex_coord.h

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

diff --git a/intern/cycles/kernel/geom/geom_object.h b/intern/cycles/kernel/geom/geom_object.h
index a206e8c..a59b08f 100644
--- a/intern/cycles/kernel/geom/geom_object.h
+++ b/intern/cycles/kernel/geom/geom_object.h
@@ -151,7 +151,7 @@ ccl_device_inline void object_inverse_normal_transform(ccl_addr_space KernelGlob
 }
 
 /* Transform normal from object to world space */
-ccl_device_inline void object_normal_transform(ccl_addr_space KernelGlobals *kg, const ccl_addr_space ShaderData *sd, ccl_addr_space float3 *N)
+ccl_device_inline void object_normal_transform(ccl_addr_space KernelGlobals *kg, const ccl_addr_space ShaderData *sd, float3 *N)
 {
 #ifdef __OBJECT_MOTION__
 	*N = normalize(transform_direction_transposed(&sd_fetch(ob_itfm), *N));
@@ -161,18 +161,6 @@ ccl_device_inline void object_normal_transform(ccl_addr_space KernelGlobals *kg,
 #endif
 }
 
-#ifdef __SPLIT_KERNEL__
-ccl_device_inline void object_normal_transform_private_N(ccl_addr_space KernelGlobals *kg, const ccl_addr_space ShaderData *sd, float3 *N)
-{
-#ifdef __OBJECT_MOTION__
-	*N = normalize(transform_direction_transposed(&sd_fetch(ob_itfm), *N));
-#else
-	Transform tfm = object_fetch_transform(kg, sd_fetch(object), OBJECT_INVERSE_TRANSFORM);
-	*N = normalize(transform_direction_transposed(&tfm, *N));
-#endif
-}
-#endif
-
 /* Transform direction vector from object to world space */
 ccl_device_inline void object_dir_transform(ccl_addr_space KernelGlobals *kg, const ccl_addr_space ShaderData *sd, ccl_addr_space float3 *D)
 {
diff --git a/intern/cycles/kernel/geom/geom_primitive.h b/intern/cycles/kernel/geom/geom_primitive.h
index 9668d4a..d7305d6 100644
--- a/intern/cycles/kernel/geom/geom_primitive.h
+++ b/intern/cycles/kernel/geom/geom_primitive.h
@@ -120,11 +120,7 @@ ccl_device float3 primitive_tangent(ccl_addr_space KernelGlobals *kg, ccl_addr_s
 	if(attr_offset != ATTR_STD_NOT_FOUND) {
 		float3 data = primitive_attribute_float3(kg, sd, attr_elem, attr_offset, NULL, NULL);
 		data = make_float3(-(data.y - 0.5f), (data.x - 0.5f), 0.0f);
-#ifdef __SPLIT_KERNEL__
-		object_normal_transform_private_N(kg, sd, &data);
-#else
 		object_normal_transform(kg, sd, &data);
-#endif
 		return cross(sd_fetch(N), normalize(cross(data, sd_fetch(N))));
 	}
 	else {
diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h
index 1b7cc4b..cc83939 100644
--- a/intern/cycles/kernel/kernel_shader.h
+++ b/intern/cycles/kernel/kernel_shader.h
@@ -114,9 +114,17 @@ ccl_device void shader_setup_from_ray(ccl_addr_space KernelGlobals *kg, ccl_addr
 
 #ifdef __INSTANCING__
 	if(isect->object != OBJECT_NONE) {
+		/* Get values of N and Ng */
+		float3 sd_N = sd_fetch(N);
+		float3 sd_Ng = sd_fetch(Ng);
+
 		/* instance transform */
-		object_normal_transform(kg, sd, &sd_fetch(N));
-		object_normal_transform(kg, sd, &sd_fetch(Ng));
+		object_normal_transform(kg, sd, &sd_N);
+		object_normal_transform(kg, sd, &sd_Ng);
+
+		/* Store values to N and Ng */
+		sd_fetch(N) = sd_N;
+		sd_fetch(Ng) = sd_Ng;
 #ifdef __DPDU__
 		object_dir_transform(kg, sd, &sd_fetch(dPdu));
 		object_dir_transform(kg, sd, &sd_fetch(dPdv));
@@ -284,8 +292,11 @@ ccl_device void shader_setup_from_sample(ccl_addr_space KernelGlobals *kg, ccl_a
 			sd_fetch(N) = triangle_smooth_normal(kg, sd_fetch(prim), sd_fetch(u), sd_fetch(v));
 
 #ifdef __INSTANCING__
-			if(instanced)
-				object_normal_transform(kg, sd, &sd_fetch(N));
+			if(instanced) {
+				float3 sd_N = sd_fetch(N);
+				object_normal_transform(kg, sd, &sd_N);
+				sd_fetch(N) = sd_N;
+			}
 #endif
 		}
 
diff --git a/intern/cycles/kernel/svm/svm_tex_coord.h b/intern/cycles/kernel/svm/svm_tex_coord.h
index 177329b..1967b5a 100644
--- a/intern/cycles/kernel/svm/svm_tex_coord.h
+++ b/intern/cycles/kernel/svm/svm_tex_coord.h
@@ -315,11 +315,7 @@ ccl_device void svm_node_normal_map(ccl_addr_space KernelGlobals *kg, ccl_addr_s
 		N = normalize(color.x * tangent + color.y * B + color.z * normal);
 
 		/* transform to world space */
-#ifdef __SPLIT_KERNEL__
-		object_normal_transform_private_N(kg, sd, &N);
-#else
 		object_normal_transform(kg, sd, &N);
-#endif
 	}
 	else {
 		/* strange blender convention */
@@ -332,11 +328,7 @@ ccl_device void svm_node_normal_map(ccl_addr_space KernelGlobals *kg, ccl_addr_s
 		N = color;
 
 		if(space == NODE_NORMAL_MAP_OBJECT || space == NODE_NORMAL_MAP_BLENDER_OBJECT)
-#ifdef __SPLIT_KERNEL__
-			object_normal_transform_private_N(kg, sd, &N);
-#else
 			object_normal_transform(kg, sd, &N);
-#endif
 		else
 			N = normalize(N);
 	}
@@ -387,11 +379,8 @@ ccl_device void svm_node_tangent(ccl_addr_space KernelGlobals *kg, ccl_addr_spac
 			tangent = make_float3(-(generated.y - 0.5f), (generated.x - 0.5f), 0.0f);
 	}
 
-#ifdef __SPLIT_KERNEL__
-	object_normal_transform_private_N(kg, sd, &tangent);
-#else
 	object_normal_transform(kg, sd, &tangent);
-#endif
+
 	tangent = cross(sd_fetch(N), normalize(cross(tangent, sd_fetch(N))));
 	stack_store_float3(stack, tangent_offset, tangent);
 }




More information about the Bf-blender-cvs mailing list