[Bf-blender-cvs] [5261cd233c0] master: Fix Cycles crash rendering mix of instanced and non-instanced volumes.

Brecht Van Lommel noreply at git.blender.org
Sun Aug 5 12:14:29 CEST 2018


Commit: 5261cd233c0d4de30b792263d0ce6711efd5101a
Author: Brecht Van Lommel
Date:   Sun Aug 5 11:58:31 2018 +0200
Branches: master
https://developer.blender.org/rB5261cd233c0d4de30b792263d0ce6711efd5101a

Fix Cycles crash rendering mix of instanced and non-instanced volumes.

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

M	intern/cycles/kernel/bvh/bvh_volume_all.h
M	intern/cycles/kernel/bvh/qbvh_volume_all.h

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

diff --git a/intern/cycles/kernel/bvh/bvh_volume_all.h b/intern/cycles/kernel/bvh/bvh_volume_all.h
index f2379efc656..2ee29ac9c27 100644
--- a/intern/cycles/kernel/bvh/bvh_volume_all.h
+++ b/intern/cycles/kernel/bvh/bvh_volume_all.h
@@ -212,14 +212,16 @@ uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
 									isect_array->t = isect_t;
 									if(num_hits == max_hits) {
 #if BVH_FEATURE(BVH_INSTANCING)
+										if(object != OBJECT_NONE) {
 #  if BVH_FEATURE(BVH_MOTION)
-										float t_fac = 1.0f / len(transform_direction(&ob_itfm, dir));
+											float t_fac = 1.0f / len(transform_direction(&ob_itfm, dir));
 #  else
-										Transform itfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM);
-										float t_fac = 1.0f / len(transform_direction(&itfm, dir));
+											Transform itfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM);
+											float t_fac = 1.0f / len(transform_direction(&itfm, dir));
 #  endif
-										for(int i = 0; i < num_hits_in_instance; i++) {
-											(isect_array-i-1)->t *= t_fac;
+											for(int i = 0; i < num_hits_in_instance; i++) {
+												(isect_array-i-1)->t *= t_fac;
+											}
 										}
 #endif  /* BVH_FEATURE(BVH_INSTANCING) */
 										return num_hits;
@@ -257,14 +259,16 @@ uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
 									isect_array->t = isect_t;
 									if(num_hits == max_hits) {
 #  if BVH_FEATURE(BVH_INSTANCING)
+										if(object != OBJECT_NONE) {
 #    if BVH_FEATURE(BVH_MOTION)
-										float t_fac = 1.0f / len(transform_direction(&ob_itfm, dir));
+											float t_fac = 1.0f / len(transform_direction(&ob_itfm, dir));
 #    else
-										Transform itfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM);
-										float t_fac = 1.0f / len(transform_direction(&itfm, dir));
+											Transform itfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM);
+											float t_fac = 1.0f / len(transform_direction(&itfm, dir));
 #    endif
-										for(int i = 0; i < num_hits_in_instance; i++) {
-											(isect_array-i-1)->t *= t_fac;
+											for(int i = 0; i < num_hits_in_instance; i++) {
+												(isect_array-i-1)->t *= t_fac;
+											}
 										}
 #  endif  /* BVH_FEATURE(BVH_INSTANCING) */
 										return num_hits;
diff --git a/intern/cycles/kernel/bvh/qbvh_volume_all.h b/intern/cycles/kernel/bvh/qbvh_volume_all.h
index ac5f58a9a51..1e454e4d36b 100644
--- a/intern/cycles/kernel/bvh/qbvh_volume_all.h
+++ b/intern/cycles/kernel/bvh/qbvh_volume_all.h
@@ -279,14 +279,16 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
 									isect_array->t = isect_t;
 									if(num_hits == max_hits) {
 #if BVH_FEATURE(BVH_INSTANCING)
+										if(object != OBJECT_NONE) {
 #  if BVH_FEATURE(BVH_MOTION)
-										float t_fac = 1.0f / len(transform_direction(&ob_itfm, dir));
+											float t_fac = 1.0f / len(transform_direction(&ob_itfm, dir));
 #  else
-										Transform itfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM);
-										float t_fac = 1.0f / len(transform_direction(&itfm, dir));
+											Transform itfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM);
+											float t_fac = 1.0f / len(transform_direction(&itfm, dir));
 #  endif
-										for(int i = 0; i < num_hits_in_instance; i++) {
-											(isect_array-i-1)->t *= t_fac;
+											for(int i = 0; i < num_hits_in_instance; i++) {
+												(isect_array-i-1)->t *= t_fac;
+											}
 										}
 #endif  /* BVH_FEATURE(BVH_INSTANCING) */
 										return num_hits;
@@ -317,14 +319,16 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
 									isect_array->t = isect_t;
 									if(num_hits == max_hits) {
 #  if BVH_FEATURE(BVH_INSTANCING)
+										if(object != OBJECT_NONE) {
 #    if BVH_FEATURE(BVH_MOTION)
-										float t_fac = 1.0f / len(transform_direction(&ob_itfm, dir));
+											float t_fac = 1.0f / len(transform_direction(&ob_itfm, dir));
 #    else
-										Transform itfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM);
-										float t_fac = 1.0f / len(transform_direction(&itfm, dir));
+											Transform itfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM);
+											float t_fac = 1.0f / len(transform_direction(&itfm, dir));
 #    endif
-										for(int i = 0; i < num_hits_in_instance; i++) {
-											(isect_array-i-1)->t *= t_fac;
+											for(int i = 0; i < num_hits_in_instance; i++) {
+												(isect_array-i-1)->t *= t_fac;
+											}
 										}
 #  endif  /* BVH_FEATURE(BVH_INSTANCING) */
 										return num_hits;



More information about the Bf-blender-cvs mailing list