Path: blob/master/thirdparty/embree/kernels/bvh/bvh4_factory.h
9912 views
// Copyright 2009-2021 Intel Corporation1// SPDX-License-Identifier: Apache-2.023#pragma once45#include "bvh_factory.h"67namespace embree8{9/*! BVH4 instantiations */10class BVH4Factory : public BVHFactory11{12public:13BVH4Factory(int bfeatures, int ifeatures);1415public:16Accel* BVH4OBBVirtualCurve4i(Scene* scene, IntersectVariant ivariant);17Accel* BVH4OBBVirtualCurve4v(Scene* scene, IntersectVariant ivariant);18Accel* BVH4OBBVirtualCurve8i(Scene* scene, IntersectVariant ivariant);19Accel* BVH4OBBVirtualCurve4iMB(Scene* scene, IntersectVariant ivariant);20Accel* BVH4OBBVirtualCurve8iMB(Scene* scene, IntersectVariant ivariant);21DEFINE_SYMBOL2(VirtualCurveIntersector*,VirtualCurveIntersector4i);22DEFINE_SYMBOL2(VirtualCurveIntersector*,VirtualCurveIntersector8i);23DEFINE_SYMBOL2(VirtualCurveIntersector*,VirtualCurveIntersector4v);24DEFINE_SYMBOL2(VirtualCurveIntersector*,VirtualCurveIntersector8v);25DEFINE_SYMBOL2(VirtualCurveIntersector*,VirtualCurveIntersector4iMB);26DEFINE_SYMBOL2(VirtualCurveIntersector*,VirtualCurveIntersector8iMB);2728Accel* BVH4Triangle4 (Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);29Accel* BVH4Triangle4v (Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::ROBUST);30Accel* BVH4Triangle4i (Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);31Accel* BVH4Triangle4vMB(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);32Accel* BVH4Triangle4iMB(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);3334Accel* BVH4Quad4v (Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);35Accel* BVH4Quad4i (Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);36Accel* BVH4Quad4iMB(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);3738Accel* BVH4QuantizedTriangle4i(Scene* scene);39Accel* BVH4QuantizedQuad4i(Scene* scene);4041Accel* BVH4SubdivPatch1(Scene* scene);42Accel* BVH4SubdivPatch1MB(Scene* scene);4344Accel* BVH4UserGeometry(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC);45Accel* BVH4UserGeometryMB(Scene* scene);4647Accel* BVH4Instance(Scene* scene, bool isExpensive, BuildVariant bvariant = BuildVariant::STATIC);48Accel* BVH4InstanceMB(Scene* scene, bool isExpensive);4950Accel* BVH4InstanceArray(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC);51Accel* BVH4InstanceArrayMB(Scene* scene);5253Accel* BVH4Grid(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);54Accel* BVH4GridMB(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);5556private:57void selectBuilders(int features);58void selectIntersectors(int features);5960private:61Accel::Intersectors BVH4OBBVirtualCurveIntersectors(BVH4* bvh, VirtualCurveIntersector* leafIntersector, IntersectVariant ivariant);62Accel::Intersectors BVH4OBBVirtualCurveIntersectorsMB(BVH4* bvh, VirtualCurveIntersector* leafIntersector, IntersectVariant ivariant);6364Accel::Intersectors BVH4Triangle4Intersectors(BVH4* bvh, IntersectVariant ivariant);65Accel::Intersectors BVH4Triangle4vIntersectors(BVH4* bvh, IntersectVariant ivariant);66Accel::Intersectors BVH4Triangle4iIntersectors(BVH4* bvh, IntersectVariant ivariant);67Accel::Intersectors BVH4Triangle4iMBIntersectors(BVH4* bvh, IntersectVariant ivariant);68Accel::Intersectors BVH4Triangle4vMBIntersectors(BVH4* bvh, IntersectVariant ivariant);6970Accel::Intersectors BVH4Quad4vIntersectors(BVH4* bvh, IntersectVariant ivariant);71Accel::Intersectors BVH4Quad4iIntersectors(BVH4* bvh, IntersectVariant ivariant);72Accel::Intersectors BVH4Quad4iMBIntersectors(BVH4* bvh, IntersectVariant ivariant);7374Accel::Intersectors QBVH4Quad4iIntersectors(BVH4* bvh);75Accel::Intersectors QBVH4Triangle4iIntersectors(BVH4* bvh);7677Accel::Intersectors BVH4UserGeometryIntersectors(BVH4* bvh);78Accel::Intersectors BVH4UserGeometryMBIntersectors(BVH4* bvh);7980Accel::Intersectors BVH4InstanceIntersectors(BVH4* bvh);81Accel::Intersectors BVH4InstanceMBIntersectors(BVH4* bvh);8283Accel::Intersectors BVH4InstanceArrayIntersectors(BVH4* bvh);84Accel::Intersectors BVH4InstanceArrayMBIntersectors(BVH4* bvh);8586Accel::Intersectors BVH4SubdivPatch1Intersectors(BVH4* bvh);87Accel::Intersectors BVH4SubdivPatch1MBIntersectors(BVH4* bvh);8889Accel::Intersectors BVH4GridIntersectors(BVH4* bvh, IntersectVariant ivariant);90Accel::Intersectors BVH4GridMBIntersectors(BVH4* bvh, IntersectVariant ivariant);9192private:9394DEFINE_SYMBOL2(Accel::Collider,BVH4ColliderUserGeom);9596DEFINE_SYMBOL2(Accel::Intersector1,BVH4OBBVirtualCurveIntersector1);97DEFINE_SYMBOL2(Accel::Intersector1,BVH4OBBVirtualCurveIntersector1MB);98DEFINE_SYMBOL2(Accel::Intersector1,BVH4OBBVirtualCurveIntersectorRobust1);99DEFINE_SYMBOL2(Accel::Intersector1,BVH4OBBVirtualCurveIntersectorRobust1MB);100101DEFINE_SYMBOL2(Accel::Intersector1,BVH4Triangle4Intersector1Moeller);102DEFINE_SYMBOL2(Accel::Intersector1,BVH4Triangle4iIntersector1Moeller);103DEFINE_SYMBOL2(Accel::Intersector1,BVH4Triangle4vIntersector1Pluecker);104DEFINE_SYMBOL2(Accel::Intersector1,BVH4Triangle4iIntersector1Pluecker);105106DEFINE_SYMBOL2(Accel::Intersector1,BVH4Triangle4vMBIntersector1Moeller);107DEFINE_SYMBOL2(Accel::Intersector1,BVH4Triangle4iMBIntersector1Moeller);108DEFINE_SYMBOL2(Accel::Intersector1,BVH4Triangle4vMBIntersector1Pluecker);109DEFINE_SYMBOL2(Accel::Intersector1,BVH4Triangle4iMBIntersector1Pluecker);110111DEFINE_SYMBOL2(Accel::Intersector1,BVH4Quad4vIntersector1Moeller);112DEFINE_SYMBOL2(Accel::Intersector1,BVH4Quad4iIntersector1Moeller);113DEFINE_SYMBOL2(Accel::Intersector1,BVH4Quad4vIntersector1Pluecker);114DEFINE_SYMBOL2(Accel::Intersector1,BVH4Quad4iIntersector1Pluecker);115116DEFINE_SYMBOL2(Accel::Intersector1,BVH4Quad4iMBIntersector1Moeller);117DEFINE_SYMBOL2(Accel::Intersector1,BVH4Quad4iMBIntersector1Pluecker);118119DEFINE_SYMBOL2(Accel::Intersector1,QBVH4Triangle4iIntersector1Pluecker);120DEFINE_SYMBOL2(Accel::Intersector1,QBVH4Quad4iIntersector1Pluecker);121122DEFINE_SYMBOL2(Accel::Intersector1,BVH4SubdivPatch1Intersector1);123DEFINE_SYMBOL2(Accel::Intersector1,BVH4SubdivPatch1MBIntersector1);124125DEFINE_SYMBOL2(Accel::Intersector1,BVH4VirtualIntersector1);126DEFINE_SYMBOL2(Accel::Intersector1,BVH4VirtualMBIntersector1);127128DEFINE_SYMBOL2(Accel::Intersector1,BVH4InstanceIntersector1);129DEFINE_SYMBOL2(Accel::Intersector1,BVH4InstanceMBIntersector1);130131DEFINE_SYMBOL2(Accel::Intersector1,BVH4InstanceArrayIntersector1);132DEFINE_SYMBOL2(Accel::Intersector1,BVH4InstanceArrayMBIntersector1);133134DEFINE_SYMBOL2(Accel::Intersector1,BVH4GridIntersector1Moeller);135DEFINE_SYMBOL2(Accel::Intersector1,BVH4GridMBIntersector1Moeller);136DEFINE_SYMBOL2(Accel::Intersector1,BVH4GridIntersector1Pluecker);137138DEFINE_SYMBOL2(Accel::Intersector4,BVH4OBBVirtualCurveIntersector4Hybrid);139DEFINE_SYMBOL2(Accel::Intersector4,BVH4OBBVirtualCurveIntersector4HybridMB);140DEFINE_SYMBOL2(Accel::Intersector4,BVH4OBBVirtualCurveIntersectorRobust4Hybrid);141DEFINE_SYMBOL2(Accel::Intersector4,BVH4OBBVirtualCurveIntersectorRobust4HybridMB);142143DEFINE_SYMBOL2(Accel::Intersector4,BVH4Triangle4Intersector4HybridMoeller);144DEFINE_SYMBOL2(Accel::Intersector4,BVH4Triangle4Intersector4HybridMoellerNoFilter);145DEFINE_SYMBOL2(Accel::Intersector4,BVH4Triangle4iIntersector4HybridMoeller);146DEFINE_SYMBOL2(Accel::Intersector4,BVH4Triangle4vIntersector4HybridPluecker);147DEFINE_SYMBOL2(Accel::Intersector4,BVH4Triangle4iIntersector4HybridPluecker);148149DEFINE_SYMBOL2(Accel::Intersector4,BVH4Triangle4vMBIntersector4HybridMoeller);150DEFINE_SYMBOL2(Accel::Intersector4,BVH4Triangle4iMBIntersector4HybridMoeller);151DEFINE_SYMBOL2(Accel::Intersector4,BVH4Triangle4vMBIntersector4HybridPluecker);152DEFINE_SYMBOL2(Accel::Intersector4,BVH4Triangle4iMBIntersector4HybridPluecker);153154DEFINE_SYMBOL2(Accel::Intersector4,BVH4Quad4vIntersector4HybridMoeller);155DEFINE_SYMBOL2(Accel::Intersector4,BVH4Quad4vIntersector4HybridMoellerNoFilter);156DEFINE_SYMBOL2(Accel::Intersector4,BVH4Quad4iIntersector4HybridMoeller);157DEFINE_SYMBOL2(Accel::Intersector4,BVH4Quad4vIntersector4HybridPluecker);158DEFINE_SYMBOL2(Accel::Intersector4,BVH4Quad4iIntersector4HybridPluecker);159160DEFINE_SYMBOL2(Accel::Intersector4,BVH4Quad4iMBIntersector4HybridMoeller);161DEFINE_SYMBOL2(Accel::Intersector4,BVH4Quad4iMBIntersector4HybridPluecker);162163DEFINE_SYMBOL2(Accel::Intersector4,BVH4SubdivPatch1Intersector4);164DEFINE_SYMBOL2(Accel::Intersector4,BVH4SubdivPatch1MBIntersector4);165166DEFINE_SYMBOL2(Accel::Intersector4,BVH4VirtualIntersector4Chunk);167DEFINE_SYMBOL2(Accel::Intersector4,BVH4VirtualMBIntersector4Chunk);168169DEFINE_SYMBOL2(Accel::Intersector4,BVH4InstanceIntersector4Chunk);170DEFINE_SYMBOL2(Accel::Intersector4,BVH4InstanceMBIntersector4Chunk);171172DEFINE_SYMBOL2(Accel::Intersector4,BVH4InstanceArrayIntersector4Chunk);173DEFINE_SYMBOL2(Accel::Intersector4,BVH4InstanceArrayMBIntersector4Chunk);174175DEFINE_SYMBOL2(Accel::Intersector4,BVH4GridIntersector4HybridMoeller);176DEFINE_SYMBOL2(Accel::Intersector4,BVH4GridMBIntersector4HybridMoeller);177DEFINE_SYMBOL2(Accel::Intersector4,BVH4GridIntersector4HybridPluecker);178179// ==============180181DEFINE_SYMBOL2(Accel::Intersector8,BVH4OBBVirtualCurveIntersector8Hybrid);182DEFINE_SYMBOL2(Accel::Intersector8,BVH4OBBVirtualCurveIntersector8HybridMB);183DEFINE_SYMBOL2(Accel::Intersector8,BVH4OBBVirtualCurveIntersectorRobust8Hybrid);184DEFINE_SYMBOL2(Accel::Intersector8,BVH4OBBVirtualCurveIntersectorRobust8HybridMB);185186DEFINE_SYMBOL2(Accel::Intersector8,BVH4Triangle4Intersector8HybridMoeller);187DEFINE_SYMBOL2(Accel::Intersector8,BVH4Triangle4Intersector8HybridMoellerNoFilter);188DEFINE_SYMBOL2(Accel::Intersector8,BVH4Triangle4iIntersector8HybridMoeller);189DEFINE_SYMBOL2(Accel::Intersector8,BVH4Triangle4vIntersector8HybridPluecker);190DEFINE_SYMBOL2(Accel::Intersector8,BVH4Triangle4iIntersector8HybridPluecker);191192DEFINE_SYMBOL2(Accel::Intersector8,BVH4Triangle4vMBIntersector8HybridMoeller);193DEFINE_SYMBOL2(Accel::Intersector8,BVH4Triangle4iMBIntersector8HybridMoeller);194DEFINE_SYMBOL2(Accel::Intersector8,BVH4Triangle4vMBIntersector8HybridPluecker);195DEFINE_SYMBOL2(Accel::Intersector8,BVH4Triangle4iMBIntersector8HybridPluecker);196197DEFINE_SYMBOL2(Accel::Intersector8,BVH4Quad4vIntersector8HybridMoeller);198DEFINE_SYMBOL2(Accel::Intersector8,BVH4Quad4vIntersector8HybridMoellerNoFilter);199DEFINE_SYMBOL2(Accel::Intersector8,BVH4Quad4iIntersector8HybridMoeller);200DEFINE_SYMBOL2(Accel::Intersector8,BVH4Quad4vIntersector8HybridPluecker);201DEFINE_SYMBOL2(Accel::Intersector8,BVH4Quad4iIntersector8HybridPluecker);202203DEFINE_SYMBOL2(Accel::Intersector8,BVH4Quad4iMBIntersector8HybridMoeller);204DEFINE_SYMBOL2(Accel::Intersector8,BVH4Quad4iMBIntersector8HybridPluecker);205206DEFINE_SYMBOL2(Accel::Intersector8,BVH4SubdivPatch1Intersector8);207DEFINE_SYMBOL2(Accel::Intersector8,BVH4SubdivPatch1MBIntersector8);208209DEFINE_SYMBOL2(Accel::Intersector8,BVH4VirtualIntersector8Chunk);210DEFINE_SYMBOL2(Accel::Intersector8,BVH4VirtualMBIntersector8Chunk);211212DEFINE_SYMBOL2(Accel::Intersector8,BVH4InstanceIntersector8Chunk);213DEFINE_SYMBOL2(Accel::Intersector8,BVH4InstanceMBIntersector8Chunk);214215DEFINE_SYMBOL2(Accel::Intersector8,BVH4InstanceArrayIntersector8Chunk);216DEFINE_SYMBOL2(Accel::Intersector8,BVH4InstanceArrayMBIntersector8Chunk);217218DEFINE_SYMBOL2(Accel::Intersector8,BVH4GridIntersector8HybridMoeller);219DEFINE_SYMBOL2(Accel::Intersector8,BVH4GridMBIntersector8HybridMoeller);220DEFINE_SYMBOL2(Accel::Intersector8,BVH4GridIntersector8HybridPluecker);221222// ==============223224DEFINE_SYMBOL2(Accel::Intersector16,BVH4OBBVirtualCurveIntersector16Hybrid);225DEFINE_SYMBOL2(Accel::Intersector16,BVH4OBBVirtualCurveIntersector16HybridMB);226DEFINE_SYMBOL2(Accel::Intersector16,BVH4OBBVirtualCurveIntersectorRobust16Hybrid);227DEFINE_SYMBOL2(Accel::Intersector16,BVH4OBBVirtualCurveIntersectorRobust16HybridMB);228229DEFINE_SYMBOL2(Accel::Intersector16,BVH4Triangle4Intersector16HybridMoeller);230DEFINE_SYMBOL2(Accel::Intersector16,BVH4Triangle4Intersector16HybridMoellerNoFilter);231DEFINE_SYMBOL2(Accel::Intersector16,BVH4Triangle4iIntersector16HybridMoeller);232DEFINE_SYMBOL2(Accel::Intersector16,BVH4Triangle4vIntersector16HybridPluecker);233DEFINE_SYMBOL2(Accel::Intersector16,BVH4Triangle4iIntersector16HybridPluecker);234235DEFINE_SYMBOL2(Accel::Intersector16,BVH4Triangle4vMBIntersector16HybridMoeller);236DEFINE_SYMBOL2(Accel::Intersector16,BVH4Triangle4iMBIntersector16HybridMoeller);237DEFINE_SYMBOL2(Accel::Intersector16,BVH4Triangle4vMBIntersector16HybridPluecker);238DEFINE_SYMBOL2(Accel::Intersector16,BVH4Triangle4iMBIntersector16HybridPluecker);239240DEFINE_SYMBOL2(Accel::Intersector16,BVH4Quad4vIntersector16HybridMoeller);241DEFINE_SYMBOL2(Accel::Intersector16,BVH4Quad4vIntersector16HybridMoellerNoFilter);242DEFINE_SYMBOL2(Accel::Intersector16,BVH4Quad4iIntersector16HybridMoeller);243DEFINE_SYMBOL2(Accel::Intersector16,BVH4Quad4vIntersector16HybridPluecker);244DEFINE_SYMBOL2(Accel::Intersector16,BVH4Quad4iIntersector16HybridPluecker);245246DEFINE_SYMBOL2(Accel::Intersector16,BVH4Quad4iMBIntersector16HybridMoeller);247DEFINE_SYMBOL2(Accel::Intersector16,BVH4Quad4iMBIntersector16HybridPluecker);248249DEFINE_SYMBOL2(Accel::Intersector16,BVH4SubdivPatch1Intersector16);250DEFINE_SYMBOL2(Accel::Intersector16,BVH4SubdivPatch1MBIntersector16);251252DEFINE_SYMBOL2(Accel::Intersector16,BVH4VirtualIntersector16Chunk);253DEFINE_SYMBOL2(Accel::Intersector16,BVH4VirtualMBIntersector16Chunk);254255DEFINE_SYMBOL2(Accel::Intersector16,BVH4InstanceIntersector16Chunk);256DEFINE_SYMBOL2(Accel::Intersector16,BVH4InstanceMBIntersector16Chunk);257258DEFINE_SYMBOL2(Accel::Intersector16,BVH4InstanceArrayIntersector16Chunk);259DEFINE_SYMBOL2(Accel::Intersector16,BVH4InstanceArrayMBIntersector16Chunk);260261DEFINE_SYMBOL2(Accel::Intersector16,BVH4GridIntersector16HybridMoeller);262DEFINE_SYMBOL2(Accel::Intersector16,BVH4GridMBIntersector16HybridMoeller);263DEFINE_SYMBOL2(Accel::Intersector16,BVH4GridIntersector16HybridPluecker);264265// SAH scene builders266private:267DEFINE_ISA_FUNCTION(Builder*,BVH4Curve4vBuilder_OBB_New,void* COMMA Scene* COMMA size_t);268DEFINE_ISA_FUNCTION(Builder*,BVH4Curve4iBuilder_OBB_New,void* COMMA Scene* COMMA size_t);269DEFINE_ISA_FUNCTION(Builder*,BVH4OBBCurve4iMBBuilder_OBB,void* COMMA Scene* COMMA size_t);270DEFINE_ISA_FUNCTION(Builder*,BVH4Curve8iBuilder_OBB_New,void* COMMA Scene* COMMA size_t);271DEFINE_ISA_FUNCTION(Builder*,BVH4OBBCurve8iMBBuilder_OBB,void* COMMA Scene* COMMA size_t);272273DEFINE_ISA_FUNCTION(Builder*,BVH4Triangle4SceneBuilderSAH,void* COMMA Scene* COMMA size_t);274DEFINE_ISA_FUNCTION(Builder*,BVH4Triangle4vSceneBuilderSAH,void* COMMA Scene* COMMA size_t);275DEFINE_ISA_FUNCTION(Builder*,BVH4Triangle4iSceneBuilderSAH,void* COMMA Scene* COMMA size_t);276DEFINE_ISA_FUNCTION(Builder*,BVH4Triangle4iMBSceneBuilderSAH,void* COMMA Scene* COMMA size_t);277DEFINE_ISA_FUNCTION(Builder*,BVH4Triangle4vMBSceneBuilderSAH,void* COMMA Scene* COMMA size_t);278DEFINE_ISA_FUNCTION(Builder*,BVH4QuantizedTriangle4iSceneBuilderSAH,void* COMMA Scene* COMMA size_t);279280DEFINE_ISA_FUNCTION(Builder*,BVH4Quad4vSceneBuilderSAH,void* COMMA Scene* COMMA size_t);281DEFINE_ISA_FUNCTION(Builder*,BVH4Quad4iSceneBuilderSAH,void* COMMA Scene* COMMA size_t);282DEFINE_ISA_FUNCTION(Builder*,BVH4Quad4iMBSceneBuilderSAH,void* COMMA Scene* COMMA size_t);283DEFINE_ISA_FUNCTION(Builder*,BVH4QuantizedQuad4iSceneBuilderSAH,void* COMMA Scene* COMMA size_t);284285DEFINE_ISA_FUNCTION(Builder*,BVH4SubdivPatch1BuilderSAH,void* COMMA Scene* COMMA size_t);286DEFINE_ISA_FUNCTION(Builder*,BVH4SubdivPatch1MBBuilderSAH,void* COMMA Scene* COMMA size_t);287288DEFINE_ISA_FUNCTION(Builder*,BVH4VirtualSceneBuilderSAH,void* COMMA Scene* COMMA size_t);289DEFINE_ISA_FUNCTION(Builder*,BVH4VirtualMBSceneBuilderSAH,void* COMMA Scene* COMMA size_t);290291DEFINE_ISA_FUNCTION(Builder*,BVH4InstanceSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);292DEFINE_ISA_FUNCTION(Builder*,BVH4InstanceMBSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);293294DEFINE_ISA_FUNCTION(Builder*,BVH4InstanceArraySceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);295DEFINE_ISA_FUNCTION(Builder*,BVH4InstanceArrayMBSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);296297DEFINE_ISA_FUNCTION(Builder*,BVH4GridSceneBuilderSAH,void* COMMA Scene* COMMA size_t);298DEFINE_ISA_FUNCTION(Builder*,BVH4GridMBSceneBuilderSAH,void* COMMA Scene* COMMA size_t);299300// spatial scene builder301private:302DEFINE_ISA_FUNCTION(Builder*,BVH4Triangle4SceneBuilderFastSpatialSAH,void* COMMA Scene* COMMA size_t);303DEFINE_ISA_FUNCTION(Builder*,BVH4Triangle4vSceneBuilderFastSpatialSAH,void* COMMA Scene* COMMA size_t);304DEFINE_ISA_FUNCTION(Builder*,BVH4Triangle4iSceneBuilderFastSpatialSAH,void* COMMA Scene* COMMA size_t);305DEFINE_ISA_FUNCTION(Builder*,BVH4Quad4vSceneBuilderFastSpatialSAH,void* COMMA Scene* COMMA size_t);306307// twolevel scene builders308private:309DEFINE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelTriangle4MeshSAH,void* COMMA Scene* COMMA bool);310DEFINE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelTriangle4vMeshSAH,void* COMMA Scene* COMMA bool);311DEFINE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelTriangle4iMeshSAH,void* COMMA Scene* COMMA bool);312DEFINE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelQuadMeshSAH,void* COMMA Scene* COMMA bool);313DEFINE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelVirtualSAH,void* COMMA Scene* COMMA bool);314DEFINE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelInstanceSAH,void* COMMA Scene* COMMA Geometry::GTypeMask COMMA bool);315DEFINE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelInstanceArraySAH,void* COMMA Scene* COMMA Geometry::GTypeMask COMMA bool);316};317}318319320