Path: blob/master/thirdparty/embree/kernels/geometry/instance_intersector.h
9905 views
// Copyright 2009-2021 Intel Corporation1// SPDX-License-Identifier: Apache-2.023#pragma once45#include "instance.h"6#include "../common/ray.h"7#include "../common/point_query.h"89namespace embree10{11namespace isa12{13struct InstanceIntersector114{15typedef InstancePrimitive Primitive;1617struct Precalculations {18__forceinline Precalculations (const Ray& ray, const void *ptr) {}19};2021static void intersect(const Precalculations& pre, RayHit& ray, RayQueryContext* context, const Primitive& prim);22static bool occluded(const Precalculations& pre, Ray& ray, RayQueryContext* context, const Primitive& prim);23static bool pointQuery(PointQuery* query, PointQueryContext* context, const Primitive& prim);24};2526struct InstanceIntersector1MB27{28typedef InstancePrimitive Primitive;2930struct Precalculations {31__forceinline Precalculations (const Ray& ray, const void *ptr) {}32};3334static void intersect(const Precalculations& pre, RayHit& ray, RayQueryContext* context, const Primitive& prim);35static bool occluded(const Precalculations& pre, Ray& ray, RayQueryContext* context, const Primitive& prim);36static bool pointQuery(PointQuery* query, PointQueryContext* context, const Primitive& prim);37};3839template<int K>40struct InstanceIntersectorK41{42typedef InstancePrimitive Primitive;4344struct Precalculations {45__forceinline Precalculations (const vbool<K>& valid, const RayK<K>& ray) {}46};4748static void intersect(const vbool<K>& valid_i, const Precalculations& pre, RayHitK<K>& ray, RayQueryContext* context, const Primitive& prim);49static vbool<K> occluded(const vbool<K>& valid_i, const Precalculations& pre, RayK<K>& ray, RayQueryContext* context, const Primitive& prim);5051static __forceinline void intersect(Precalculations& pre, RayHitK<K>& ray, size_t k, RayQueryContext* context, const Primitive& prim) {52intersect(vbool<K>(1<<int(k)),pre,ray,context,prim);53}5455static __forceinline bool occluded(Precalculations& pre, RayK<K>& ray, size_t k, RayQueryContext* context, const Primitive& prim) {56occluded(vbool<K>(1<<int(k)),pre,ray,context,prim);57return ray.tfar[k] < 0.0f;58}59};6061template<int K>62struct InstanceIntersectorKMB63{64typedef InstancePrimitive Primitive;6566struct Precalculations {67__forceinline Precalculations (const vbool<K>& valid, const RayK<K>& ray) {}68};6970static void intersect(const vbool<K>& valid_i, const Precalculations& pre, RayHitK<K>& ray, RayQueryContext* context, const Primitive& prim);71static vbool<K> occluded(const vbool<K>& valid_i, const Precalculations& pre, RayK<K>& ray, RayQueryContext* context, const Primitive& prim);7273static __forceinline void intersect(Precalculations& pre, RayHitK<K>& ray, size_t k, RayQueryContext* context, const Primitive& prim) {74intersect(vbool<K>(1<<int(k)),pre,ray,context,prim);75}7677static __forceinline bool occluded(Precalculations& pre, RayK<K>& ray, size_t k, RayQueryContext* context, const Primitive& prim) {78occluded(vbool<K>(1<<int(k)),pre,ray,context,prim);79return ray.tfar[k] < 0.0f;80}81};82}83}848586