| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  | // Copyright 2009-2021 Intel Corporation
 | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  | // SPDX-License-Identifier: Apache-2.0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "disc_intersector.h"
 | 
					
						
							|  |  |  | #include "intersector_epilog.h"
 | 
					
						
							|  |  |  | #include "pointi.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace embree | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   namespace isa | 
					
						
							|  |  |  |   { | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |     template<int M, bool filter> | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |     struct DiscMiIntersector1 | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       typedef PointMi<M> Primitive; | 
					
						
							|  |  |  |       typedef CurvePrecalculations1 Precalculations; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline void intersect(const Precalculations& pre, | 
					
						
							|  |  |  |                                           RayHit& ray, | 
					
						
							|  |  |  |                                           IntersectContext* context, | 
					
						
							|  |  |  |                                           const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(normal.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Disc.gather(v0, geom); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         DiscIntersector1<M>::intersect( | 
					
						
							|  |  |  |           valid, ray, context, geom, pre, v0, Intersect1EpilogM<M, filter>(ray, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline bool occluded(const Precalculations& pre, | 
					
						
							|  |  |  |                                          Ray& ray, | 
					
						
							|  |  |  |                                          IntersectContext* context, | 
					
						
							|  |  |  |                                          const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(shadow.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Disc.gather(v0, geom); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         return DiscIntersector1<M>::intersect( | 
					
						
							|  |  |  |           valid, ray, context, geom, pre, v0, Occluded1EpilogM<M, filter>(ray, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |     template<int M, bool filter> | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |     struct DiscMiMBIntersector1 | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       typedef PointMi<M> Primitive; | 
					
						
							|  |  |  |       typedef CurvePrecalculations1 Precalculations; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline void intersect(const Precalculations& pre, | 
					
						
							|  |  |  |                                           RayHit& ray, | 
					
						
							|  |  |  |                                           IntersectContext* context, | 
					
						
							|  |  |  |                                           const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(normal.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Disc.gather(v0, geom, ray.time()); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         DiscIntersector1<M>::intersect( | 
					
						
							|  |  |  |           valid, ray, context, geom, pre, v0, Intersect1EpilogM<M, filter>(ray, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline bool occluded(const Precalculations& pre, | 
					
						
							|  |  |  |                                          Ray& ray, | 
					
						
							|  |  |  |                                          IntersectContext* context, | 
					
						
							|  |  |  |                                          const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(shadow.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Disc.gather(v0, geom, ray.time()); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         return DiscIntersector1<M>::intersect( | 
					
						
							|  |  |  |           valid, ray, context, geom, pre, v0, Occluded1EpilogM<M, filter>(ray, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |     template<int M, int K, bool filter> | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |     struct DiscMiIntersectorK | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       typedef PointMi<M> Primitive; | 
					
						
							|  |  |  |       typedef CurvePrecalculationsK<K> Precalculations; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline void intersect( | 
					
						
							|  |  |  |           const Precalculations& pre, RayHitK<K>& ray, size_t k, IntersectContext* context, const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(normal.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Disc.gather(v0, geom); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         DiscIntersectorK<M, K>::intersect( | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |             valid, ray, k, context, geom, pre, v0, | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |             Intersect1KEpilogM<M, K, filter>(ray, k, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline bool occluded( | 
					
						
							|  |  |  |           const Precalculations& pre, RayK<K>& ray, size_t k, IntersectContext* context, const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(shadow.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Disc.gather(v0, geom); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         return DiscIntersectorK<M, K>::intersect( | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |           valid, ray, k, context, geom, pre, v0, | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |           Occluded1KEpilogM<M, K, filter>(ray, k, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |     template<int M, int K, bool filter> | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |     struct DiscMiMBIntersectorK | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       typedef PointMi<M> Primitive; | 
					
						
							|  |  |  |       typedef CurvePrecalculationsK<K> Precalculations; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline void intersect( | 
					
						
							|  |  |  |           const Precalculations& pre, RayHitK<K>& ray, size_t k, IntersectContext* context, const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(normal.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Disc.gather(v0, geom, ray.time()[k]); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         DiscIntersectorK<M, K>::intersect( | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |           valid, ray, k, context, geom, pre, v0, | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |           Intersect1KEpilogM<M, K, filter>(ray, k, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline bool occluded( | 
					
						
							|  |  |  |           const Precalculations& pre, RayK<K>& ray, size_t k, IntersectContext* context, const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(shadow.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Disc.gather(v0, geom, ray.time()[k]); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         return DiscIntersectorK<M, K>::intersect( | 
					
						
							|  |  |  |           valid, ray, k, context, geom, pre, v0, Occluded1KEpilogM<M, K, filter>(ray, k, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |     template<int M, bool filter> | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |     struct OrientedDiscMiIntersector1 | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       typedef PointMi<M> Primitive; | 
					
						
							|  |  |  |       typedef CurvePrecalculations1 Precalculations; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline void intersect(const Precalculations& pre, | 
					
						
							|  |  |  |                                           RayHit& ray, | 
					
						
							|  |  |  |                                           IntersectContext* context, | 
					
						
							|  |  |  |                                           const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(normal.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Vec3vf<M> n0; | 
					
						
							|  |  |  |         Disc.gather(v0, n0, geom); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         DiscIntersector1<M>::intersect( | 
					
						
							|  |  |  |           valid, ray, context, geom, pre, v0, n0, Intersect1EpilogM<M, filter>(ray, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline bool occluded(const Precalculations& pre, | 
					
						
							|  |  |  |                                          Ray& ray, | 
					
						
							|  |  |  |                                          IntersectContext* context, | 
					
						
							|  |  |  |                                          const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(shadow.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Vec3vf<M> n0; | 
					
						
							|  |  |  |         Disc.gather(v0, n0, geom); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         return DiscIntersector1<M>::intersect( | 
					
						
							|  |  |  |           valid, ray, context, geom, pre, v0, n0, Occluded1EpilogM<M, filter>(ray, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |     template<int M, bool filter> | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |     struct OrientedDiscMiMBIntersector1 | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       typedef PointMi<M> Primitive; | 
					
						
							|  |  |  |       typedef CurvePrecalculations1 Precalculations; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline void intersect(const Precalculations& pre, | 
					
						
							|  |  |  |                                           RayHit& ray, | 
					
						
							|  |  |  |                                           IntersectContext* context, | 
					
						
							|  |  |  |                                           const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(normal.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Vec3vf<M> n0; | 
					
						
							|  |  |  |         Disc.gather(v0, n0, geom, ray.time()); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         DiscIntersector1<M>::intersect( | 
					
						
							|  |  |  |           valid, ray, context, geom, pre, v0, n0, Intersect1EpilogM<M, filter>(ray, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline bool occluded(const Precalculations& pre, | 
					
						
							|  |  |  |                                          Ray& ray, | 
					
						
							|  |  |  |                                          IntersectContext* context, | 
					
						
							|  |  |  |                                          const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(shadow.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Vec3vf<M> n0; | 
					
						
							|  |  |  |         Disc.gather(v0, n0, geom, ray.time()); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         return DiscIntersector1<M>::intersect( | 
					
						
							|  |  |  |           valid, ray, context, geom, pre, v0, n0, Occluded1EpilogM<M, filter>(ray, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |     template<int M, int K, bool filter> | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |     struct OrientedDiscMiIntersectorK | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       typedef PointMi<M> Primitive; | 
					
						
							|  |  |  |       typedef CurvePrecalculationsK<K> Precalculations; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline void intersect( | 
					
						
							|  |  |  |           const Precalculations& pre, RayHitK<K>& ray, size_t k, IntersectContext* context, const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(normal.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Vec3vf<M> n0; | 
					
						
							|  |  |  |         Disc.gather(v0, n0, geom); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         DiscIntersectorK<M, K>::intersect( | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |             valid, ray, k, context, geom, pre, v0, n0, | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |             Intersect1KEpilogM<M, K, filter>(ray, k, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline bool occluded( | 
					
						
							|  |  |  |           const Precalculations& pre, RayK<K>& ray, size_t k, IntersectContext* context, const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(shadow.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Vec3vf<M> n0; | 
					
						
							|  |  |  |         Disc.gather(v0, n0, geom); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         return DiscIntersectorK<M, K>::intersect( | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |             valid, ray, k, context, geom, pre, v0, n0, | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |             Occluded1KEpilogM<M, K, filter>(ray, k, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |     template<int M, int K, bool filter> | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |     struct OrientedDiscMiMBIntersectorK | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       typedef PointMi<M> Primitive; | 
					
						
							|  |  |  |       typedef CurvePrecalculationsK<K> Precalculations; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline void intersect( | 
					
						
							|  |  |  |           const Precalculations& pre, RayHitK<K>& ray, size_t k, IntersectContext* context, const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(normal.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Vec3vf<M> n0; | 
					
						
							|  |  |  |         Disc.gather(v0, n0, geom, ray.time()[k]); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         DiscIntersectorK<M, K>::intersect( | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |             valid, ray, k, context, geom, pre, v0, n0, | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |             Intersect1KEpilogM<M, K, filter>(ray, k, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       static __forceinline bool occluded( | 
					
						
							|  |  |  |           const Precalculations& pre, RayK<K>& ray, size_t k, IntersectContext* context, const Primitive& Disc) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         STAT3(shadow.trav_prims, 1, 1, 1); | 
					
						
							|  |  |  |         const Points* geom = context->scene->get<Points>(Disc.geomID()); | 
					
						
							|  |  |  |         Vec4vf<M> v0; Vec3vf<M> n0; | 
					
						
							|  |  |  |         Disc.gather(v0, n0, geom, ray.time()[k]); | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |         const vbool<M> valid = Disc.valid(); | 
					
						
							|  |  |  |         return DiscIntersectorK<M, K>::intersect( | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |             valid, ray, k, context, geom, pre, v0, n0, | 
					
						
							| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  |             Occluded1KEpilogM<M, K, filter>(ray, k, context, Disc.geomID(), Disc.primID())); | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  |       } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }  // namespace isa
 | 
					
						
							|  |  |  | }  // namespace embree
 |