Commit: bc096e1eb8790c1624ce7386cd86668267fbea48
Author: Sergey Sharybin
Date:   Fri Dec 23 11:31:19 2016 +0100
Branches: master
https://developer.blender.org/rBbc096e1eb8790c1624ce7386cd86668267fbea48

Cycles: Split ShaderData object and shader flags

We started to run out of bits there, so now we separate flags
which came from __object_flags and which are either runtime or
coming from __shader_flags.

Rule now is: SD_OBJECT_* flags are to be tested against new
object_flags field of ShaderData, all the rest flags are to
be tested against flags field of ShaderData.

There should be no user-visible changes, and time difference
should be minimal. In fact, from tests here can only see hardly
measurable difference and sometimes the new code is somewhat
faster (all within a noise floor, so hard to tell for sure).

Reviewers: brecht, dingto, juicyfruit, lukasstockner97, maiself

Differential Revision: https://developer.blender.org/D2428

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

M       intern/cycles/kernel/bvh/bvh_volume.h
M       intern/cycles/kernel/bvh/bvh_volume_all.h
M       intern/cycles/kernel/bvh/qbvh_volume.h
M       intern/cycles/kernel/bvh/qbvh_volume_all.h
M       intern/cycles/kernel/geom/geom_motion_triangle_shader.h
M       intern/cycles/kernel/geom/geom_object.h
M       intern/cycles/kernel/geom/geom_primitive.h
M       intern/cycles/kernel/geom/geom_triangle.h
M       intern/cycles/kernel/kernel_path.h
M       intern/cycles/kernel/kernel_path_branched.h
M       intern/cycles/kernel/kernel_shader.h
M       intern/cycles/kernel/kernel_types.h
M       intern/cycles/kernel/osl/osl_services.cpp
M       
intern/cycles/kernel/split/kernel_holdout_emission_blurring_pathtermination_ao.h
M       intern/cycles/kernel/svm/svm_wireframe.h

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

diff --git a/intern/cycles/kernel/bvh/bvh_volume.h 
b/intern/cycles/kernel/bvh/bvh_volume.h
index 107373c17d..57e5b8d736 100644
--- a/intern/cycles/kernel/bvh/bvh_volume.h
+++ b/intern/cycles/kernel/bvh/bvh_volume.h
@@ -236,9 +236,7 @@ bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
                                        /* instance push */
                                        object = 
kernel_tex_fetch(__prim_object, -prim_addr-1);
                                        int object_flag = 
