Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/bvh/bvh_local.h
| Show All 30 Lines | |||||
| * BVH_MOTION: motion blur rendering | * BVH_MOTION: motion blur rendering | ||||
| */ | */ | ||||
| #ifndef __KERNEL_GPU__ | #ifndef __KERNEL_GPU__ | ||||
| ccl_device | ccl_device | ||||
| #else | #else | ||||
| ccl_device_inline | ccl_device_inline | ||||
| #endif | #endif | ||||
| bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, | bool BVH_FUNCTION_FULL_NAME(BVH)(const KernelGlobals *kg, | ||||
| const Ray *ray, | const Ray *ray, | ||||
| LocalIntersection *local_isect, | LocalIntersection *local_isect, | ||||
| int local_object, | int local_object, | ||||
| uint *lcg_state, | uint *lcg_state, | ||||
| int max_hits) | int max_hits) | ||||
| { | { | ||||
| /* todo: | /* todo: | ||||
| * - test if pushing distance on the stack helps (for non shadow rays) | * - test if pushing distance on the stack helps (for non shadow rays) | ||||
| Show All 21 Lines | if (local_isect != NULL) { | ||||
| local_isect->num_hits = 0; | local_isect->num_hits = 0; | ||||
| } | } | ||||
| kernel_assert((local_isect == NULL) == (max_hits == 0)); | kernel_assert((local_isect == NULL) == (max_hits == 0)); | ||||
| const int object_flag = kernel_tex_fetch(__object_flag, local_object); | const int object_flag = kernel_tex_fetch(__object_flag, local_object); | ||||
| if (!(object_flag & SD_OBJECT_TRANSFORM_APPLIED)) { | if (!(object_flag & SD_OBJECT_TRANSFORM_APPLIED)) { | ||||
| #if BVH_FEATURE(BVH_MOTION) | #if BVH_FEATURE(BVH_MOTION) | ||||
| Transform ob_itfm; | Transform ob_itfm; | ||||
| isect_t = bvh_instance_motion_push(kg, local_object, ray, &P, &dir, &idir, isect_t, &ob_itfm); | isect_t *= bvh_instance_motion_push(kg, local_object, ray, &P, &dir, &idir, &ob_itfm); | ||||
| #else | #else | ||||
| isect_t = bvh_instance_push(kg, local_object, ray, &P, &dir, &idir, isect_t); | isect_t *= bvh_instance_push(kg, local_object, ray, &P, &dir, &idir); | ||||
| #endif | #endif | ||||
| object = local_object; | object = local_object; | ||||
| } | } | ||||
| /* traversal loop */ | /* traversal loop */ | ||||
| do { | do { | ||||
| do { | do { | ||||
| /* traverse internal nodes */ | /* traverse internal nodes */ | ||||
| ▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | #endif | ||||
| } | } | ||||
| } | } | ||||
| } while (node_addr != ENTRYPOINT_SENTINEL); | } while (node_addr != ENTRYPOINT_SENTINEL); | ||||
| } while (node_addr != ENTRYPOINT_SENTINEL); | } while (node_addr != ENTRYPOINT_SENTINEL); | ||||
| return false; | return false; | ||||
| } | } | ||||
| ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals *kg, | ccl_device_inline bool BVH_FUNCTION_NAME(const KernelGlobals *kg, | ||||
| const Ray *ray, | const Ray *ray, | ||||
| LocalIntersection *local_isect, | LocalIntersection *local_isect, | ||||
| int local_object, | int local_object, | ||||
| uint *lcg_state, | uint *lcg_state, | ||||
| int max_hits) | int max_hits) | ||||
| { | { | ||||
| return BVH_FUNCTION_FULL_NAME(BVH)(kg, ray, local_isect, local_object, lcg_state, max_hits); | return BVH_FUNCTION_FULL_NAME(BVH)(kg, ray, local_isect, local_object, lcg_state, max_hits); | ||||
| } | } | ||||
| #undef BVH_FUNCTION_NAME | #undef BVH_FUNCTION_NAME | ||||
| #undef BVH_FUNCTION_FEATURES | #undef BVH_FUNCTION_FEATURES | ||||
| #undef NODE_INTERSECT | #undef NODE_INTERSECT | ||||