#pragma once
#include "primitive.h"
#include "../subdiv/bezier_curve.h"
#include "../builders/primref.h"
#include "curve_intersector_precalculations.h"
#include "../bvh/node_intersector1.h"
#include "../bvh/node_intersector_packet.h"
#include "intersector_epilog.h"
#include "../subdiv/bezier_curve.h"
#include "../subdiv/bspline_curve.h"
#include "../subdiv/hermite_curve.h"
#include "../subdiv/catmullrom_curve.h"
#include "spherei_intersector.h"
#include "disci_intersector.h"
#include "linei_intersector.h"
#include "roundlinei_intersector.h"
#include "conelinei_intersector.h"
#include "curveNi_intersector.h"
#include "curveNv_intersector.h"
#include "curveNi_mb_intersector.h"
#include "curve_intersector_distance.h"
#include "curve_intersector_ribbon.h"
#include "curve_intersector_oriented.h"
#include "curve_intersector_sweep.h"
namespace embree
{
struct VirtualCurveIntersector
{ … };
template<> __forceinline void VirtualCurveIntersector::Intersectors::intersect<1> (void* pre, void* ray, RayQueryContext* context, const void* primitive) { … }
template<> __forceinline bool VirtualCurveIntersector::Intersectors::occluded<1> (void* pre, void* ray, RayQueryContext* context, const void* primitive) { … }
template<> __forceinline void VirtualCurveIntersector::Intersectors::intersect<4>(void* pre, void* ray, size_t k, RayQueryContext* context, const void* primitive) { … }
template<> __forceinline bool VirtualCurveIntersector::Intersectors::occluded<4> (void* pre, void* ray, size_t k, RayQueryContext* context, const void* primitive) { … }
#if defined(__AVX__)
template<> __forceinline void VirtualCurveIntersector::Intersectors::intersect<8>(void* pre, void* ray, size_t k, RayQueryContext* context, const void* primitive) { assert(intersect8); intersect8(pre,ray,k,context,primitive); }
template<> __forceinline bool VirtualCurveIntersector::Intersectors::occluded<8> (void* pre, void* ray, size_t k, RayQueryContext* context, const void* primitive) { assert(occluded8); return occluded8(pre,ray,k,context,primitive); }
#endif
#if defined(__AVX512F__)
template<> __forceinline void VirtualCurveIntersector::Intersectors::intersect<16>(void* pre, void* ray, size_t k, RayQueryContext* context, const void* primitive) { assert(intersect16); intersect16(pre,ray,k,context,primitive); }
template<> __forceinline bool VirtualCurveIntersector::Intersectors::occluded<16> (void* pre, void* ray, size_t k, RayQueryContext* context, const void* primitive) { assert(occluded16); return occluded16(pre,ray,k,context,primitive); }
#endif
namespace isa
{
struct VirtualCurveIntersector1
{ … };
template<int K>
struct VirtualCurveIntersectorK
{ … };
template<int N>
static VirtualCurveIntersector::Intersectors LinearRoundConeNiIntersectors()
{ … }
template<int N>
static VirtualCurveIntersector::Intersectors LinearConeNiIntersectors()
{ … }
template<int N>
static VirtualCurveIntersector::Intersectors LinearRoundConeNiMBIntersectors()
{ … }
template<int N>
static VirtualCurveIntersector::Intersectors LinearConeNiMBIntersectors()
{ … }
template<int N>
static VirtualCurveIntersector::Intersectors LinearRibbonNiIntersectors()
{ … }
template<int N>
static VirtualCurveIntersector::Intersectors LinearRibbonNiMBIntersectors()
{ … }
template<int N>
static VirtualCurveIntersector::Intersectors SphereNiIntersectors()
{ … }
template<int N>
static VirtualCurveIntersector::Intersectors SphereNiMBIntersectors()
{ … }
template<int N>
static VirtualCurveIntersector::Intersectors DiscNiIntersectors()
{ … }
template<int N>
static VirtualCurveIntersector::Intersectors DiscNiMBIntersectors()
{ … }
template<int N>
static VirtualCurveIntersector::Intersectors OrientedDiscNiIntersectors()
{ … }
template<int N>
static VirtualCurveIntersector::Intersectors OrientedDiscNiMBIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors RibbonNiIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors RibbonNvIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors RibbonNiMBIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors CurveNiIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors CurveNvIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors CurveNiMBIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors OrientedCurveNiIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors OrientedCurveNiMBIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors HermiteRibbonNiIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors HermiteRibbonNiMBIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors HermiteCurveNiIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors HermiteCurveNiMBIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors HermiteOrientedCurveNiIntersectors()
{ … }
template<template<typename Ty> class Curve, int N>
static VirtualCurveIntersector::Intersectors HermiteOrientedCurveNiMBIntersectors()
{ … }
}
}