kernel_tex_fetch(__object_flag, object);
-
                                        if(object_flag & SD_OBJECT_HAS_VOLUME) {
-
 #  if BVH_FEATURE(BVH_MOTION)
                                                bvh_instance_motion_push(kg, 
object, ray, &P, &dir, &idir, &isect->t, &ob_itfm);
 #  else
diff --git a/intern/cycles/kernel/bvh/bvh_volume_all.h 
b/intern/cycles/kernel/bvh/bvh_volume_all.h
index 529848ebe7..5a1accebaa 100644
--- a/intern/cycles/kernel/bvh/bvh_volume_all.h
+++ b/intern/cycles/kernel/bvh/bvh_volume_all.h
@@ -287,7 +287,6 @@ uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
                                        /* instance push */
                                        object = 
kernel_tex_fetch(__prim_object, -prim_addr-1);
                                        int object_flag = 
kernel_tex_fetch(__object_flag, object);
-
                                        if(object_flag & SD_OBJECT_HAS_VOLUME) {
 
 #  if BVH_FEATURE(BVH_MOTION)
diff --git a/intern/cycles/kernel/bvh/qbvh_volume.h 
b/intern/cycles/kernel/bvh/qbvh_volume.h
index 1e77d8e67e..dc6627e2db 100644
--- a/intern/cycles/kernel/bvh/qbvh_volume.h
+++ b/intern/cycles/kernel/bvh/qbvh_volume.h
@@ -293,7 +293,6 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals 
*kg,
                                        /* Instance push. */
                                        object = 
kernel_tex_fetch(__prim_object, -prim_addr-1);
                                        int object_flag = 
kernel_tex_fetch(__object_flag, object);
-
                                        if(object_flag & SD_OBJECT_HAS_VOLUME) {
 #  if BVH_FEATURE(BVH_MOTION)
                                                bvh_instance_motion_push(kg, 
object, ray, &P, &dir, &idir, &isect->t, &ob_itfm);
diff --git a/intern/cycles/kernel/bvh/qbvh_volume_all.h 
b/intern/cycles/kernel/bvh/qbvh_volume_all.h
index eb48af6fc6..ff1fa92af6 100644
--- a/intern/cycles/kernel/bvh/qbvh_volume_all.h
+++ b/intern/cycles/kernel/bvh/qbvh_volume_all.h
@@ -344,9 +344,7 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals 
*kg,
                                        /* Instance push. */
                                        object = 
kernel_tex_fetch(__prim_object, -prim_addr-1);
                                        int object_flag = 
kernel_tex_fetch(__object_flag, object);
-
                                        if(object_flag & SD_OBJECT_HAS_VOLUME) {
-
 #  if BVH_FEATURE(BVH_MOTION)
                                                bvh_instance_motion_push(kg, 
object, ray, &P, &dir, &idir, &isect_t, &ob_itfm);
 #  else
diff --git a/intern/cycles/kernel/geom/geom_motion_triangle_shader.h 
b/intern/cycles/kernel/geom/geom_motion_triangle_shader.h
index 5b1e014f85..0e024a05db 100644
--- a/intern/cycles/kernel/geom/geom_motion_triangle_shader.h
+++ b/intern/cycles/kernel/geom/geom_motion_triangle_shader.h
@@ -81,7 +81,7 @@ ccl_device_noinline void 
motion_triangle_shader_setup(KernelGlobals *kg,
        }
        /* Compute face normal. */
        float3 Ng;
-       if(ccl_fetch(sd, flag) & SD_OBJECT_NEGATIVE_SCALE_APPLIED) {
+       if(ccl_fetch(sd, object_flag) & SD_OBJECT_NEGATIVE_SCALE_APPLIED) {
                Ng = normalize(cross(verts[2] - verts[0], verts[1] - verts[0]));
        }
        else {
diff --git a/intern/cycles/kernel/geom/geom_object.h 
b/intern/cycles/kernel/geom/geom_object.h
index 9f0fe032ba..f51b2d1865 100644
--- a/intern/cycles/kernel/geom/geom_object.h
+++ b/intern/cycles/kernel/geom/geom_object.h
@@ -113,7 +113,6 @@ ccl_device_inline Transform 
object_fetch_transform_motion(KernelGlobals *kg, int
 ccl_device_inline Transform object_fetch_transform_motion_test(KernelGlobals 
*kg, int object, float time, Transform *itfm)
 {
        int object_flag = kernel_tex_fetch(__object_flag, object);
-
        if(object_flag & SD_OBJECT_MOTION) {
                /* if we do motion blur */
                Transform tfm = object_fetch_transform_motion(kg, object, time);
diff --git a/intern/cycles/kernel/geom/geom_primitive.h 
b/intern/cycles/kernel/geom/geom_primitive.h
index dba82588db..8a73bb2f78 100644
--- a/intern/cycles/kernel/geom/geom_primitive.h
+++ b/intern/cycles/kernel/geom/geom_primitive.h
@@ -157,8 +157,9 @@ ccl_device_inline float4 
primitive_motion_vector(KernelGlobals *kg, ShaderData *
        if(is_curve_primitive) {
                center = curve_motion_center_location(kg, sd);
 
-               if(!(ccl_fetch(sd, flag) & SD_OBJECT_TRANSFORM_APPLIED))
+               if(!(ccl_fetch(sd, object_flag) & SD_OBJECT_TRANSFORM_APPLIED)) 
{
                        object_position_transform(kg, sd, &center);
+               }
        }
        else
 #endif
@@ -181,7 +182,7 @@ ccl_device_inline float4 
primitive_motion_vector(KernelGlobals *kg, ShaderData *
                motion_post = primitive_attribute_float3(kg, sd, desc, NULL, 
NULL);
 
 #ifdef __HAIR__
-               if(is_curve_primitive && (ccl_fetch(sd, flag) & 
SD_OBJECT_HAS_VERTEX_MOTION) == 0) {
+               if(is_curve_primitive && (ccl_fetch(sd, object_flag) & 
SD_OBJECT_HAS_VERTEX_MOTION) == 0) {
                        object_position_transform(kg, sd, &motion_pre);
                        object_position_transform(kg, sd, &motion_post);
                }
diff --git a/intern/cycles/kernel/geom/geom_triangle.h 
b/intern/cycles/kernel/geom/geom_triangle.h
index 9ed619f0bb..3229091bbb 100644
--- a/intern/cycles/kernel/geom/geom_triangle.h
+++ b/intern/cycles/kernel/geom/geom_triangle.h
@@ -32,10 +32,12 @@ ccl_device_inline float3 triangle_normal(KernelGlobals *kg, 
ShaderData *sd)
        const float3 v2 = float4_to_float3(kernel_tex_fetch(__prim_tri_verts, 
tri_vindex.w+2));
 
        /* return normal */
-       if(ccl_fetch(sd, flag) & SD_OBJECT_NEGATIVE_SCALE_APPLIED)
+       if(ccl_fetch(sd, object_flag) & SD_OBJECT_NEGATIVE_SCALE_APPLIED) {
                return normalize(cross(v2 - v0, v1 - v0));
-       else
+       }
+       else {
                return normalize(cross(v1 - v0, v2 - v0));
+       }
 }
 
 /* point and normal on triangle  */
@@ -46,20 +48,18 @@ ccl_device_inline void triangle_point_normal(KernelGlobals 
*kg, int object, int
        float3 v0 = float4_to_float3(kernel_tex_fetch(__prim_tri_verts, 
tri_vindex.w+0));
        float3 v1 = float4_to_float3(kernel_tex_fetch(__prim_tri_verts, 
tri_vindex.w+1));
        float3 v2 = float4_to_float3(kernel_tex_fetch(__prim_tri_verts, 
tri_vindex.w+2));
-
        /* compute point */
        float t = 1.0f - u - v;
        *P = (u*v0 + v*v1 + t*v2);
-
        /* get object flags */
        int object_flag = kernel_tex_fetch(__object_flag, object);
-
        /* compute normal */
-       if(object_flag & SD_OBJECT_NEGATIVE_SCALE_APPLIED)
+       if(object_flag & SD_OBJECT_NEGATIVE_SCALE_APPLIED) {
                *Ng = normalize(cross(v2 - v0, v1 - v0));
-       else
+       }
+       else {
                *Ng = normalize(cross(v1 - v0, v2 - v0));
-
+       }
        /* shader`*/
        *shader = kernel_tex_fetch(__tri_shader, prim);
 }
diff --git a/intern/cycles/kernel/kernel_path.h 
b/intern/cycles/kernel/kernel_path.h
index 557c308b74..8ce9a4f02e 100644
--- a/intern/cycles/kernel/kernel_path.h
+++ b/intern/cycles/kernel/kernel_path.h
@@ -452,7 +452,7 @@ bool kernel_path_subsurface_scatter(
 #  ifdef __VOLUME__
                ss_indirect->need_update_volume_stack =
                        kernel_data.integrator.use_volumes &&
-                       ccl_fetch(sd, flag) & SD_OBJECT_INTERSECTS_VOLUME;
+                       ccl_fetch(sd, object_flag) & 
SD_OBJECT_INTERSECTS_VOLUME;
 #  endif  /* __VOLUME__ */
 
                /* compute lighting with the BSDF closure */
@@ -777,21 +777,25 @@ ccl_device_inline float4 
kernel_path_integrate(KernelGlobals *kg,
 
                /* holdout */
 #ifdef __HOLDOUT__
-               if((sd.flag & (SD_HOLDOUT|SD_OBJECT_HOLDOUT_MASK)) && 
(state.flag & PATH_RAY_CAMERA)) {
+               if(((sd.flag & SD_HOLDOUT) ||
+                   (sd.object_flag & SD_OBJECT_HOLDOUT_MASK)) &&
+                  (state.flag & PATH_RAY_CAMERA))
+               {
                        if(kernel_data.background.transparent) {
                                float3 holdout_weight;
-                               
-                               if(sd.flag & SD_OBJECT_HOLDOUT_MASK)
+                               if(sd.object_flag & SD_OBJECT_HOLDOUT_MASK) {
                                        holdout_weight = make_float3(1.0f, 
1.0f, 1.0f);
-                               else
+                               }
+                               else {
                                        holdout_weight = 
shader_holdout_eval(kg, &sd);
-
+                               }
                                /* any throughput is ok, should all be 
identical here */
                                L_transparent += 
average(holdout_weight*throughput);
                        }
 
-                       if(sd.flag & SD_OBJECT_HOLDOUT_MASK)
+                       if(sd.object_flag & SD_OBJECT_HOLDOUT_MASK) {
                                break;
+                       }
                }
 #endif  /* __HOLDOUT__ */
 
diff --git a/intern/cycles/kernel/kernel_path_branched.h 
b/intern/cycles/kernel/kernel_path_branched.h
index 4ec0ac8e8c..ff2b828795 100644
--- a/intern/cycles/kernel/kernel_path_branched.h
+++ b/intern/cycles/kernel/kernel_path_branched.h
@@ -167,8 +167,9 @@ ccl_device void 
kernel_branched_path_subsurface_scatter(KernelGlobals *kg,
                                                                          true);
 #ifdef __VOLUME__
                        Ray volume_ray = *ray;
-                       bool need_update_volume_stack = 
kernel_data.integrator.use_volumes &&
-                                                       ccl_fetch(sd, flag) & 
SD_OBJECT_INTERSECTS_VOLUME;
+                       bool need_update_volume_stack =
+                               kernel_data.integrator.use_volumes &&
+                               ccl_fetch(sd, object_flag) & 
SD_OBJECT_INTERSECTS_VOLUME;
 #endif  /* __VOLUME__ */
 
                        /* compute lighting with the BSDF closure */
@@ -473,21 +474,21 @@ ccl_device float4 
kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in
 
                /* holdout */
 #ifdef __HOLDOUT__
-               if(sd.flag & (SD_HOLDOUT|SD_OBJECT_HOLDOUT_MASK)) {
+               if((sd.flag & SD_HOLDOUT) || (sd.object_flag & 
SD_OBJECT_HOLDOUT_MASK)) {
                        if(kernel_data.background.transparent) {
                                float3 holdout_weight;
-                               
-                               if(sd.flag & SD_OBJECT_HOLDOUT_MASK)
+                               if(sd.object_flag & SD_OBJECT_HOLDOUT_MASK) {
                                        holdout_weight = make_float3(1.0f, 
1.0f, 1.0f);
-                               else
+                               }
+                               else {
                                        holdout_weight = 
shader_holdout_eval(kg, &sd);
-
+                               }
                                /* any throughput is ok, should all be 
identical here */
                                L_transparent += 
average(holdout_weight*throughput);
                        }
-
-                       if(sd.flag & SD_OBJECT_HOLDOUT_MASK)
+                       if(sd.object_flag & SD_OBJECT_HOLDOUT_MASK) {
                                break;
+                       }
                }
 #endif  /* __HOLDOUT__ */
 
diff --git a/intern/cycles/kernel/kernel_shader.h 
b/intern/cycles/kernel/kernel_shader.h
index d7a9167aaf..d0826e5e87 100644
--- a/intern/cycles/kernel/kernel_shader.h
+++ b/intern/cycles/kernel/kernel_shader.h
@@ -38,7 +38,7 @@ CCL_NAMESPACE_BEGIN
 #ifdef __OBJECT_MOTION__
 ccl_device void shader_setup_object_transforms(KernelGlobals *kg, ShaderData 
*sd, float time)
 {
-       if(ccl_fetch(sd, flag) & SD_OBJECT_MOTION) {
+       if(ccl_fetch(sd, object_flag) & SD_OBJECT_MOTION) {
                ccl_fetch(sd, ob_tfm) = object_fetch_transform_motion(kg, 
ccl_fetch(sd, object), time);
                ccl_fetch(sd, ob_itfm) = transform_quick_inverse(ccl_fetch(sd, 
ob_tfm)

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to