[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