diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-12-24 22:06:49 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-12-25 00:50:49 +0300 |
commit | 0476e2c87a7137469584735caab8b7b4405a694b (patch) | |
tree | 45c8bc344d1d15ecfce2ea5eb1a3701f296f1af1 | |
parent | ab8d9c4b8853755faa62307750d961dc2ec43708 (diff) |
Cycles: Rework BVH functions calls a little bit
Basic idea is to allow multiple implementation per feature-set, meaning this
commit tries to make it easier to hook new algorithms for BVH traversal.
-rw-r--r-- | intern/cycles/kernel/geom/geom_bvh.h | 8 | ||||
-rw-r--r-- | intern/cycles/kernel/geom/geom_bvh_shadow.h | 21 | ||||
-rw-r--r-- | intern/cycles/kernel/geom/geom_bvh_subsurface.h | 24 | ||||
-rw-r--r-- | intern/cycles/kernel/geom/geom_bvh_traversal.h | 36 | ||||
-rw-r--r-- | intern/cycles/kernel/geom/geom_bvh_volume.h | 16 |
5 files changed, 90 insertions, 15 deletions
diff --git a/intern/cycles/kernel/geom/geom_bvh.h b/intern/cycles/kernel/geom/geom_bvh.h index c5336e086b7..d070a94fa29 100644 --- a/intern/cycles/kernel/geom/geom_bvh.h +++ b/intern/cycles/kernel/geom/geom_bvh.h @@ -42,6 +42,10 @@ CCL_NAMESPACE_BEGIN #define BVH_HAIR 4 #define BVH_HAIR_MINIMUM_WIDTH 8 +#define BVH_NAME_JOIN(x,y) x ## _ ## y +#define BVH_NAME_EVAL(x,y) BVH_NAME_JOIN(x,y) +#define BVH_FUNCTION_FULL_NAME(prefix) BVH_NAME_EVAL(prefix, BVH_FUNCTION_NAME) + /* Regular BVH traversal */ #define BVH_FUNCTION_NAME bvh_intersect @@ -168,6 +172,10 @@ CCL_NAMESPACE_BEGIN #include "geom_bvh_volume.h" #endif +#undef BVH_NAME_JOIN +#undef BVH_NAME_EVAL +#undef BVH_FUNCTION_FULL_NAME + ccl_device_intersect bool scene_intersect(KernelGlobals *kg, const Ray *ray, const uint visibility, Intersection *isect, uint *lcg_state, float difl, float extmax) { diff --git a/intern/cycles/kernel/geom/geom_bvh_shadow.h b/intern/cycles/kernel/geom/geom_bvh_shadow.h index db7c564c4a3..56af1abb2c3 100644 --- a/intern/cycles/kernel/geom/geom_bvh_shadow.h +++ b/intern/cycles/kernel/geom/geom_bvh_shadow.h @@ -29,8 +29,11 @@ #define FEATURE(f) (((BVH_FUNCTION_FEATURES) & (f)) != 0) -ccl_device bool BVH_FUNCTION_NAME -(KernelGlobals *kg, const Ray *ray, Intersection *isect_array, const uint max_hits, uint *num_hits) +ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, + const Ray *ray, + Intersection *isect_array, + const uint max_hits, + uint *num_hits) { /* todo: * - likely and unlikely for if() statements @@ -373,7 +376,19 @@ ccl_device bool BVH_FUNCTION_NAME return false; } +ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals *kg, + const Ray *ray, + Intersection *isect_array, + const uint max_hits, + uint *num_hits) +{ + return BVH_FUNCTION_FULL_NAME(BVH)(kg, + ray, + isect_array, + max_hits, + num_hits); +} + #undef FEATURE #undef BVH_FUNCTION_NAME #undef BVH_FUNCTION_FEATURES - diff --git a/intern/cycles/kernel/geom/geom_bvh_subsurface.h b/intern/cycles/kernel/geom/geom_bvh_subsurface.h index 756130be3da..41a8be9701f 100644 --- a/intern/cycles/kernel/geom/geom_bvh_subsurface.h +++ b/intern/cycles/kernel/geom/geom_bvh_subsurface.h @@ -28,8 +28,12 @@ #define FEATURE(f) (((BVH_FUNCTION_FEATURES) & (f)) != 0) -ccl_device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersection *isect_array, - int subsurface_object, uint *lcg_state, int max_hits) +ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, + const Ray *ray, + Intersection *isect_array, + int subsurface_object, + uint *lcg_state, + int max_hits) { /* todo: * - test if pushing distance on the stack helps (for non shadow rays) @@ -291,7 +295,21 @@ ccl_device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersectio return num_hits; } +ccl_device_inline uint BVH_FUNCTION_NAME(KernelGlobals *kg, + const Ray *ray, + Intersection *isect_array, + int subsurface_object, + uint *lcg_state, + int max_hits) +{ + return BVH_FUNCTION_FULL_NAME(BVH)(kg, + ray, + isect_array, + subsurface_object, + lcg_state, + max_hits); +} + #undef FEATURE #undef BVH_FUNCTION_NAME #undef BVH_FUNCTION_FEATURES - diff --git a/intern/cycles/kernel/geom/geom_bvh_traversal.h b/intern/cycles/kernel/geom/geom_bvh_traversal.h index 7be22c0f3bf..393c9f9542c 100644 --- a/intern/cycles/kernel/geom/geom_bvh_traversal.h +++ b/intern/cycles/kernel/geom/geom_bvh_traversal.h @@ -30,12 +30,16 @@ #define FEATURE(f) (((BVH_FUNCTION_FEATURES) & (f)) != 0) -ccl_device bool BVH_FUNCTION_NAME -(KernelGlobals *kg, const Ray *ray, Intersection *isect, const uint visibility +ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, + const Ray *ray, + Intersection *isect, + const uint visibility #if FEATURE(BVH_HAIR_MINIMUM_WIDTH) -, uint *lcg_state, float difl, float extmax + , uint *lcg_state, + float difl, + float extmax #endif -) + ) { /* todo: * - test if pushing distance on the stack helps (for non shadow rays) @@ -368,7 +372,29 @@ ccl_device bool BVH_FUNCTION_NAME return (isect->prim != PRIM_NONE); } +ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals *kg, + const Ray *ray, + Intersection *isect, + const uint visibility +#if FEATURE(BVH_HAIR_MINIMUM_WIDTH) + , uint *lcg_state, + float difl, + float extmax +#endif + ) +{ + return BVH_FUNCTION_FULL_NAME(BVH)(kg, + ray, + isect, + visibility +#if FEATURE(BVH_HAIR_MINIMUM_WIDTH) + , lcg_state, + difl, + extmax +#endif + ); +} + #undef FEATURE #undef BVH_FUNCTION_NAME #undef BVH_FUNCTION_FEATURES - diff --git a/intern/cycles/kernel/geom/geom_bvh_volume.h b/intern/cycles/kernel/geom/geom_bvh_volume.h index 7d6b9bdd8db..eb2761725fc 100644 --- a/intern/cycles/kernel/geom/geom_bvh_volume.h +++ b/intern/cycles/kernel/geom/geom_bvh_volume.h @@ -29,9 +29,9 @@ #define FEATURE(f) (((BVH_FUNCTION_FEATURES) & (f)) != 0) -ccl_device bool BVH_FUNCTION_NAME(KernelGlobals *kg, - const Ray *ray, - Intersection *isect) +ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, + const Ray *ray, + Intersection *isect) { /* todo: * - test if pushing distance on the stack helps (for non shadow rays) @@ -312,7 +312,15 @@ ccl_device bool BVH_FUNCTION_NAME(KernelGlobals *kg, return (isect->prim != PRIM_NONE); } +ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals *kg, + const Ray *ray, + Intersection *isect) +{ + return BVH_FUNCTION_FULL_NAME(BVH)(kg, + ray, + isect); +} + #undef FEATURE #undef BVH_FUNCTION_NAME #undef BVH_FUNCTION_FEATURES - |