MCPcopy Create free account
hub / github.com/RenderKit/embree / intersectNodeRobust

Function intersectNodeRobust

kernels/bvh/node_intersector1.h:540–554  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

538
539 template<int N>
540 __forceinline size_t intersectNodeRobust(const typename BVHN<N>::AABBNode* node, const TravRay<N,true>& ray, vfloat<N>& dist)
541 {
542 const vfloat<N> tNearX = (vfloat<N>::load((float*)((const char*)&node->lower_x+ray.nearX)) - ray.org.x) * ray.rdir_near.x;
543 const vfloat<N> tNearY = (vfloat<N>::load((float*)((const char*)&node->lower_x+ray.nearY)) - ray.org.y) * ray.rdir_near.y;
544 const vfloat<N> tNearZ = (vfloat<N>::load((float*)((const char*)&node->lower_x+ray.nearZ)) - ray.org.z) * ray.rdir_near.z;
545 const vfloat<N> tFarX = (vfloat<N>::load((float*)((const char*)&node->lower_x+ray.farX )) - ray.org.x) * ray.rdir_far.x;
546 const vfloat<N> tFarY = (vfloat<N>::load((float*)((const char*)&node->lower_x+ray.farY )) - ray.org.y) * ray.rdir_far.y;
547 const vfloat<N> tFarZ = (vfloat<N>::load((float*)((const char*)&node->lower_x+ray.farZ )) - ray.org.z) * ray.rdir_far.z;
548 const vfloat<N> tNear = max(tNearX,tNearY,tNearZ,ray.tnear);
549 const vfloat<N> tFar = min(tFarX ,tFarY ,tFarZ ,ray.tfar);
550 const vbool<N> vmask = tNear <= tFar;
551 const size_t mask = movemask(vmask);
552 dist = tNear;
553 return mask;
554 }
555
556 //////////////////////////////////////////////////////////////////////////////////////
557 // Fast AABBNodeMB intersection

Callers 5

intersectMethod · 0.85
intersectMethod · 0.85
intersectMethod · 0.85
intersectMethod · 0.85
intersectMethod · 0.85

Calls 5

loadFunction · 0.50
maxFunction · 0.50
minFunction · 0.50
movemaskFunction · 0.50
maddFunction · 0.50

Tested by

no test coverage detected