diff --git a/intern/cycles/kernel/geom/geom_qbvh_shadow.h b/intern/cycles/kernel/geom/geom_qbvh_shadow.h index 2d1ad498972..09d05f17e89 100644 --- a/intern/cycles/kernel/geom/geom_qbvh_shadow.h +++ b/intern/cycles/kernel/geom/geom_qbvh_shadow.h @@ -194,6 +194,15 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg, /* If node is leaf, fetch triangle list. */ if(nodeAddr < 0) { float4 leaf = kernel_tex_fetch(__bvh_nodes, (-nodeAddr-1)*BVH_QNODE_SIZE+6); +#ifdef __VISIBILITY_FLAG__ + if((__float_as_uint(leaf.z) & PATH_RAY_SHADOW) == 0) { + /* Pop. */ + nodeAddr = traversalStack[stackPtr].addr; + --stackPtr; + continue; + } +#endif + int primAddr = __float_as_int(leaf.x); #if BVH_FEATURE(BVH_INSTANCING) @@ -205,12 +214,6 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg, nodeAddr = traversalStack[stackPtr].addr; --stackPtr; -#ifdef __VISIBILITY_FLAG__ - if((__float_as_uint(leaf.z) & PATH_RAY_SHADOW) == 0) { - continue; - } -#endif - /* Primitive intersection. */ while(primAddr < primAddr2) { bool hit; diff --git a/intern/cycles/kernel/geom/geom_qbvh_traversal.h b/intern/cycles/kernel/geom/geom_qbvh_traversal.h index fdb22725ceb..9989f83c031 100644 --- a/intern/cycles/kernel/geom/geom_qbvh_traversal.h +++ b/intern/cycles/kernel/geom/geom_qbvh_traversal.h @@ -247,7 +247,14 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg, /* If node is leaf, fetch triangle list. */ if(nodeAddr < 0) { - if(UNLIKELY(nodeDist > isect->t)) { + float4 leaf = kernel_tex_fetch(__bvh_nodes, (-nodeAddr-1)*BVH_QNODE_SIZE+6); + + if(UNLIKELY((nodeDist > isect->t) +#ifdef __VISIBILITY_FLAG__ + || ((__float_as_uint(leaf.z) & visibility) == 0) +#endif + )) + { /* Pop. */ nodeAddr = traversalStack[stackPtr].addr; nodeDist = traversalStack[stackPtr].dist; @@ -255,7 +262,6 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg, continue; } - float4 leaf = kernel_tex_fetch(__bvh_nodes, (-nodeAddr-1)*BVH_QNODE_SIZE+6); int primAddr = __float_as_int(leaf.x); #if BVH_FEATURE(BVH_INSTANCING) @@ -268,12 +274,6 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg, nodeDist = traversalStack[stackPtr].dist; --stackPtr; -#ifdef __VISIBILITY_FLAG__ - if((__float_as_uint(leaf.z) & visibility) == 0) { - continue; - } -#endif - /* Primitive intersection. */ while(primAddr < primAddr2) { bool hit;