Cycles: Code cleanup, de-duplicate definition of FEATURE
Previously every BVH traversal file was defining macro to check which features should be compiled in, now this macro is defined in the parent header.
This commit is contained in:
@@ -46,6 +46,8 @@ CCL_NAMESPACE_BEGIN
|
||||
#define BVH_NAME_EVAL(x,y) BVH_NAME_JOIN(x,y)
|
||||
#define BVH_FUNCTION_FULL_NAME(prefix) BVH_NAME_EVAL(prefix, BVH_FUNCTION_NAME)
|
||||
|
||||
#define BVH_FEATURE(f) (((BVH_FUNCTION_FEATURES) & (f)) != 0)
|
||||
|
||||
/* Regular BVH traversal */
|
||||
|
||||
#define BVH_FUNCTION_NAME bvh_intersect
|
||||
@@ -172,6 +174,7 @@ CCL_NAMESPACE_BEGIN
|
||||
#include "geom_bvh_volume.h"
|
||||
#endif
|
||||
|
||||
#undef BVH_FEATURE
|
||||
#undef BVH_NAME_JOIN
|
||||
#undef BVH_NAME_EVAL
|
||||
#undef BVH_FUNCTION_FULL_NAME
|
||||
|
@@ -27,8 +27,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define FEATURE(f) (((BVH_FUNCTION_FEATURES) & (f)) != 0)
|
||||
|
||||
ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
const Ray *ray,
|
||||
Intersection *isect_array,
|
||||
@@ -56,11 +54,11 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
int object = OBJECT_NONE;
|
||||
float isect_t = tmax;
|
||||
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
Transform ob_tfm;
|
||||
#endif
|
||||
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
int num_hits_in_instance = 0;
|
||||
#endif
|
||||
|
||||
@@ -200,7 +198,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
float4 leaf = kernel_tex_fetch(__bvh_nodes, (-nodeAddr-1)*BVH_NODE_SIZE+3);
|
||||
int primAddr = __float_as_int(leaf.x);
|
||||
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
if(primAddr >= 0) {
|
||||
#endif
|
||||
int primAddr2 = __float_as_int(leaf.y);
|
||||
@@ -223,13 +221,13 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
hit = triangle_intersect(kg, &isect_precalc, isect_array, P, dir, PATH_RAY_SHADOW, object, primAddr);
|
||||
break;
|
||||
}
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
case PRIMITIVE_MOTION_TRIANGLE: {
|
||||
hit = motion_triangle_intersect(kg, isect_array, P, dir, ray->time, PATH_RAY_SHADOW, object, primAddr);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#if FEATURE(BVH_HAIR)
|
||||
#if BVH_FEATURE(BVH_HAIR)
|
||||
case PRIMITIVE_CURVE:
|
||||
case PRIMITIVE_MOTION_CURVE: {
|
||||
if(kernel_data.curve.curveflags & CURVE_KN_INTERPOLATE)
|
||||
@@ -280,7 +278,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
/* move on to next entry in intersections array */
|
||||
isect_array++;
|
||||
(*num_hits)++;
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
num_hits_in_instance++;
|
||||
#endif
|
||||
|
||||
@@ -290,12 +288,12 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
primAddr++;
|
||||
}
|
||||
}
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
else {
|
||||
/* instance push */
|
||||
object = kernel_tex_fetch(__prim_object, -primAddr-1);
|
||||
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
bvh_instance_motion_push(kg, object, ray, &P, &dir, &idir, &isect_t, &ob_tfm);
|
||||
#else
|
||||
bvh_instance_push(kg, object, ray, &P, &dir, &idir, &isect_t);
|
||||
@@ -324,14 +322,14 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
#endif /* FEATURE(BVH_INSTANCING) */
|
||||
} while(nodeAddr != ENTRYPOINT_SENTINEL);
|
||||
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
if(stackPtr >= 0) {
|
||||
kernel_assert(object != OBJECT_NONE);
|
||||
|
||||
if(num_hits_in_instance) {
|
||||
float t_fac;
|
||||
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
bvh_instance_motion_pop_factor(kg, object, ray, &P, &dir, &idir, &t_fac, &ob_tfm);
|
||||
#else
|
||||
bvh_instance_pop_factor(kg, object, ray, &P, &dir, &idir, &t_fac);
|
||||
@@ -346,7 +344,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
else {
|
||||
float ignore_t = FLT_MAX;
|
||||
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
bvh_instance_motion_pop(kg, object, ray, &P, &dir, &idir, &ignore_t, &ob_tfm);
|
||||
#else
|
||||
bvh_instance_pop(kg, object, ray, &P, &dir, &idir, &ignore_t);
|
||||
@@ -389,6 +387,5 @@ ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals *kg,
|
||||
num_hits);
|
||||
}
|
||||
|
||||
#undef FEATURE
|
||||
#undef BVH_FUNCTION_NAME
|
||||
#undef BVH_FUNCTION_FEATURES
|
||||
|
@@ -26,8 +26,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define FEATURE(f) (((BVH_FUNCTION_FEATURES) & (f)) != 0)
|
||||
|
||||
ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
const Ray *ray,
|
||||
Intersection *isect_array,
|
||||
@@ -60,7 +58,7 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
|
||||
uint num_hits = 0;
|
||||
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
Transform ob_tfm;
|
||||
#endif
|
||||
|
||||
@@ -187,7 +185,7 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
float4 leaf = kernel_tex_fetch(__bvh_nodes, (-nodeAddr-1)*BVH_NODE_SIZE+3);
|
||||
int primAddr = __float_as_int(leaf.x);
|
||||
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
if(primAddr >= 0) {
|
||||
#endif
|
||||
int primAddr2 = __float_as_int(leaf.y);
|
||||
@@ -212,7 +210,7 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
triangle_intersect_subsurface(kg, &isect_precalc, isect_array, P, dir, object, primAddr, isect_t, &num_hits, lcg_state, max_hits);
|
||||
break;
|
||||
}
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
case PRIMITIVE_MOTION_TRIANGLE: {
|
||||
motion_triangle_intersect_subsurface(kg, isect_array, P, dir, ray->time, object, primAddr, isect_t, &num_hits, lcg_state, max_hits);
|
||||
break;
|
||||
@@ -224,13 +222,13 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
}
|
||||
}
|
||||
}
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
else {
|
||||
/* instance push */
|
||||
if(subsurface_object == kernel_tex_fetch(__prim_object, -primAddr-1)) {
|
||||
object = subsurface_object;
|
||||
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
bvh_instance_motion_push(kg, object, ray, &P, &dir, &idir, &isect_t, &ob_tfm);
|
||||
#else
|
||||
bvh_instance_push(kg, object, ray, &P, &dir, &idir, &isect_t);
|
||||
@@ -262,12 +260,12 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
#endif /* FEATURE(BVH_INSTANCING) */
|
||||
} while(nodeAddr != ENTRYPOINT_SENTINEL);
|
||||
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
if(stackPtr >= 0) {
|
||||
kernel_assert(object != OBJECT_NONE);
|
||||
|
||||
/* instance pop */
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
bvh_instance_motion_pop(kg, object, ray, &P, &dir, &idir, &isect_t, &ob_tfm);
|
||||
#else
|
||||
bvh_instance_pop(kg, object, ray, &P, &dir, &idir, &isect_t);
|
||||
@@ -310,6 +308,5 @@ ccl_device_inline uint BVH_FUNCTION_NAME(KernelGlobals *kg,
|
||||
max_hits);
|
||||
}
|
||||
|
||||
#undef FEATURE
|
||||
#undef BVH_FUNCTION_NAME
|
||||
#undef BVH_FUNCTION_FEATURES
|
||||
|
@@ -28,13 +28,11 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define FEATURE(f) (((BVH_FUNCTION_FEATURES) & (f)) != 0)
|
||||
|
||||
ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
const Ray *ray,
|
||||
Intersection *isect,
|
||||
const uint visibility
|
||||
#if FEATURE(BVH_HAIR_MINIMUM_WIDTH)
|
||||
#if BVH_FEATURE(BVH_HAIR_MINIMUM_WIDTH)
|
||||
, uint *lcg_state,
|
||||
float difl,
|
||||
float extmax
|
||||
@@ -62,7 +60,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
float3 idir = bvh_inverse_direction(dir);
|
||||
int object = OBJECT_NONE;
|
||||
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
Transform ob_tfm;
|
||||
#endif
|
||||
|
||||
@@ -133,7 +131,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
NO_EXTENDED_PRECISION float c1min = max4(min(c1lox, c1hix), min(c1loy, c1hiy), min(c1loz, c1hiz), 0.0f);
|
||||
NO_EXTENDED_PRECISION float c1max = min4(max(c1lox, c1hix), max(c1loy, c1hiy), max(c1loz, c1hiz), t);
|
||||
|
||||
#if FEATURE(BVH_HAIR_MINIMUM_WIDTH)
|
||||
#if BVH_FEATURE(BVH_HAIR_MINIMUM_WIDTH)
|
||||
if(difl != 0.0f) {
|
||||
float hdiff = 1.0f + difl;
|
||||
float ldiff = 1.0f - difl;
|
||||
@@ -174,7 +172,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
ssef minmax = max(max(tminmaxx, tminmaxy), max(tminmaxz, tsplat));
|
||||
const ssef tminmax = minmax ^ pn;
|
||||
|
||||
#if FEATURE(BVH_HAIR_MINIMUM_WIDTH)
|
||||
#if BVH_FEATURE(BVH_HAIR_MINIMUM_WIDTH)
|
||||
if(difl != 0.0f) {
|
||||
float4 *tminmaxview = (float4*)&tminmax;
|
||||
float &c0min = tminmaxview->x, &c1min = tminmaxview->y;
|
||||
@@ -248,7 +246,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
float4 leaf = kernel_tex_fetch(__bvh_nodes, (-nodeAddr-1)*BVH_NODE_SIZE+3);
|
||||
int primAddr = __float_as_int(leaf.x);
|
||||
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
if(primAddr >= 0) {
|
||||
#endif
|
||||
int primAddr2 = __float_as_int(leaf.y);
|
||||
@@ -267,13 +265,13 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
hit = triangle_intersect(kg, &isect_precalc, isect, P, dir, visibility, object, primAddr);
|
||||
break;
|
||||
}
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
case PRIMITIVE_MOTION_TRIANGLE: {
|
||||
hit = motion_triangle_intersect(kg, isect, P, dir, ray->time, visibility, object, primAddr);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#if FEATURE(BVH_HAIR)
|
||||
#if BVH_FEATURE(BVH_HAIR)
|
||||
case PRIMITIVE_CURVE:
|
||||
case PRIMITIVE_MOTION_CURVE: {
|
||||
if(kernel_data.curve.curveflags & CURVE_KN_INTERPOLATE)
|
||||
@@ -309,12 +307,12 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
primAddr++;
|
||||
}
|
||||
}
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
else {
|
||||
/* instance push */
|
||||
object = kernel_tex_fetch(__prim_object, -primAddr-1);
|
||||
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
bvh_instance_motion_push(kg, object, ray, &P, &dir, &idir, &isect->t, &ob_tfm);
|
||||
#else
|
||||
bvh_instance_push(kg, object, ray, &P, &dir, &idir, &isect->t);
|
||||
@@ -340,12 +338,12 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
#endif /* FEATURE(BVH_INSTANCING) */
|
||||
} while(nodeAddr != ENTRYPOINT_SENTINEL);
|
||||
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
if(stackPtr >= 0) {
|
||||
kernel_assert(object != OBJECT_NONE);
|
||||
|
||||
/* instance pop */
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
bvh_instance_motion_pop(kg, object, ray, &P, &dir, &idir, &isect->t, &ob_tfm);
|
||||
#else
|
||||
bvh_instance_pop(kg, object, ray, &P, &dir, &idir, &isect->t);
|
||||
@@ -376,7 +374,7 @@ ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals *kg,
|
||||
const Ray *ray,
|
||||
Intersection *isect,
|
||||
const uint visibility
|
||||
#if FEATURE(BVH_HAIR_MINIMUM_WIDTH)
|
||||
#if BVH_FEATURE(BVH_HAIR_MINIMUM_WIDTH)
|
||||
, uint *lcg_state,
|
||||
float difl,
|
||||
float extmax
|
||||
@@ -387,7 +385,7 @@ ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals *kg,
|
||||
ray,
|
||||
isect,
|
||||
visibility
|
||||
#if FEATURE(BVH_HAIR_MINIMUM_WIDTH)
|
||||
#if BVH_FEATURE(BVH_HAIR_MINIMUM_WIDTH)
|
||||
, lcg_state,
|
||||
difl,
|
||||
extmax
|
||||
@@ -395,6 +393,5 @@ ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals *kg,
|
||||
);
|
||||
}
|
||||
|
||||
#undef FEATURE
|
||||
#undef BVH_FUNCTION_NAME
|
||||
#undef BVH_FUNCTION_FEATURES
|
||||
|
@@ -27,8 +27,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define FEATURE(f) (((BVH_FUNCTION_FEATURES) & (f)) != 0)
|
||||
|
||||
ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
const Ray *ray,
|
||||
Intersection *isect)
|
||||
@@ -56,7 +54,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
|
||||
const uint visibility = PATH_RAY_ALL_VISIBILITY;
|
||||
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
Transform ob_tfm;
|
||||
#endif
|
||||
|
||||
@@ -188,7 +186,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
float4 leaf = kernel_tex_fetch(__bvh_nodes, (-nodeAddr-1)*BVH_NODE_SIZE+3);
|
||||
int primAddr = __float_as_int(leaf.x);
|
||||
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
if(primAddr >= 0) {
|
||||
#endif
|
||||
int primAddr2 = __float_as_int(leaf.y);
|
||||
@@ -215,13 +213,13 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
triangle_intersect(kg, &isect_precalc, isect, P, dir, visibility, object, primAddr);
|
||||
break;
|
||||
}
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
case PRIMITIVE_MOTION_TRIANGLE: {
|
||||
motion_triangle_intersect(kg, isect, P, dir, ray->time, visibility, object, primAddr);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#if FEATURE(BVH_HAIR)
|
||||
#if BVH_FEATURE(BVH_HAIR)
|
||||
case PRIMITIVE_CURVE:
|
||||
case PRIMITIVE_MOTION_CURVE: {
|
||||
if(kernel_data.curve.curveflags & CURVE_KN_INTERPOLATE)
|
||||
@@ -237,7 +235,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
}
|
||||
}
|
||||
}
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
else {
|
||||
/* instance push */
|
||||
object = kernel_tex_fetch(__prim_object, -primAddr-1);
|
||||
@@ -245,7 +243,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
|
||||
if(object_flag & SD_OBJECT_HAS_VOLUME) {
|
||||
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
bvh_instance_motion_push(kg, object, ray, &P, &dir, &idir, &isect->t, &ob_tfm);
|
||||
#else
|
||||
bvh_instance_push(kg, object, ray, &P, &dir, &idir, &isect->t);
|
||||
@@ -279,12 +277,12 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
#endif /* FEATURE(BVH_INSTANCING) */
|
||||
} while(nodeAddr != ENTRYPOINT_SENTINEL);
|
||||
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
#if BVH_FEATURE(BVH_INSTANCING)
|
||||
if(stackPtr >= 0) {
|
||||
kernel_assert(object != OBJECT_NONE);
|
||||
|
||||
/* instance pop */
|
||||
#if FEATURE(BVH_MOTION)
|
||||
#if BVH_FEATURE(BVH_MOTION)
|
||||
bvh_instance_motion_pop(kg, object, ray, &P, &dir, &idir, &isect->t, &ob_tfm);
|
||||
#else
|
||||
bvh_instance_pop(kg, object, ray, &P, &dir, &idir, &isect->t);
|
||||
@@ -321,6 +319,5 @@ ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals *kg,
|
||||
isect);
|
||||
}
|
||||
|
||||
#undef FEATURE
|
||||
#undef BVH_FUNCTION_NAME
|
||||
#undef BVH_FUNCTION_FEATURES
|
||||
|
Reference in New Issue
Block a user