Cycles: Simplify code around debug stats in BVH traversing
This commit is contained in:
@@ -48,6 +48,28 @@ CCL_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
#define BVH_FEATURE(f) (((BVH_FUNCTION_FEATURES) & (f)) != 0)
|
#define BVH_FEATURE(f) (((BVH_FUNCTION_FEATURES) & (f)) != 0)
|
||||||
|
|
||||||
|
/* Debugging heleprs */
|
||||||
|
#ifdef __KERNEL_DEBUG__
|
||||||
|
# define BVH_DEBUG_INIT() \
|
||||||
|
do { \
|
||||||
|
isect->num_traversal_steps = 0; \
|
||||||
|
isect->num_traversed_instances = 0; \
|
||||||
|
} while(0)
|
||||||
|
# define BVH_DEBUG_NEXT_STEP() \
|
||||||
|
do { \
|
||||||
|
++isect->num_traversal_steps; \
|
||||||
|
} while(0)
|
||||||
|
# define BVH_DEBUG_NEXT_INSTANCE() \
|
||||||
|
do { \
|
||||||
|
++isect->num_traversed_instances; \
|
||||||
|
} while(0)
|
||||||
|
#else /* __KERNEL_DEBUG__ */
|
||||||
|
# define BVH_DEBUG_INIT()
|
||||||
|
# define BVH_DEBUG_NEXT_STEP()
|
||||||
|
# define BVH_DEBUG_NEXT_INSTANCE()
|
||||||
|
#endif /* __KERNEL_DEBUG__ */
|
||||||
|
|
||||||
|
|
||||||
/* Common QBVH functions. */
|
/* Common QBVH functions. */
|
||||||
#ifdef __QBVH__
|
#ifdef __QBVH__
|
||||||
# include "geom_qbvh.h"
|
# include "geom_qbvh.h"
|
||||||
|
@@ -74,10 +74,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
|||||||
isect->prim = PRIM_NONE;
|
isect->prim = PRIM_NONE;
|
||||||
isect->object = OBJECT_NONE;
|
isect->object = OBJECT_NONE;
|
||||||
|
|
||||||
#if defined(__KERNEL_DEBUG__)
|
BVH_DEBUG_INIT();
|
||||||
isect->num_traversal_steps = 0;
|
|
||||||
isect->num_traversed_instances = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__KERNEL_SSE2__)
|
#if defined(__KERNEL_SSE2__)
|
||||||
const shuffle_swap_t shuf_identity = shuffle_swap_identity();
|
const shuffle_swap_t shuf_identity = shuffle_swap_identity();
|
||||||
@@ -241,10 +238,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
|||||||
--stackPtr;
|
--stackPtr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BVH_DEBUG_NEXT_STEP();
|
||||||
#if defined(__KERNEL_DEBUG__)
|
|
||||||
isect->num_traversal_steps++;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if node is leaf, fetch triangle list */
|
/* if node is leaf, fetch triangle list */
|
||||||
@@ -266,9 +260,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
|||||||
switch(type & PRIMITIVE_ALL) {
|
switch(type & PRIMITIVE_ALL) {
|
||||||
case PRIMITIVE_TRIANGLE: {
|
case PRIMITIVE_TRIANGLE: {
|
||||||
for(; primAddr < primAddr2; primAddr++) {
|
for(; primAddr < primAddr2; primAddr++) {
|
||||||
#if defined(__KERNEL_DEBUG__)
|
BVH_DEBUG_NEXT_STEP();
|
||||||
isect->num_traversal_steps++;
|
|
||||||
#endif
|
|
||||||
kernel_assert(kernel_tex_fetch(__prim_type, primAddr) == type);
|
kernel_assert(kernel_tex_fetch(__prim_type, primAddr) == type);
|
||||||
if(triangle_intersect(kg, &isect_precalc, isect, P, visibility, object, primAddr)) {
|
if(triangle_intersect(kg, &isect_precalc, isect, P, visibility, object, primAddr)) {
|
||||||
/* shadow ray early termination */
|
/* shadow ray early termination */
|
||||||
@@ -287,9 +279,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
|||||||
#if BVH_FEATURE(BVH_MOTION)
|
#if BVH_FEATURE(BVH_MOTION)
|
||||||
case PRIMITIVE_MOTION_TRIANGLE: {
|
case PRIMITIVE_MOTION_TRIANGLE: {
|
||||||
for(; primAddr < primAddr2; primAddr++) {
|
for(; primAddr < primAddr2; primAddr++) {
|
||||||
# if defined(__KERNEL_DEBUG__)
|
BVH_DEBUG_NEXT_STEP();
|
||||||
isect->num_traversal_steps++;
|
|
||||||
# endif
|
|
||||||
kernel_assert(kernel_tex_fetch(__prim_type, primAddr) == type);
|
kernel_assert(kernel_tex_fetch(__prim_type, primAddr) == type);
|
||||||
if(motion_triangle_intersect(kg, isect, P, dir, ray->time, visibility, object, primAddr)) {
|
if(motion_triangle_intersect(kg, isect, P, dir, ray->time, visibility, object, primAddr)) {
|
||||||
/* shadow ray early termination */
|
/* shadow ray early termination */
|
||||||
@@ -310,9 +300,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
|||||||
case PRIMITIVE_CURVE:
|
case PRIMITIVE_CURVE:
|
||||||
case PRIMITIVE_MOTION_CURVE: {
|
case PRIMITIVE_MOTION_CURVE: {
|
||||||
for(; primAddr < primAddr2; primAddr++) {
|
for(; primAddr < primAddr2; primAddr++) {
|
||||||
# if defined(__KERNEL_DEBUG__)
|
BVH_DEBUG_NEXT_STEP();
|
||||||
isect->num_traversal_steps++;
|
|
||||||
# endif
|
|
||||||
kernel_assert(kernel_tex_fetch(__prim_type, primAddr) == type);
|
kernel_assert(kernel_tex_fetch(__prim_type, primAddr) == type);
|
||||||
bool hit;
|
bool hit;
|
||||||
if(kernel_data.curve.curveflags & CURVE_KN_INTERPOLATE)
|
if(kernel_data.curve.curveflags & CURVE_KN_INTERPOLATE)
|
||||||
@@ -364,9 +352,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
|||||||
|
|
||||||
nodeAddr = kernel_tex_fetch(__object_node, object);
|
nodeAddr = kernel_tex_fetch(__object_node, object);
|
||||||
|
|
||||||
# if defined(__KERNEL_DEBUG__)
|
BVH_DEBUG_NEXT_INSTANCE();
|
||||||
isect->num_traversed_instances++;
|
|
||||||
# endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* FEATURE(BVH_INSTANCING) */
|
#endif /* FEATURE(BVH_INSTANCING) */
|
||||||
|
@@ -78,10 +78,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
|
|||||||
isect->prim = PRIM_NONE;
|
isect->prim = PRIM_NONE;
|
||||||
isect->object = OBJECT_NONE;
|
isect->object = OBJECT_NONE;
|
||||||
|
|
||||||
#if defined(__KERNEL_DEBUG__)
|
BVH_DEBUG_INIT();
|
||||||
isect->num_traversal_steps = 0;
|
|
||||||
isect->num_traversed_instances = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ssef tnear(0.0f), tfar(ray->t);
|
ssef tnear(0.0f), tfar(ray->t);
|
||||||
sse3f idir4(ssef(idir.x), ssef(idir.y), ssef(idir.z));
|
sse3f idir4(ssef(idir.x), ssef(idir.y), ssef(idir.z));
|
||||||
@@ -120,9 +117,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
|
|||||||
int traverseChild;
|
int traverseChild;
|
||||||
ssef dist;
|
ssef dist;
|
||||||
|
|
||||||
#if defined(__KERNEL_DEBUG__)
|
BVH_DEBUG_NEXT_STEP();
|
||||||
isect->num_traversal_steps++;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if BVH_FEATURE(BVH_HAIR_MINIMUM_WIDTH)
|
#if BVH_FEATURE(BVH_HAIR_MINIMUM_WIDTH)
|
||||||
if(difl != 0.0f) {
|
if(difl != 0.0f) {
|
||||||
@@ -295,9 +290,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
|
|||||||
switch(type & PRIMITIVE_ALL) {
|
switch(type & PRIMITIVE_ALL) {
|
||||||
case PRIMITIVE_TRIANGLE: {
|
case PRIMITIVE_TRIANGLE: {
|
||||||
for(; primAddr < primAddr2; primAddr++) {
|
for(; primAddr < primAddr2; primAddr++) {
|
||||||
#if defined(__KERNEL_DEBUG__)
|
BVH_DEBUG_NEXT_STEP();
|
||||||
isect->num_traversal_steps++;
|
|
||||||
#endif
|
|
||||||
kernel_assert(kernel_tex_fetch(__prim_type, primAddr) == type);
|
kernel_assert(kernel_tex_fetch(__prim_type, primAddr) == type);
|
||||||
if(triangle_intersect(kg, &isect_precalc, isect, P, visibility, object, primAddr)) {
|
if(triangle_intersect(kg, &isect_precalc, isect, P, visibility, object, primAddr)) {
|
||||||
tfar = ssef(isect->t);
|
tfar = ssef(isect->t);
|
||||||
@@ -311,9 +304,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
|
|||||||
#if BVH_FEATURE(BVH_MOTION)
|
#if BVH_FEATURE(BVH_MOTION)
|
||||||
case PRIMITIVE_MOTION_TRIANGLE: {
|
case PRIMITIVE_MOTION_TRIANGLE: {
|
||||||
for(; primAddr < primAddr2; primAddr++) {
|
for(; primAddr < primAddr2; primAddr++) {
|
||||||
# if defined(__KERNEL_DEBUG__)
|
BVH_DEBUG_NEXT_STEP();
|
||||||
isect->num_traversal_steps++;
|
|
||||||
# endif
|
|
||||||
kernel_assert(kernel_tex_fetch(__prim_type, primAddr) == type);
|
kernel_assert(kernel_tex_fetch(__prim_type, primAddr) == type);
|
||||||
if(motion_triangle_intersect(kg, isect, P, dir, ray->time, visibility, object, primAddr)) {
|
if(motion_triangle_intersect(kg, isect, P, dir, ray->time, visibility, object, primAddr)) {
|
||||||
tfar = ssef(isect->t);
|
tfar = ssef(isect->t);
|
||||||
@@ -329,9 +320,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
|
|||||||
case PRIMITIVE_CURVE:
|
case PRIMITIVE_CURVE:
|
||||||
case PRIMITIVE_MOTION_CURVE: {
|
case PRIMITIVE_MOTION_CURVE: {
|
||||||
for(; primAddr < primAddr2; primAddr++) {
|
for(; primAddr < primAddr2; primAddr++) {
|
||||||
# if defined(__KERNEL_DEBUG__)
|
BVH_DEBUG_NEXT_STEP();
|
||||||
isect->num_traversal_steps++;
|
|
||||||
# endif
|
|
||||||
kernel_assert(kernel_tex_fetch(__prim_type, primAddr) == type);
|
kernel_assert(kernel_tex_fetch(__prim_type, primAddr) == type);
|
||||||
bool hit;
|
bool hit;
|
||||||
if(kernel_data.curve.curveflags & CURVE_KN_INTERPOLATE)
|
if(kernel_data.curve.curveflags & CURVE_KN_INTERPOLATE)
|
||||||
@@ -381,9 +370,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
|
|||||||
|
|
||||||
nodeAddr = kernel_tex_fetch(__object_node, object);
|
nodeAddr = kernel_tex_fetch(__object_node, object);
|
||||||
|
|
||||||
# if defined(__KERNEL_DEBUG__)
|
BVH_DEBUG_NEXT_INSTANCE();
|
||||||
isect->num_traversed_instances++;
|
|
||||||
# endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* FEATURE(BVH_INSTANCING) */
|
#endif /* FEATURE(BVH_INSTANCING) */
|
||||||
|
Reference in New Issue
Block a user