godot/thirdparty/embree/kernels/geometry/curve_intersector_virtual.h

// Copyright 2009-2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#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()
    {}
  }
}